나는 내가 소유한 디렉터리(예: /sync
)와 해당 디렉터리에 대한 전체 읽기 및 쓰기 액세스 권한을 갖고 싶은 프로세스를 실행하고 있습니다(제 경우 프로세스는 이전에 BitTorrent Sync로 알려졌던 Resilio Sync입니다). 이 디렉토리의 모든 파일은 개인 프로젝트 및 문서입니다. 그 중 99%는 제가 소유하고 있지만, 가끔 부득이한 이유로 일부 디렉토리와 파일이 루트로 생성되는 경우도 있습니다. 그러한 디렉토리와 파일을 변경, 이동 및/또는 삭제하는 프로세스를 어떻게 얻을 수 있습니까?
g+s
/sync
고정 비트(모든 파일이 그룹을 상속하도록 on으로 설정)와 사용자 정의 ACL 규칙(고정 비트를 새로 생성된 디렉터리에 자동으로 전파하려고 시도함)의 조합을 시도했지만이 답변 및 해당 의견, inotify 없이는 수행할 수 없습니다(단순화를 위해 inotify 사용을 피하고 싶습니다).
그런데 이 문제를 해결할 수 있는 다른 방법이 있는지 궁금합니다. 모든 파일 권한을 무시하고 특정 디렉터리와 그 안의 모든 항목에서 하나의 특정 프로세스에 더 많은 권한을 부여하는 것처럼요? 가능하다면, 제가 알고 있어야 할 안전상의 위험이 있습니까?
답변1
이 대상에는 끈끈한 비트가 필요하지 않다고 생각합니다. 프로세스가 사용자로 실행 중이고 resilio
사용자 계정이 이라고 가정합니다 olegs
. (프로세스를 실행하는 것은 귀하의 계정입니다. 시연을 위해 이것을 추가하고 있습니다.)
# Change all ownership to root:root
chown -R root:root /sync
# Make sure only root (and group members of root) can get a directory listing.
chmod 0750 /sync
# Now, let's augment standard permissions with ACLs.
# Set default masks for all new file system objects in /sync.
# (The root user already has permission.)
setfacl -d -m u:resilio:7 /sync
setfacl -d -m u:olegs:7 /sync
# Apply a mask to all existing files (and dirs) to give full control
# to the directory contents to olegs and resilio.
setfacl -m -R u:resilio:7 /sync
setfacl -m -R u:olegs:7 /sync
root
이제 이러한 사용자는 , olegs
및 디렉토리에 대한 모든 권한을 갖습니다 resilio
. 그렇지 않으면 다른 사용자가 디렉토리의 내용을 볼 수 없습니다 /sync
. 마스크가 7
(읽기/쓰기/실행)을 지정하더라도 디렉터리는 rwx가 되고 파일은 실제로는 6
(읽기/쓰기)가 됩니다.