setgid 디렉토리의 목적은 무엇입니까?


12

setgid가 어떻게 작동하는지 알고 있지만 왜 설계되었는지 모르겠습니다. 어떤 문제가 해결되는지 보여줄 수있는 예가 있습니까?

답변:


19

setgid 파일 / 이진은 분명히 유용하지는 않지만 디렉토리에 setgid 비트가 매우 유용하게 적용됩니다. 귀하가 서로 다른 작업 그룹의 일부라고 가정하고 각 작업 그룹에는 고유 한 유닉스 (권한) 그룹이 있습니다. 그런 다음 setgid 비트를 프로젝트 폴더에 놓고 새 파일을 만들 때 올바른 그룹 소유권이 적용되어 해당 프로젝트 그룹의 동료가 해당 파일에 액세스 할 수있게 하시겠습니까?


2
CVS를 사용하는 경우 아마도 이런 이유로 매우 익숙 할 것입니다 (저장소의 디렉토리가 설정되지 않은 경우 다른 사용자가 파일을 체크 아웃하고 커밋하려고 할 때 많은 권한 오류가 발생합니다)
Suppressingfire

예, 맞습니다. 다른 사용자가 setgid 디렉토리에서 생성 한 파일을 공유 (읽기) 할 수 있지만 그룹 쓰기 가능 (g + w) 권한은 setgid 디렉토리에 상속되지 않으므로 다른 사용자가 하위 디렉토리에 추가 할 수 없습니다. setgid 디렉토리에서 사용자에 의해 작성된 디렉토리는 사용이 제한됩니다. 그래서이 질문이 있습니다 .CVS 공유 읽기 문제는 해결하지만 새로 작성된 디렉토리에 대한 공유 쓰기는 수행하지 않습니다. ??
Xiè Jìléi 2009

1
따라서 적절한 umask 설정을 사용하려고합니다. 예를 들어, umask 007은 사용자 및 그룹에 대한 전체 권한을 남기지 만 다른 사용자에게는 없습니다.
andol

13

주요 용도는 파일 트리의 그룹 소유자를 유지하는 것입니다.

[lockie@bubbles tmp]$ mkdir dir1 && touch dir1/file && mkdir dir1/dir
[lockie@bubbles tmp]$ mkdir dir2 && chgrp staff dir2 && chmod 2755 dir2 && touch dir2/file && mkdir dir2/dir
[lockie@bubbles tmp]$ ls -al dir1
total 32
drwxrwxr-x   3 lockie  lockie   4096 Dec 13 19:32 .
drwxrwxrwt 125 root root 20480 Dec 13 19:32 ..
drwxrwxr-x   2 lockie  lockie   4096 Dec 13 19:32 dir
-rw-rw-r--   1 lockie  lockie      0 Dec 13 19:32 file
[lockie@bubbles tmp]$ ls -al dir2
total 32
drwxr-sr-x   3 lockie  staff  4096 Dec 13 19:32 .
drwxrwxrwt 125 root root  20480 Dec 13 19:32 ..
drwxrwsr-x   2 lockie  staff  4096 Dec 13 19:32 dir  < note new dir is g+s, owned by "staff" group, so the setgid behaviour acts recursively
-rw-rw-r--   1 lockie  staff     0 Dec 13 19:32 file < note new file is owned by "staff" group
[lockie@bubbles tmp]$

이는 다른 사용자가 디렉토리 아래에서 파일 / 디렉토리를 작성 / 편집하는 환경에서 유용합니다. 모든 파일 / 디렉토리가 동일한 그룹을 공유하면 모든 사용자가 파일 / 디렉토리를 편집 / 변경할 수 있습니다 (허가가 허용됨) : 이는 상황을 피합니다. "xyz는 파일 abc를 소유하고 있으므로 편집 할 수 없습니다"와 같은

이런 방식으로 setgid를 사용하는 대신 grpid 파일 시스템 마운트 옵션이 있습니다.

맨 마운트에서 :

grpid 또는 bsdgroups / nogrpid 또는 sysvgroups

이 옵션은 새로 만든 파일이 어떤 그룹 ID를 가져 오는지를 정의합니다. grpid가 설정되면 그것이 생성 된 디렉토리의 그룹 ID를 취합니다. 그렇지 않으면 (디폴트 값) 디렉토리에 setgid 비트 세트가없는 경우 현재 프로세스의 fsgid를 가져옵니다.이 경우 상위 디렉토리에서 gid를 가져오고 디렉토리 자체 인 경우 setgid 비트 세트를 가져옵니다.

활성화되면, grpid 마운트 파일 시스템에서 작성된 파일 / 디렉토리도 상위 디렉토리 그룹을 상속합니다.

[lockie@bubbles ~]$ mount | grep /home
/dev/mapper/VolGroup00-home on /home type ext3 (rw,grpid)
[lockie@bubbles ~]$ mkdir dir3 && touch dir3/file && mkdir dir3/dir
[lockie@bubbles ~]$ ls -al dir3
total 12
drwxrwxr-x  3 lockie users 4096 Dec 13 19:37 .
drwxrwxr-x 12 lockie users 4096 Dec 13 19:37 ..
drwxrwxr-x  2 lockie users 4096 Dec 13 19:37 dir < inherited "users" group from parent dir
-rw-rw-r--  1 lockie users    0 Dec 13 19:37 file  < inherited "users" group from parent dir
[lockie@bubbles ~]$

grpid 옵션을 사용 하면 파일 시스템이 dir 권한에 관계없이 작동하기 때문에 인적 오류 가능성을 적절하게 줄입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.