폴더 소유자가 다른 사용자가 만든 폴더에 쓸 수 없는 이유는 무엇입니까?

폴더 소유자가 다른 사용자가 만든 폴더에 쓸 수 없는 이유는 무엇입니까?

sync방금 해당 위치에 라는 새 디렉터리를 만들었습니다 /home/sync. 나는 사용자로 디렉토리를 생성 한 liam다음 chown -R rslsync:rslsync /home/sync. rslsync나는 그룹 liam에 나를 추가했다.rslsync

test그런 다음 now 라는 디렉토리에 또 다른 폴더를 만들었습니다 /home/sync/test. rslsync폴더 위치를 지정 하려고 하면 해당 폴더에 대한 쓰기 권한이 없다는 /home/sync/test메시지가 나타납니다 . rslsync나는 그것을 실행 ls -l하고 그것은 보여줍니다 root root.

최상위 디렉터리 폴더의 소유자가 rslsync자신과 같은 그룹에 있는 다른 사용자가 만든 하위 폴더 중 하나에 액세스할 수 없는 이유는 무엇입니까? 여기서 뭔가 빠졌나요?

편집하다

drwxr-xr-x. 3 rslsync rslsync 18 Aug 26 17:09 /home/sync

drwxr-xr-x. 2 root    root     6 Aug 26 17:09 /home/sync/test

test내가 사용하는 폴더를 만들 때 sudo그렇지 않으면 폴더를 만들 수 없습니다.

그룹 리암은 이런 느낌이에요

liam : liam wheel rslsync

답변1

기본적으로 생성된 새 디렉터리와 파일은 생성 프로세스의 사용자와 그룹을 상속합니다. 프로세스는 명시적으로 이를 다른 그룹(프로세스가 구성원임)으로 설정할 수 있습니다. 그렇지 않으면 디렉토리에 다음이 있어야 합니다.setuid/setgid비트가 설정되면 소유자/그룹이 디렉터리와 일치하도록 설정됩니다.

기본 파일 권한은 프로세스에 의해 결정됩니다.마스크. 일반적인 umask 값( 022027)은 파일과 디렉터리를 누구나 쓸 수 있도록 만들지 않습니다.

디렉토리의 소유자 및 그룹은 root:root귀하가 디렉토리에 쓸 수 없기 때문입니다. 또한 설명에 따르면 파일을 만든 것 같습니다.뿌리(sudo 사용?) 사용자 대신리암.

또한 Linux의 파일 권한 검사는 현재 디렉터리에서 시작하는 전체 경로에 대해 수행됩니다. 경로의 디렉터리에 프로세스 사용자/그룹에 대한 실행(+x) 권한이 없으면 액세스가 거부됩니다.

파일 권한을 설정하는 또 다른 방법은 POSIX 액세스 제어 목록을 사용하는 것입니다.man 5 acl. ACL 지원은 사용 중인 파일 시스템에 따라 다르며 이를 활성화하려면 플래그를 설치해야 할 수도 있습니다.

답변2

  1. Linux에서 각 파일이나 폴더의 소유권과 권한은 상위 디렉터리 상태와 관계없이 다른 모든 폴더 및 파일과 별도로 처리됩니다. 어떤 위치에서든 새 폴더를 생성하면 해당 폴더를 생성한 사용자의 소유권을 갖게 됩니다. 이는 Linux 보안 모델에 있어 좋은 일이자 결정적인 사항입니다.

  2. ls명령이 "root:root"를 제공 하면 루트는 파일/폴더를 생성했습니다(또는 누군가가 생성했습니다 chown root:root. 그러나 분명히 사용자 rslsync(또는 liam)는 "root" 그룹에 속하지 않습니다(그리고 속해서는 안 됩니다). 이것이 바로 그 이유입니다. 그룹 "루트")는 권한 플래그의 "그룹" 필드에 있는 권한을 얻지 못하지만 "기타" 필드에 명시된 권한을 얻습니다. 이러한 필드에 대한 표준 권한은 권한이 없습니다. 모두...

답변3

귀하의 질문에 답변하셨습니다.

ls -l 쇼루트: 루트당신이 쓴chown -R rslsync:rslsync.

이는 적어도 rslsync 사용자가 다음에 속하지 않는 경우를 의미합니다.뿌리 이 디렉터리에는 그룹을 쓸 수 없습니다.

여기서 초점을 맞추지 않는 것은 사용자가 liam폴더를 로 만든 이유 root:root이지만 이는 다른 질문입니다.

groups사용자에게 출력을 보여줄 수 있나요?

답변4

해결책을 찾았습니다.

.service 파일로 이동
sudo vi /usr/lib/systemd/system/resilio-sync.service

이 줄을 현재 사용자 이름으로 변경하세요.

사용자=aurelien.izoulet
그룹=aurelien.izoulet
환경=”SYNC_USER=aurelien.izoulet”
환경=”SYNC_GROUP=aurelien.izoulet”

systemctl을 다시 시작하십시오.
sudo systemctl daemon-reload

그런 다음 rslsync 서비스를 다시 시작하면 작동합니다!

관련 정보