%EB%A1%9C%20%ED%8C%8C%EC%9D%BC%20%EB%B0%8F%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%20%EC%83%9D%EC%84%B1.png)
뭔가가 필요하고 wget
(cwd에 압축 파일이 생성됨) 추출한 다음 복사/이동/수정 작업을 수행하고 마지막으로 다운로드한 아카이브에서 스크립트를 실행해야 합니다.
이제 이러한 모든 작업은 직접( wget
, 추출 등) 또는 간접적으로(스크립트 실행) 파일과 디렉터리(모두 현재 작업 디렉터리에 있음)를 생성하게 됩니다. 나는 이 모든 작업을 다음과 같이 수행합니다 root
(최종 원하는 사용자에게 수행할 수 있는 방법은 없음).
문제는 프로세스에서 생성된 모든 항목이 루트 또는 sudo 사용자의 소유라는 것입니다. 작업이 끝나면(때때로 중간에) 일련의 chmod
및 chown
명령을 실행하여 문제를 바로잡아야 합니다.
이제 어떻게든 시스템에 "이제부터 루트로 명령을 실행할 때 생성하는 모든 파일이나 디렉터리는 이러한 소유권과 권한으로 생성하게 됩니다"라고 알릴 수 있다면 좋을 것입니다.
답변1
sudo -u username touch filename
스크립트 가 root
. 구성 에 따라 일반적으로 비밀번호가 필요하지 않습니다 sudoers
.
또는 를 실행하십시오 su username -c touch filename
. 추가 인수는 사용자의 셸에 제공되며 -c
셸에 대한 옵션은 규칙에 따라 지정된 명령을 실행합니다.
일부 명령(예: mkdir
)은 권한을 지정하는 인수를 지원합니다.
mkdir -m 0700 foo
기본적으로 파일 작업은 umask
셸의 집합을 따릅니다. 어떤 권한이 있는지 정의합니다.거부됨. 예를 들어 umask
A 는0022
~ 아니다그룹 및 기타 사용자에 대한 쓰기 권한을 설정합니다. 0077
그룹 및 다른 사람이 권한을 얻지 못하도록 하려면 로 설정하세요 .
setgid
생성된 모든 파일이 그룹 멤버십을 상속하도록 on 디렉터리를 설정할 수 있습니다 .
chmod g+s someDir
일부 유닉스지원하다setuid
( ) 에 대해서는 동일한 동작이지만 chmod u+s
Linux는 아닙니다.
답변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