sudoing 중 특정 소유자(사용자/그룹)로 파일 및 디렉터리 생성

sudoing 중 특정 소유자(사용자/그룹)로 파일 및 디렉터리 생성

뭔가가 필요하고 wget(cwd에 압축 파일이 생성됨) 추출한 다음 복사/이동/수정 작업을 수행하고 마지막으로 다운로드한 아카이브에서 스크립트를 실행해야 합니다.

이제 이러한 모든 작업은 직접( wget, 추출 등) 또는 간접적으로(스크립트 실행) 파일과 디렉터리(모두 현재 작업 디렉터리에 있음)를 생성하게 됩니다. 나는 이 모든 작업을 다음과 같이 수행합니다 root(최종 원하는 사용자에게 수행할 수 있는 방법은 없음).

문제는 프로세스에서 생성된 모든 항목이 루트 또는 sudo 사용자의 소유라는 것입니다. 작업이 끝나면(때때로 중간에) 일련의 chmodchown명령을 실행하여 문제를 바로잡아야 합니다.

이제 어떻게든 시스템에 "이제부터 루트로 명령을 실행할 때 생성하는 모든 파일이나 디렉터리는 이러한 소유권과 권한으로 생성하게 됩니다"라고 알릴 수 있다면 좋을 것입니다.

답변1

sudo -u username touch filename스크립트 가 root. 구성 에 따라 일반적으로 비밀번호가 필요하지 않습니다 sudoers.

또는 를 실행하십시오 su username -c touch filename. 추가 인수는 사용자의 셸에 제공되며 -c셸에 대한 옵션은 규칙에 따라 지정된 명령을 실행합니다.


일부 명령(예: mkdir)은 권한을 지정하는 인수를 지원합니다.

mkdir -m 0700 foo

기본적으로 파일 작업은 umask셸의 집합을 따릅니다. 어떤 권한이 있는지 정의합니다.거부됨. 예를 들어 umaskA 는0022~ 아니다그룹 및 기타 사용자에 대한 쓰기 권한을 설정합니다. 0077그룹 및 다른 사람이 권한을 얻지 못하도록 하려면 로 설정하세요 .


setgid생성된 모든 파일이 그룹 멤버십을 상속하도록 on 디렉터리를 설정할 수 있습니다 .

chmod g+s someDir

일부 유닉스지원하다setuid( ) 에 대해서는 동일한 동작이지만 chmod u+sLinux는 아닙니다.

답변2

제 생각에는 아주 우아한 또 다른 방법이 있습니다. install(1) 사용

예를 들어, zabbix-agentd에는 /var/run 내에 하위 폴더가 필요하지만 최근 배포판에서는 /var/run에 tmpfs를 사용하므로 디렉터리는 재부팅 후에도 유지되지 않습니다. 다음을 포함하는 /etc/sysconfig/zabbix-agentd 파일을 생성하여 문제를 해결했습니다.

install -g zabbix -o zabbix -d /var/run/zabbix

답변3

Unix 계열 시스템에서 새로 생성된 파일과 디렉터리는 이를 생성한 프로세스의 소유자가 소유합니다. 표준 유틸리티에는 일반적으로 생성된 파일의 소유자를 변경할 수 있는 옵션이 없습니다.

원래 사용자의 UID 및 GID가 포함된 변수

일부 명령을 반복적으로 실행하는 경우 변수를 사용하여 $SUDO_UID호출 $SUDO_GID한 사용자를 참조할 수 있습니다 sudo.

sudo sh -c "do_something ; chown -R \"\$SUDO_UID:\$SUDO_GID\" files and directories"

생성된 파일 및 디렉터리 목록을 자동으로 가져오기

생성된(그리고 수정된) 파일 및 디렉터리 목록을 자동으로 얻으려면 syscall strace을 기반으로 하는 감시 하에 명령을 실행할 수 있습니다 ptrace().

strace -qqfe open,creat,mkdir,link,symlink,mknod -o '|your_processing_of_strace_output' do_something

또는 예를 들어 사용할 수 있습니다인스톨워치메커니즘을 기반으로 한 것입니다 LD_PRELOAD.

추가 작업을 위한 아이디어

위에서 언급한 방법을 기반으로 생성/수정된 파일의 소유자 및 액세스 권한을 자동으로 변경하는 도구를 만드는 것이 가능합니다. 사용법은 다음과 같이 간단할 수 있습니다.

sudo watch-chown do_something

관련 정보