Jak sprawdzić umask dla wszystkich użytkowników pod Linuksem?

18

W systemie AIX mogę sprawdzić umaskdla wszystkich użytkowników z:

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

Ale jak mogę sprawdzić umaskustawienia dla wszystkich użytkowników pod Linuksem? ( sudo każdego użytkownika, a następnie umaskpolecenia? Czy są na to jakieś lepsze sposoby?)

AKTUALIZACJA 1:

Nie jest to najlepsze dla suwszystkich użytkowników, ponieważ na niektórych serwerach RHEL domyślną powłoką dla kilku użytkowników jest zatrzymanie / zamknięcie ..:

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

więc jeśli przejdę sudo użytkownika ... to serwer się wyłączy?

AKTUALIZACJA 2: Stworzyłem nagrodę za odpowiedź nie opartą na su.

Gasko Peter
źródło
Wspomniałem już o unikaniu użytkownika systemu (3 USD> 500), oznacza to sprawdzenie powyżej UID 500
Rahul Patil
jeszcze raz: muszę sprawdzić umask dla wszystkich użytkowników, nie wyłączając użytkowników systemu :)
gasko peter
możemy sprawdzić poprawność powłoki, co myślisz? , oznacza, że ​​jeśli shell jest inny niż / bin / bash, możemy pominąć tego użytkownika. prawda?
Rahul Patil

Odpowiedzi:

9

Możesz to sprawdzić za pomocą:

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

Aby uniknąć sprawdzania użytkownika systemu:

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

Wynik:

ram       0022
shyam     0022
suraj     0022
vinayak   0022
javed     0022
Rahul Patil
źródło
1
ok, dziękuję, ale czy są jakieś sposoby na sprawdzenie umask bez „zadawania” użytkownikowi?
gasko peter
jeśli ustawiłeś ręcznie, powiedzmy ~.bashrc, możesz grep do tego pliku.
Rahul Patil
Można go ustawić w wielu miejscach ... dlatego grepping nie jest najlepszym rozwiązaniem
gasko peter
potem musimy sprawdzić w wielu miejscach
Rahul Patil
powinno być lepiej, jeśli ustawiłeś umask na użytkownika we wspólnym pliku np. .bashrc
Rahul Patil
10

umaskUstawia się zwykle za pośrednictwem systemu szeroki pliku konfiguracyjnym: /etc/login.defs:

$ grep UMASK /etc/login.defs 
UMASK           077

Wartość ta może być zmieniona, ale zwykle nie jest za albo /etc/bashrc, /etc/profilei / lub przez użytkowników w ich $HOME/.bashrc(Zakładając, że używasz bash).

Jeśli używasz grep„umask” w wyżej wymienionych plikach, zauważysz to również na polach 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

Kopać głębiej:

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

Tak więc przynajmniej w systemie RHEL umaskjest albo, 002jeśli Twój UID jest większy niż 199, lub 022inaczej (konta systemowe).

slm
źródło
W przypadku systemów Ubuntu i (prawdopodobnie) opartych na Debianie, powinieneś to zrobić, w ~/.profilektórym domyślna wartość jest komentowana u góry pliku, abyś mógł odkomentować i zmodyfikować dla poszczególnych użytkowników.
code_dredd