Как проверить umask для всех пользователей под Linux?

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 оболочкой по умолчанию для нескольких пользователей является остановка / завершение работы:

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

так что если я suпользователю ... то сервер выключится?

ОБНОВЛЕНИЕ 2: Я создал награду за ответ, не основанный на су.

Гаско Питер
источник
Я уже упоминал о том, что пользователь должен избегать системы ($ 3> 500), значит проверка выше UID 500
Рахул Патил
еще раз: мне нужно проверить umask для всех пользователей, не считая пользователей системы :)
gasko peter
мы можем проверить правильность оболочки, что вы думаете? , означает, что если shell отличается от / bin / bash, то мы можем пропустить этого пользователя. не так ли?
Рахул Патил

Ответы:

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
хорошо, спасибо, но есть ли способы проверить umask, не обращаясь к пользователю?
Гаско Петр
если вы установили вручную, скажем, ~.bashrcзатем вы можете grep в этот файл.
Рахул Патил
Это может быть установлено во многих местах ... вот почему grepping - не лучшее решение
gasko peter
тогда мы должны проверить во многих местах
Рахул Патил
было бы лучше, если вы установили umask для каждого пользователя в общем файле, например .bashrc
Rahul Patil
10

umaskОбычно устанавливаются по всей системе через конфигурационный файл: /etc/login.defs:

$ grep UMASK /etc/login.defs 
UMASK           077

Это значение может быть переопределено, но, как правило, не через /etc/bashrc, /etc/profileи / или пользователями в их $HOME/.bashrc(при условии, что они используют Bash).

Если вы используете 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иначе (системные учетные записи).

SLM
источник
Для систем на основе Ubuntu и (возможно) систем Debian вы должны сделать это в ~/.profileфайле со значением по умолчанию, закомментированным в верхней части файла, чтобы вы могли раскомментировать и изменить его для каждого пользователя.
code_dredd