Linux에서 모든 사용자의 umask를 보는 방법은 무엇입니까?

Linux에서 모든 사용자의 umask를 보는 방법은 무엇입니까?

AIX에서는 다음을 umask사용하여 모든 사용자를 확인할 수 있습니다.

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

umask그러나 Linux에서 모든 사용자의 설정을 보는 방법은 무엇입니까 ? ( su그런 다음 각 사용자에 대한 명령 umask? 더 좋은 방법이 있습니까?)

업데이트 1:

su일부 RHEL 서버에서는 일부 사용자의 기본 셸이 일시 중지/종료이기 때문에 이는 모든 사용자에게 가장 적합한 것은 아닙니다 .:

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

그럼 su사용자에게 이렇게 하면... 서버가 다운되나요?

업데이트 2:나는 su 기반이 아닌 답변에 대한 현상금을 만들었습니다.

답변1

일반적으로 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
    

umask따라서 적어도 RHEL 시스템에서는 002UID가 199보다 크면 022그렇지 않은 경우(시스템 계정)입니다.

답변2

다음을 사용하여 확인할 수 있습니다(루트로 실행).

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

관련 정보