Como verificar umask para todos os usuários no Linux?

18

No AIX, posso verificar umasktodos os usuários com:

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

Mas como posso verificar a umaskconfiguração para todos os usuários no Linux? ( supara todo usuário e depois umaskcomando? Existem maneiras melhores para isso?)

UPDATE1:

Não é o melhor para sutodos os usuários, porque em alguns servidores RHEL o shell padrão para alguns usuários é parar / desligar ..:

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

Então, se eu supara o usuário ... então o servidor é desligado?

UPDATE2: criei uma recompensa por uma resposta não baseada em su.

gasko peter
fonte
Já mencionei para o usuário do sistema evitar (US $ 3> 500), meios de verificação acima UID 500
Rahul Patil
novamente: Eu preciso verificar umask para todos os usuários, sem excluir usuários do sistema :)
Gasko peter
podemos verificar se há shell válido, o que você acha? , significa que se o shell é outro / bin / bash, podemos pular esse usuário. não é?
Rahul Patil

Respostas:

9

Você pode verificar usando:

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

Para evitar verificar o usuário do sistema, faça:

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

Resultado:

ram       0022
shyam     0022
suraj     0022
vinayak   0022
javed     0022
Rahul Patil
fonte
11
ok, obrigado, mas existem maneiras de verificar o umask sem "su" para o usuário?
Gasko peter
se você tiver definido manualmente, digamos que ~.bashrcvocê pode entrar nesse arquivo.
Rahul Patil
Pode ser definido em muitos lugares ... É por isso que grepping não é a melhor solução
Gasko peter
então temos que verificar em muitos lugar
Rahul Patil
ela deve ser melhor, se tiver definido umask no por usuário em um arquivo comum, por exemplo .bashrc
Rahul Patil
10

A umaské tipicamente um sistema amplo definida através do arquivo de configuração: /etc/login.defs:

$ grep UMASK /etc/login.defs 
UMASK           077

Este valor pode ser substituído, mas normalmente não é, quer através de /etc/bashrc, /etc/profilee / ou pelos usuários em sua $HOME/.bashrc(Supondo que eles estão usando Bash).

Se você grep"umask" nesses arquivos mencionados acima, também notará isso nas caixas 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

Indo mais fundo:

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

Portanto, pelo menos no sistema RHEL, o umaské 002se o seu UID for maior que 199 e o 022caso (contas do sistema).

slm
fonte
Para sistemas baseados no Ubuntu e (provavelmente) no Debian, você deve fazer isso ~/.profile, que tem o valor padrão comentado na parte superior do arquivo para você descomentar e modificar em uma base por usuário.
code_dredd