lstat
파일 시스템을 호출하는 데비안 10에서 이상한 권한 문제가 발생했습니다 XFS
. 계속 언급하고 있어요이 링크확장 ACL 작동 방식 이해
이것남성페이지에는 execute(x)
이 경로 이전의 모든 디렉터리에 권한이 필요하다는 내용이 표시됩니다.
다음과 같은 디렉터리 계층 구조가 있습니다.
$ getfacl /dir1
# owner: root
# group: testgroup
user::rwx
group::r-x
mask::rwx
other::---
$ getfacl /dir1/dir2
# owner: root
# group: root
user::rwx
group::---
mask::rwx
other::---
$ getfacl /dir1/dir2/dir3
# owner: root
# group: root
user::rwx
group::---
mask::rwx
other::--x
와testgroup
사용자 가 있습니다.GID: 1005
testuser
UID: 1005, GID: 100
그래서 기본적으로testuser
아니요testgroup
작동하는 것은 내 프로그램이 실행될 때 UID,GID
입니다 1005,0
. 나는 lstat
그 행동을 이해하려고 노력하고 있습니다.
매뉴얼 페이지에 따르면 에 대한 실행 권한이 있기 때문에 에서 실행할 testuser
수 있어야 하지만 에서는 실행할 수 없어야 합니다 .lstat
/dir1
/
lstat
/dir1/dir2
옳은?
setuid(1005)
먼저 실행 한 다음 lstat
경로에서 실행하여 더 큰 프로그램의 기능을 모방하는 작은 C 코드가 있습니다 . root
사용자 열기 /dir1
로 이 코드를 실행합니다 ./dir1/dir2
$ ./lstat_setuid /dir1/
Real UID: 1005, Effective UID: 1005
Real GID: 0, Effective GID: 0
So the input File type is => Directory
No. of link list:12
Ownership: UID=0 GID=1005
inode no 128
...
$ ./lstat_setuid /dir1/dir2
Real UID: 1005, Effective UID: 1005
Real GID: 0, Effective GID: 0
So the input File type is => Directory
No. of link list:6
Ownership: UID=0 GID=0
inode no 153
...
이건 실패할 거에요, 그렇죠?
더 자세히 드릴다운하면 /dir1/dir2/dir3
예상대로 실패합니다.
# ./lstat_setuid /dir1/dir2/dir3
Real UID: 1005, Effective UID: 1005
Real GID: 0, Effective GID: 0
some error for lstat: Permission denied
답변1
그것을 발견:)
setgroups
전화번호를 잊어버린 것 같아요
내가 실행 중인 사용자가 lstat
일부이므로 testgroup
호출 후에도 추가 그룹 목록에 여전히 권한이 있는 그룹이 포함되어 있습니다.execute(x)
/dir
setegid()
을 호출하면 setgroups
동일한 순서에 setegid
따라 예상대로 실패합니다 .seteuid
lstat
/dir1/dir2
./lstat_setuid /dir1/dir2/
Real UID: 1005, Effective UID: 1005
Real GID: 100, Effective GID: 100
some error for lstat: Permission denied