다음 명령을 원자적인 한 줄 명령으로 변환해 보십시오. 가능합니까?
echo foo | sudo -u sun tee bar.private
chmod 600 bar.private
답변1
새로 생성된 파일의 권한은 umask 프로세스에 의해 수정되며, 이는 반대로 작동합니다.놓다umask에는분명한생성된 권한에서. 따라서 umask를 로 설정하면 0077
대부분의 유틸리티가 권한이 있는 파일을 생성하게 됩니다 0600
.
기본적으로 sudo는 실행된 환경에서 더 엄격한 umask를 상속하므로 다음을 수행할 수 있습니다.
echo foo | (umask 0077; sudo -u sun tee bar.private)
그리고 파일은 권한을 사용하여 생성됩니다 0600
.
실제로 sudo
비트 단위 연산을 수행합니다.그리고환경에 있는 umask와 환경에 설정된 umask구성 파일( umask
옵션, 기본값 0022
). 따라서 기본적으로 tee
umask로 실행할 수 없으며 0000
대신 사용됩니다 0022
. 하지만 여기서는 이를 더욱 엄격하게 만들었고 효과가 있었습니다.
물론 구성에서는 umask를 다른 값으로 설정하거나 를 사용하여 umask_override
더 허용적으로 만들 수 있으며 이를 수정할 수 있는 일부 PAM 모듈도 있을 수 있습니다. 이 경우 sudo를 사용하여 umask 세트로 셸을 실행한 후 다음 명령을 실행할 수 있습니다.
echo foo | sudo -u sun sh -c 'umask 077; tee bar.private'