Linux下如何查看所有用户的umask?

gas*_*ter 19 umask

在 AIX 下,我可以使用以下命令检查umask所有用户:

cut -d : -f 1 /etc/passwd | while read ONELINE; do lsuser -a umask "$ONELINE"; done
Run Code Online (Sandbox Code Playgroud)

但是如何umask在 Linux 下检查所有用户的设置?(su对每个用户然后umask命令?有没有更好的方法?)

更新1:

su对所有用户来说并不是最好的,因为在一些 RHEL 服务器上,一些用户的默认 shell 是暂停/关闭..:

shutdown:x:6:0:shutdown;asdf;asdf;F:/sbin:/sbin/shutdown
Run Code Online (Sandbox Code Playgroud)

所以如果我su对用户...然后服务器关闭?

UPDATE2:我为一个非 su 的答案创建了一个赏金。

slm*_*slm 13

umask通常设定全系统通过配置文件:/etc/login.defs

$ grep UMASK /etc/login.defs 
UMASK           077
Run Code Online (Sandbox Code Playgroud)

This value can be overridden but typically is not through either /etc/bashrc, /etc/profile and/or by the users in their $HOME/.bashrc (Assuming they're using Bash).

If you grep for "umask" in those aforementioned files you'll also notice this on RHEL boxes:

$ grep umask /etc/bashrc /etc/profile
/etc/bashrc:    # By default, we want umask to get set. This sets it for non-login shell.
/etc/bashrc:       umask 002
/etc/bashrc:       umask 022
/etc/profile:# By default, we want umask to get set. This sets it for login shell
/etc/profile:    umask 002
/etc/profile:    umask 022
Run Code Online (Sandbox Code Playgroud)

Digging deeper:

  • /etc/bashrc

    # By default, we want umask to get set. This sets it for non-login shell.
    # Current threshold for system reserved uid/gids is 200
    # You could check uidgid reservation validity in
    # /usr/share/doc/setup-*/uidgid file
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
       umask 002
    else
       umask 022
    fi
    
    Run Code Online (Sandbox Code Playgroud)
  • /etc/profile

    # By default, we want umask to get set. This sets it for login shell
    # Current threshold for system reserved uid/gids is 200
    # You could check uidgid reservation validity in
    # /usr/share/doc/setup-*/uidgid file
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
        umask 002
    else
        umask 022
    fi
    
    Run Code Online (Sandbox Code Playgroud)

So at least on RHEL system's the umask is either 002 if your UID is greater than 199, and 022 otherwise (system accounts).


Rah*_*til 10

您可以使用以下方法检查:

for user in $(awk -F: '{print $1}' /etc/passwd); 
do 
    printf "%-10s" "$user" ; su -c 'umask' -l $user 2>/dev/null
done
Run Code Online (Sandbox Code Playgroud)

为避免检查系统用户,请执行以下操作:

for user in $(awk -F: '( $3 >= 500 ){print $1}' /etc/passwd); 
do 
    printf "%-10s" "$user" ; su -c 'umask' -l $user 2>/dev/null
done
Run Code Online (Sandbox Code Playgroud)

输出:

ram       0022
shyam     0022
suraj     0022
vinayak   0022
javed     0022
Run Code Online (Sandbox Code Playgroud)