Linux에서 디렉터리(공유)를 만들고 모든 사용자가 해당 공유 디렉터리에 파일을 만들 수 있도록 허용하고 싶습니다. 또한 파일을 생성한 사용자만 자신의 파일을 삭제/수정할 수 있어야 하며, 다른 모든 사용자는 /Shared 디렉터리에서 제한된 읽기 실행 권한(705 또는 755)을 가져야 합니다.
예를 들어, 사용자 TOM이 공유 디렉터리에 "sample"이라는 파일을 생성하는 경우 사용자 TOM은 /shared에 있는 "sample" 파일의 소유자여야 합니다. 사용자 Jack과 사용자 Matt는 "sample" 파일에 대한 읽기 및 실행 권한으로 제한되어야 합니다. 이는 /Shared 디렉터리의 "sample" 파일에 대해 755 권한이 설정되어야 함을 의미합니다. 공유 디렉터리에 사용자 TOM이 생성한 파일을 다른 사용자가 편집하거나 삭제하는 것을 방지하고 싶습니다. 어떻게 이를 달성할 수 있나요?
고마워요, CG
답변1
일반 파일을 자동으로 가져오라고 요청하신 댓글에서구현하다권한, 그게 어려운 부분이에요.
open(2)
/시리즈의 시스템 호출을 사용하여 쓰기 위해 파일을 열면 creat(2)
프로그램은~ 해야 하다mode
파일 권한 설정을 위한 기본 값으로 사용되는 매개변수를 제공합니다 . 일반 파일을 생성하는 대부분의 프로그램에서 이 매개변수는 일반적으로 모드 0666으로 지정됩니다. 의도적으로 실행 파일을 생성하는 프로그램만 모드 0777을 기본 값으로 사용합니다.
운영 체제는 이 기본 모드 값과 사용자의 넷마스크 설정을 가져와 이진 AND 연산을 수행합니다. 모드 비트는 다음에만 존재합니다.둘 다기본 모드 값그리고넷마스크 값이 적용됩니다. 결과는 chmod
결과 파일의 값으로 직접 사용됩니다. 하는 메커니즘이 없습니다.다음에 추가생성될 파일을 호출하는 프로그램에서 요청하지 않은 권한은 umask
권한을 추가로 제한할 수 있습니다.
디렉토리를 생성하기 위해 mkdir(2)
완전히 동일한 권한 메커니즘으로 다른 시스템 호출이 사용됩니다. 그러나 기본적으로 모든 사람은 새 디렉토리를 생성하기 위해 호출할 때 기본 모드 값 0777을 사용합니다.
POSIX ACL은 유사한 메커니즘을 사용하여 실행 권한을 할당할지 여부를 결정하므로 기본적으로 모든 파일에 실행 권한을 부여하는 데 도움이 되지 않습니다.
내가 아는 한, Unix 스타일 파일 시스템에서 원하는 것을 달성하는 유일한 방법은 다음과 같습니다.사용자가 사용하는 모든 프로그램을 다시 빌드하십시오.파일을 생성할 때 기본 모드 0777을 사용하십시오. 그러나 이러한 프로그램은 실행 권한이 있는 파일을 생성합니다.어디에나, 특정 디렉토리에만 있는 것이 아닙니다.
하지만 제가 "유닉스 스타일 파일 시스템"이라고 말한 것을 기억하세요. UNIX가 아닌 파일 시스템은 파일 권한을 완전히 다르게 처리합니다. 특수 디렉터리에 NTFS 파일 시스템을 사용할 수 있다면 기본 ACL이 파일에 기본적으로 실행 권한을 할당하도록 할 수 있을까요?
답변2
이는 폴더에 대한 기본 권한입니다 /tmp
. 따라서 디렉토리를 생성하고 권한 1777을 할당할 수 있습니다.
mkdir /path/to/Shared
chmod 1777 /path/to/Shared
그런 다음 새 파일에 대한 권한을 세부적으로 조정하려면 사용자 권한 마스크를 설정하세요 umask
. 예를 들어, 내부/tmp
rm /tmp/test
umask 011
touch /tmp/test
ls -l /tmp/test
-rw-rw-rw- 1 user user 0 nov 21 17:14 /tmp/test
다른 마스크로:
rm /tmp/test
umask 022
touch /tmp/test
ls -l /tmp/test
-rw-r--r-- 1 user user 0 nov 21 17:15 /tmp/test
umask는 사용자에게 전역적입니다. 이것이 도움이 되는지 모르겠습니다.
답변3
대부분의 POSIX 사용자는 기본 권한을 이해하지 못합니다. 각각 "rwx" 권한을 가진 소유자/그룹/기타 역할이 있지만 세 개의 rwx 세트 중 하나만 한 사용자 또는 프로세스에 적용됩니다. 오너라면 그룹이든 뭐든 될 수 없어요! 파일 권한이 007이면 소유자나 파일 그룹의 누구도 파일에 액세스할 수 없음을 의미합니다. non-owner_non-group-member=other만 액세스할 수 있습니다!
디렉터리에서 파일을 생성하고 삭제하는 것은 해당 디렉터리의 권한을 의미하며 파일의 권한과는 아무런 관련이 없습니다. 디렉터리에 대한 쓰기 권한(소유자/그룹/기타 중 하나를 기반으로 함)이 있으면 해당 디렉터리에서 모든 파일을 생성하고 삭제할 수 있습니다. [루트에는 CAP_DAC_OVERRIDE 기능이 있으므로 이러한 DAC 권한 제한을 무시할 수 있습니다].
다행히도 디렉터리에는 파일 소유자만 파일을 삭제(링크 해제)할 수 있는 고정 비트 권한도 있습니다.
다음과 같이 디렉토리를 생성해야 합니다.
sudo mkdir somedir
sudo chmod 1707 somedir # set sticky bit
사용자가 somedir 아래에 생성할 수 있는 하위 디렉터리에는 일반적으로(umask 참조) 755개의 권한이 있으며(다른 사용자는 읽고 검색할 수 있지만 디렉터리에 쓸 수는 없음) 이러한 하위 디렉터리에 생성된 파일에는 544개의 권한이 있습니다. 실행 권한.