sudoing하는 동안 특정 소유자 (사용자 / 그룹)를 가진 파일과 디렉토리 만들기 있음). 나는이 모든

나는 wget무언가를 해야합니다 (cwd의 압축 파일에 결과), 그것을 추출 한 다음 복사 / 이동 / 수정 작업을 수행하고 마침내 다운로드 한 아카이브에서 스크립트를 실행해야합니다.

이제 이러한 모든 작업은 직접 ( wget, 추출 등) 또는 간접 (스크립트 실행)로 인해 파일과 디렉토리가 생성됩니다 (모두 현재 작업 디렉토리에 있음). 나는이 모든 것을 root(최종의 원하는 사용자와 함께 할 수있는 방법으로)하지 않습니다.

문제는 다음과 같습니다. 프로세스에서 작성된 것은 root 또는 sudo 사용자가 소유합니다. 나는 (중반 방법으로 때로는) 끝났어요 때, 나는 일련의를 발행해야 chmod하고 chown일을 잘하도록 명령한다.

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



답변

sudo -u username touch filename스크립트가로 실행될 때 언제든지 할 수 있습니다 root. 일반적으로 sudoers구성 에 따라 비밀번호가 필요하지 않습니다 .

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


(와 같은 mkdir) 일부 명령 은 권한을 지정하기 위해 인수를 지원합니다.

mkdir -m 0700 foo

기본적으로 파일 조작 umask은 쉘 세트를 존중합니다 . 거부 된 권한을 정의합니다 . umask0022예는 않습니다 되지 그룹과 다른 사람에 대한 쓰기 권한을 설정합니다. 0077그룹 및 다른 사용자가 권한을 얻지 못하도록 설정하십시오 .


setgidon 디렉토리는 모든 파일이 그룹 멤버쉽을 상속 받도록 설정할 수 있습니다 .

chmod g+s someDir

일부 유닉스 는 ( ) 와 동일한 동작을 지원 하지만 Linux 는 지원 하지 않습니다.setuidchmod u+s


답변

내가 생각하는 또 다른 우아한 방법이 있습니다. install (1) 사용

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

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


답변

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

원래 사용자의 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

또는 예를 들어 메커니즘을 기반으로하는 Installwatch 를 사용할 수 있습니다 LD_PRELOAD.

추가 작업을위한 아이디어

위에서 언급 한 방법에 따라 소유자를 자동으로 변경하고 작성 / 수정 된 파일의 권한에 액세스 할 수있는 도구를 작성할 수 있습니다. 사용법은 다음과 같이 간단 할 수 있습니다.

sudo watch-chown do_something


답변