Bagaimana cara memeriksa umask untuk semua pengguna di Linux?

18

Di bawah AIX saya dapat memeriksa umaskuntuk semua pengguna dengan:

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

Tetapi bagaimana saya bisa memeriksa umaskpengaturan untuk semua pengguna di Linux? ( suuntuk setiap pengguna lalu umaskperintah? Apakah ada cara yang lebih baik untuk itu?)

UPDATE1:

Ini bukan yang terbaik untuk susemua pengguna, karena pada beberapa server RHEL shell default untuk beberapa pengguna dihentikan / ditutup ..:

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

jadi jika saya suke pengguna ... maka server dimatikan?

UPDATE2: Saya membuat hadiah untuk jawaban non-su.

peter gasko
sumber
Saya telah menyebutkan untuk menghindari pengguna sistem ($ 3> 500), berarti memeriksa di atas UID 500
Rahul Patil
lagi: Saya perlu memeriksa umask untuk semua pengguna, tidak termasuk pengguna sistem :)
gasko peter
kami dapat memeriksa shell yang valid, bagaimana menurut Anda? , artinya jika shell adalah yang lain / bin / bash, maka kita dapat melewati pengguna itu. bukan?
Rahul Patil

Jawaban:

9

Anda dapat memeriksa menggunakan:

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

Untuk menghindari memeriksa pengguna sistem lakukan:

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

Keluaran:

ram       0022
shyam     0022
suraj     0022
vinayak   0022
javed     0022
Rahul Patil
sumber
1
ok, terima kasih, tetapi adakah cara untuk memeriksa umask tanpa "su" kepada pengguna?
gasko peter
jika Anda telah menetapkan secara manual, katakan di ~.bashrckemudian Anda dapat masuk ke file ini.
Rahul Patil
Itu dapat diatur di banyak tempat ... itu sebabnya grepping bukan solusi terbaik
gasko peter
maka kita harus memeriksa di banyak tempat
Rahul Patil
seharusnya lebih baik, jika Anda telah menetapkan umask di per pengguna dalam file umum misalnya .bashrc
Rahul Patil
10

The umaskbiasanya sistem yang luas diatur melalui file konfigurasi: /etc/login.defs:

$ grep UMASK /etc/login.defs 
UMASK           077

Nilai ini dapat diganti tetapi biasanya tidak melalui salah satu /etc/bashrc, /etc/profiledan / atau oleh pengguna di $HOME/.bashrc(anggap mereka menggunakan Bash).

Jika Anda grepuntuk "umask" di file-file tersebut Anda juga akan melihat ini di kotak 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

Menggali lebih dalam:

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

Jadi setidaknya pada sistem RHEL umaskadalah apakah 002jika UID Anda lebih besar dari 199, dan 022sebaliknya (akun sistem).

slm
sumber
Untuk Ubuntu dan (mungkin) sistem berbasis Debian, Anda harus melakukan ini ~/.profile, yang memiliki nilai default yang dikomentari di bagian atas file untuk Anda batalkan komentar dan modifikasi pada basis per pengguna.
code_dredd