다른 사용자 및 그룹으로 파일 만들기

다른 사용자 및 그룹으로 파일 만들기

로컬로 작성된 파일을 다운로드하기 위해 rsync를 수행한 다음 소유자를 apache로 설정하고 그룹을 특정 사용자 그룹(apache가 구성원이 아님)으로 설정해야 하는 bash 스크립트가 있습니다.

rsync 프로세스가 파일에 쓸 때 이러한 소유권을 가진 파일을 생성하는 방법이 있습니까?사실을 확인하고 변경하기 위해 chown을 사용하는 대신? 파일이 너무 많아서 나중에 검색하는 데 시간이 너무 많이 걸립니다.

여러 사용자 그룹에 대해 이 작업을 수행해야 하므로 이러한 그룹에 Apache를 추가해서는 안 되며 확실히 모든 그룹을 기본 그룹으로 설정해서는 안 됩니다.

즉, X가 Y의 구성원이 아닌 경우 루트가 사용자 X 및 그룹 Y로 파일을 생성할 수 있습니까?

runuser를 사용해 보았지만 그룹을 설정할 수 없습니다(아마도 아파치가 그룹에 속하지 않기 때문일 것입니다).

chmod를 사용하여 권한을 변경하고 사용자/그룹 조합을 추가할 수 있다는 것을 알고 있습니다. 내가 묻는 것은 쓰기 위해 파일을 열고 파일을 생성할 때 사용자/그룹 조합을 사용할 수 있는 방법이 있는지입니다.

sudo를 사용해 보십시오:

[root@centos7 tmp]# groups angelo
angelo : angelo wheel
[root@centos7 tmp]# groups apache
apache : apache
[root@centos7 tmp]# sudo -u angelo -g apache touch angelo-file
Sorry, user root is not allowed to execute '/bin/touch angelo-file' as angelo:apache on centos7
[root@centos7 tmp]# ls -ld angelo-file
ls: cannot access angelo-file: No such file or directory
[root@centos7 tmp]# sudo -u angelo -g angelo touch angelo-file
[root@centos7 tmp]# ls -ld angelo-file
-rw-r--r-- 1 angelo angelo 0 Nov 12 03:13 angelo-file

답변1

파일을 사용하지 않고 특정 사용자 및 그룹으로 파일을 생성하려면 해당 사용자 및 그룹을 chown사용하고 지정할 수 있습니다 .sudo

sudo -u \#49 -g \#58 touch /tmp/something

지정하는 사용자는 이 작업을 수행하려는 디렉터리에 쓸 수 있는 권한이 있어야 합니다.


또는 현재 사용자로 셸을 시작하고 그룹을 다른 것으로 설정할 수 있습니다.

sudo runuser "$USER" -g somegroup

나는 Vagrant 상자에서 이것을 시도했고 효과가 있었습니다:

[vagrant@localhost ~]$ sudo runuser "$USER" -g floppy
[vagrant@localhost ~]$ touch testfile
[vagrant@localhost ~]$ ls -l testfile
-rw-r--r--. 1 vagrant floppy 0 Nov  9 15:57 testfile
[vagrant@localhost ~]$ 

이는 "방랑자" 사용자가 "플로피" 그룹에 속하지 않는다는 사실에도 불구하고 발생합니다.

답변2

$ sudo install -o angelo -g apache /dev/null angelo-file

버전 8.4를 설치하면 저에게 효과적입니다 centos 6. 여기서 설치는 /dev/null(항상 비어 있다고 알려진) 파일을 대상에 "복사"하여 빈 파일을 생성하는 동시에 대상 파일이 루트로 실행되므로 동일한/단일 명령으로 대상 파일의 소유자 및 그룹을 설정하는 것입니다. sudo .

자세한 내용은 다음에서 확인하세요. man install또는 install --help. 동일한/단일 명령으로 디렉토리를 생성하고 권한 모드를 설정할 수 있습니다. install 명령은 makefile과 같은 빌드 도구에서 자주 사용됩니다.

또한 옵션을 사용하여 -T대상이 이미 존재하지만 디렉토리가 있는 경우 빈 디렉토리를 생성하는 대신 오류와 함께 실패할 수도 있습니다 angelo-file/null.

편집: OP가 rsync에 대해 물었습니다. rsync 3.1.2부터 , --chmod, --chown--usermap의 옵션을 볼 수 있습니다 --groupmap. ( centos 6iUS 저장소에서 업데이트된 rsync를 얻을 수 있기 때문입니다).

답변3

높은 권한으로 스크립트를 실행하는 한 문제가 없습니다. 예를 들어:

#!/usr/bin/env bash 
touch foobar
chown www-data:sudo foobar

일반 사용자로 실행하면 실패합니다.

$ ./foo.sh 
chown: changing ownership of `foobar': Operation not permitted

하지만 루트로 실행하면 잘 작동합니다.

$ sudo foo.sh
$ ls -l foobar
-rw-r--r-- 1 www-data sudo 26M Sep 17 17:34 foobar

답변4

ac 래퍼에서 "setuid"를 사용하여 chmod를 수행할 수 있지만 프로그래밍이 엄격하게 제한되지 않는 한 매우 큰 보안 허점이므로 권장되지 않습니다.

관련 정보