如何在Linux下为所有用户检查umask?


18

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

cut -d : -f 1 /etc/passwd | while read ONELINE; do lsuser -a umask "$ONELINE"; done

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

UPDATE1:

su对于所有用户而言,这并不是最好的选择,因为在某些RHEL服务器上,少数用户的默认shell是停止/关闭。

shutdown:x:6:0:shutdown;asdf;asdf;F:/sbin:/sbin/shutdown

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

UPDATE2:我为非基于Su的答案创建了赏金。


我已经提到过要避免使用系统用户($ 3> 500),这意味着要检查UID 500以上
Rahul Patil

再次:我需要检查所有用户的umask ,不排除系统用户:)
gasko peter

我们可以检查有效的外壳,您怎么看?,意味着如果shell不是/ bin / bash,那么我们可以跳过该用户。是不是?
Rahul Patil

Answers:


9

您可以使用检查:

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

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

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

输出:

ram       0022
shyam     0022
suraj     0022
vinayak   0022
javed     0022

1
好的,谢谢,但是有什么方法可以在不向用户“ su”的情况下检查umask?
gasko peter

如果您已手动设置,请说入,~.bashrc然后可以将其grep到该文件中。
Rahul Patil

它可以在许多地方设置...这就是为什么grepping并不是最佳解决方案的原因
gasko peter

那么我们必须在许多地方检查
Rahul Patil

它应该会更好,如果你已经在共同文件中umask设置每个用户的.bashrc如
拉胡尔·帕蒂尔

10

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

$ grep UMASK /etc/login.defs 
UMASK           077

此值可以被覆盖,但通常是不通过任一/etc/bashrc/etc/profile和/或通过在其用户$HOME/.bashrc(假设他们正在使用击)。

如果您grep在上述文件中使用“ umask”,您还会在RHEL框中注意到这一点:

$ 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

深层发掘:

  • /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
    
  • /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
    

因此,至少在RHEL系统的umask要么是002如果你的UID是超过199以上,022否则(系统帐户)。


对于Ubuntu和(可能)基于Debian的系统,您应该在中执行此操作~/.profile,该操作在文件顶部带有注释的默认值,以供您取消注释和基于每个用户进行修改。
code_dredd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.