내가 디렉터리 그룹의 구성원인 디렉터리에 파일을 복사합니다.

내가 디렉터리 그룹의 구성원인 디렉터리에 파일을 복사합니다.

내 사용자 계정이 디렉터리 소유자가 아니지만 디렉터리 그룹 소유자인 그룹에 속한 디렉터리에 파일을 복사하려고 합니다. 제가 취한 조치는 다음과 같습니다.

그룹을 만들고 그룹에 나를 추가하세요.
stephen@pi:~ $ sudo groupadd test-group
stephen@pi:~ $ sudo usermod -a -G test-group stephen
stephen@pi:~ $ grep 'test-group' /etc/group
test-group:x:1002:stephen
파일 생성 및 권한 나열
stephen@pi:~ $ touch example.txt
stephen@pi:~ $ ls -l example.txt
-rw-r--r-- 1 stephen stephen 0 Feb  9 10:46 example.txt
디렉토리를 생성하고, 그룹 소유자를 새 그룹으로 변경하고, 디렉토리의 권한을 변경하여 그룹에 쓰기 권한을 부여합니다.
stephen@pi:~ $ sudo mkdir /var/www/testdir
stephen@pi:~ $ sudo chown :test-group /var/www/testdir/
stephen@pi:~ $ sudo chmod 664 /var/www/testdir/
stephen@pi:~ $ sudo ls -l /var/www
total 8
drwxr-xr-x 2 root    root       4096 Oct 31 12:17 html
drw-rw-r-- 2 root    test-group 4096 Feb  9 10:48 testdir
새로 생성된 파일을 이 디렉터리에 복사합니다.
stephen@pi:~ $ cp example.txt /var/www/testdir/straight-copy.txt
cp: failed to access '/var/www/testdir/straight-copy.txt': Permission denied

저는 이 디렉터리의 소유권을 갖고 있는 그룹의 구성원이고 그룹 권한은 rw로 설정되어 있습니다. 궁극적으로 이 디렉터리에 복사된 모든 파일이 상위 디렉터리(/var/www/testdir)의 권한을 상속받길 원합니다.

다음을 사용하여 복사할 수 있습니다 sudo.

파일의 소유권/권한 복사 sudo및 나열
stephen@pi:~ $ sudo cp example.txt /var/www/testdir/straight-copy.txt
stephen@pi:~ $ sudo ls -l /var/www/testdir/
total 0
-rw-r--r-- 1 root root 0 Feb  9 11:06 straight-copy.txt

누군가 나에게 무슨 일이 일어나고 있는지 설명해 주시겠습니까?

답변1

이 작업을 수행할 때:

sudo usermod -a -G test-group stephen

/etc/group그룹 데이터베이스만 수정됩니다(귀하의 경우 콘텐츠). 해당 gid는 stephen쉘을 실행하는 프로세스(또는 유효 uid 또는 실제 uid로 uid를 갖는 모든 프로세스)에 대한 보충 gid 목록에 자동으로 추가되지 않습니다.

셸 프로세스를 실행하거나 id -Gn(새 프로세스를 시작(uids/gids 상속)하고 id실행)하거나 ps -o user,group,supgrp -p "$$"(지원하는 경우 ) 목록에 없으면 해당 프로세스 가 목록에 없음 ps을 알 수 있습니다 .test-group

업데이트된 그룹 목록(또는 로그인한 세션의 상위 프로세스의 gid 목록을 설정하기 위해 데이터베이스를 찾는 login(또는 다른 로그인 응용 프로그램) 호출 )을 사용하여 새 프로세스를 시작하려면 로그아웃했다가 다시 로그인해야 합니다 .initgroups()passwdgroup

이렇게 하면 대상 사용자에 대한 gids 목록을 설정하는 것과 동일하거나 거기에서도 사용된다는 sudo -u stephen id -Gn것을 알 수 있습니다 . 같은test-groupsudoinitgroups()sudo zsh -c 'USERNAME=stephen; id -Gn'

반품,별도로 언급했듯이, 당신은해야찾다( x) 디렉토리 권한을 사용하면 해당 항목에 대한 액세스(생성 포함)가 가능합니다.

따라서 로그아웃했다가 다시 로그인하지 않고도 다음 작업을 수행할 수 있습니다.

# add search permissions for `a`ll:
sudo chmod a+x /var/www/testdir

# copy as the new you:
sudo -u stephen cp example.txt /var/www/testdir/

또한 이를 사용하여 실제 효과적인 gid newgrp test-group로 새 쉘 프로세스를 시작 test-group하고 이를 보충 gid 목록에 추가할 수 있습니다.

newgrp그룹 데이터베이스에서 그룹 멤버십이 부여되었기 때문에 허용됩니다. 이 경우 관리자 권한은 필요하지 않습니다.

또는 sg test-group -c 'some command'쉘이 아닌 다른 것을 실행하십시오. 이것의 효과는 원본 (e)gid를 복원하는 동안 보충 gid에만 sg test-group -c 'newgrp stephen'추가하는 것입니다 .test-group

또한 이 유틸리티를 사용하여 소유자, 그룹 및 권한을 지정하면서 파일 복사본을 만들 수도 있습니다 install.

sudo install -o stephen -g test-group -m a=r,ug+w example.txt /var/www/testdir/

을(를 ) 복사하려면 그룹 및 권한으로 example.txt소유하세요 .stephentest-grouprw-rw-r--

콘텐츠 외에 타임스탬프, 소유권, 권한을 복사하려면 cp -p.GNU cp도 가능한 cp -a한 많은 메타데이터(의 약어)를 복사 해야 합니다.--recursive --no-dereference --preserve=all

답변2

디렉터리에 대한 검색 권한이 필요합니다.

chmod 775 /var/www/testdir

디렉터리에 생성된 파일을 해당 디렉터리의 그룹이 소유하게 하려면 sgid도 필요합니다.

chmod 2775 /var/www/testdir

바라보다UNIX 권한 및 파일 유형 이해더 알아보기.

관련 정보