이것은 제가 깨닫기 조금 어렵지만 다음과 같은 매우 이상한 행동에 직면했습니다.ACL 확장 파일 권한및 하드/심볼릭 링크. 질문을 짧고 간결하게 하려고 노력하겠습니다. 하지만 먼저 현재 상황에 대한 예를 보여 드리고 싶습니다. 무슨 일이 일어나고 있는지, 이름이 무엇인지 전혀 알 수 없기 때문입니다.
두 명의 사용자가 있는 시스템이 있다고 가정해 보겠습니다. 사용자를 호출 alice
하면 다음 권한을 bob
가진 폴더를 공유합니다 .stuff
bob@server:~$ getfacl /home/stuff getfacl:
Removing leading '/' from absolute path names
# file: home/stuff
# owner: alice
# group: bob
user::rwx
group::-wx
other::---
default:user::rwx
default:user:bob:rwx
default:group::-wx
default:mask::rwx
default:other::---
보시다시피, 폴더의 소유자는 alice
bob이 폴더에 콘텐츠를 작성하고 alice
(+x 플래그)에서 실행될 수 있도록 실행 가능하게 만들 수 있습니다. 그러나 ACL로 인해 파일이 bob 에 작성/복사될 때마다 stuff
파일에 대한 권한이 변경되어 이렇게 됩니다. 홈 디렉토리에 파일을 생성 bob
하고 이를 stuff
.
bob@server:~$ touch myfile
bob@server:~$ chmod 777 myfile
bob@server:~$ ls -la myfile
-rwxrwxrwx 1 bob bob 0 myfile
bob@server:~$ mv myfile /home/stuff/myfile
bob@server:~$ ls -la /home/stuff/myfile
-rwxrwx---+ 1 bob bob 0 /home/stuff/myfile
보시다시피 폴더에 있어도 액세스 myfile
할 수 없습니다. 파일이 속해 있기 때문에 위 명령에 따라 마지막 권한 인 "기타" 파일 권한을 사용하여 액세스해야 합니다 . 그럼에도 불구하고 그녀는 폴더의 소유자이기 때문에 해당 폴더를 삭제할 수 있습니다(비록 보호된다는 경고가 표시되지만).stuff
alice
bob:bob
alice
---
ls
alice
myfile
이제 재미가 있습니다. 이동/복사하지 않으면 myfile
어떻게 되는지 관찰 하고 이에 대한 하드 링크를 만듭니다.
bob@server:~$ ln myfile /home/stuff/myfile
bob@server:~$ ls -la /home/stuff/myfile
-rwxrwxrwx 2 bob bob 0 /home/stuff/myfile
당연히 alice
읽고 사용하는 것이 가능합니다. 실제로 내 시스템에서 테스트해 보면 그렇습니다. 그래도 심볼릭 링크가 전혀 작동하지 않는 것 같습니다.
bob@server:~$ ln -s myfile /home/stuff/myfile
bob@server:~$ ls -la /home/stuff/myfile
lrwxrwxrwx 1 bob bob 4 /home/stuff/myfile -> /home/bob/myfile
이번에는 링크에도 모든 권한이 설정되어 있지만 lrwxrwxrwx
(정확하게는 링크이기 때문에 누구나 따라갈 수 있어야 권한을 얻을 수 있음) alice
실행할 방법은 없고 삭제만 가능합니다.
내 질문:
- 애초에 하드 링크를 통해 ACS 권한을 "건너뛰기"할 수 있는 이유는 무엇입니까?
- 왜 동일한 트릭이 심볼릭 링크에 적용되지 않습니까?
- 이는 의도적인 것입니까, 아니면 보안 위반입니까?
답변1
alice
Alice 는 디렉터리에 대한 쓰기 권한을 갖고 있으므로 소유자 stuff/
가 아니더라도 파일의 내용을 수정할 수 있습니다.
Linux ACL을 사용하는 경우 아래 설명과 같이 파일이 생성될 때(또는 복사본이 대상에 새 파일을 생성하므로 복사할 때) 권한이 적용됩니다.man acl
. 파일 이동mv
예비 권한파일을 복사하지 않고 이동할 수 있는 경우. mv
ACL myfile
이 .
하드 링크를 만드는 것은 완전히 다릅니다. 하드 링크를 생성하면 다음을 가리키는 디렉터리 항목(대상 디렉터리에)이 생성됩니다.동일한 인덱스 노드원본 파일과 동일합니다. 즉, 동일한 파일이 여러 디렉터리에 존재합니다. 파일 권한(ACL 및 기존 UNIX 권한)은 inode에 저장됩니다. 및 둘 다 동일한 inode를 /home/stuff/myfile
가리키 므로 /home/bob/myfile
둘 중 하나에 대한 모든 변경 사항은 다른 항목에도 반영됩니다. 이것이 바로 alice
하드 링크에 액세스할 수 있는 이유입니다. (777)의 권한은 의 /home/bob/myfile
권한과 동일합니다 /home/stuff/myfile
.
대신 심볼릭 링크는 대상 경로를 가리킵니다. 심볼릭 링크가 가리키는 파일에 접근하려면 대상 파일에 접근할 때와 동일한 권한이 필요합니다. 홈 디렉터리에 대한 검색(실행 비트) 접근이 alice
불가능하여 접근이 실패할 수 있습니다.bob