簡體   English   中英

如何確保/ etc / passwd中的gid也存在於/ etc / group中

[英]How to ensure that gid in /etc/passwd also exist in /etc/group

背景:DoD指南《未分類的RHEL 6安全技術實施指南》(STIG)在RHEL-06-000294(STID-ID)中指定,出現在/ etc / passwd中的所有用戶主要GID必須存在於/ etc / group中。

與其運行推薦的“ pwck -rq”命令並傳遞到日志,然后強制管理員手動進行補救,不如通過編程方式檢查用戶GID是否存在,如果不存在,只需將其設置為確實存在的某種方式,則更有意義。作為“用戶”或“沒人”

我一直在反對這個想法,但還不能完全理解。 我在sed,awk以及將grep放入sed或awk中失敗了。 問題似乎出在我嘗試嵌套命令時。 我了解到awk不會嵌套在單線中(或可能根本不會嵌套)的困難方式。

更傳統的循環的偽代碼如下所示:

# do while not EOF /etc/passwd
#   GIDREF = get 4th entry, sepparator ":" from line
#   USERNAMEFOUND = get first entry, separator ":" from line
#   grep ":$GIDREF:" /etc/group
#   if not found then
#      set GID for USERNAMEFOUND to "users"
#   fi
# end-do.

這似乎應該很簡單,但我顯然遺漏了一些東西。

謝謝您的幫助。

-柯克

列出/etc/passwd/etc/group不存在的所有GID:

comm -23 <(awk -F: '{print $4}' /etc/passwd | sort -u) \
         <(awk -F: '{print $3}' /etc/group  | sort -u)

解決它們:

nogroup=$(awk -F: '($1=="nobody") {print $3}' /etc/group)
for gid in $(
 comm -23 <(awk -F: '{print $4}' /etc/passwd | sort -u) \
          <(awk -F: '{print $3}' /etc/group  | sort -u)); do
  awk -v gid="$gid" -F: '($4==gid) {print $1}' /etc/passwd | 
   xargs -n 1 usermod -g "$nogroup"
done

我在考慮以下方面:

if ! grep "^$(groups $USERNAME | cut -d\  -f 1):" /etc/group > /dev/null; then
  usermod -g users $USERNAME
fi

哪里

groups $USERNAME | cut -d\  -f 1

通過在第一個空格處分割groups $USERNAME的輸出(在:之前)來給出$USERNAME的主要組

grep ^foo: /etc/group

檢查組foo是否存在。

編輯:修復代碼:引用和在空格處而不是在冒號處分割,以允許在grep模式中附加冒號(否則, grep ^foo也將說如果存在group foobar則存在group foo )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM