제한된 권한을 가진 특정 사용자로 파일을 원자적으로 생성하는 방법

제한된 권한을 가진 특정 사용자로 파일을 원자적으로 생성하는 방법

다음 명령을 원자적인 한 줄 명령으로 변환해 보십시오. 가능합니까?

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). 따라서 기본적으로 teeumask로 실행할 수 없으며 0000대신 사용됩니다 0022. 하지만 여기서는 이를 더욱 엄격하게 만들었고 효과가 있었습니다.

물론 구성에서는 umask를 다른 값으로 설정하거나 를 사용하여 umask_override더 허용적으로 만들 수 있으며 이를 수정할 수 있는 일부 PAM 모듈도 있을 수 있습니다. 이 경우 sudo를 사용하여 umask 세트로 셸을 실행한 후 다음 명령을 실행할 수 있습니다.

echo foo | sudo -u sun sh -c 'umask 077; tee bar.private'

관련 정보