lstat에 필요한 권한을 확인할 수 없습니다.

lstat에 필요한 권한을 확인할 수 없습니다.

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: 1005testuserUID: 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)/dirsetegid()

을 호출하면 setgroups동일한 순서에 setegid따라 예상대로 실패합니다 .seteuidlstat/dir1/dir2

./lstat_setuid /dir1/dir2/
Real UID: 1005, Effective UID: 1005
Real GID: 100, Effective GID: 100
some error for lstat: Permission denied

관련 정보