chmod를 호출하고 SGID 비트를 보존하려면 어떻게 해야 합니까?

chmod를 호출하고 SGID 비트를 보존하려면 어떻게 해야 합니까?

다음과 같은 디렉토리 구조가 있습니다.

+ public/
|-+ pics/
| |-- a
| `-- b
`-+ thumbs/
  |-- a
  `-- b

gallery:http나는 트리의 모든 파일이 스키마 세트에 의해 소유되기를 원합니다 ug=rwX,o=.

스크립트는 그 안에 디렉토리를 생성 pics하고 thumbsuser 로 실행됩니다 gallery. public, 및 pics에 SUID/SGID 비트가 설정되어 있습니다 thumbs.

이제 문제는 a디렉토리가 소유자와 함께 생성되지만 그룹의 권한 gallery:http없이 생성된다는 것입니다. x에 전화하면 chmodSGID 비트가 지워집니다. (이상한 동작이지만 http사용자가 파일의 소유자가 아니기 때문에 이런 일이 발생합니다.)

chown루트가 아닌 사용자로 호출하여 모드를 먼저 설정한 다음 소유자를 설정할 수 없습니다 .

유일한 해결책은 로 설정 umask하고 ug=rwx,o=모든 디렉토리를 생성한 다음 일반 파일이 생성되기 전에 변경하거나 umask일반 파일을 생성한 다음 모드를 로 변경하는 것 같습니다 ug=rw,o=.

내가 볼 수 없는 더 좋고 덜 추악한 솔루션이 있습니까?

답변1

스크립트를 변경할 수 있으면 호출 mkdirmkdir --mode=770.

스크립트를 변경할 수 없는 경우 ACL이 도움이 될 수 있습니다.

setfacl -m d:u::rwx,d:g::rwx,o::- pics thumbs

umask파일에 실행 권한을 설정하지 마십시오. 어떤 권한도 설정하지 않습니다. 파일이 생성될 때 권한이 설정되지 않도록 할 뿐입니다.

답변2

여러 가지 옵션이 있습니다:

  • chmod g+x a
  • 마스크 변경
  • 액세스 제어 목록을 사용하십시오.

예, 다른 비트를 지우지 않고도 비트를 설정할 수 있습니다. 첫 번째 옵션을 참조하세요. 하지만 더욱 자동화하려면 다음 중 하나를 수행하세요.

  • umask를 rwxr-x---로 설정하고 각 사용자에게 개인 기본 그룹을 제공합니다(기본 그룹은 해당 사용자에게만 속함).
  • 액세스 제어 목록 사용: 이 목록을 사용하면 여러 그룹 및 사용자에 대한 권한을 설정할 수 있을 뿐만 아니라 디렉터리에 대한 기본값도 설정할 수 있습니다(sgid와 비슷하지만 그룹뿐만 아니라 모드도 설정 가능). setfacl, getfacl을 참조하세요. 당신은 또한 볼 수 있습니다Gnu/linux에서 파일 권한 등을 설정하는 다른 방법은 무엇입니까?

관련 정보