无法确定 lstat 所需的权限

无法确定 lstat 所需的权限

我在 Debian 10 上遇到了这个奇怪的权限问题,调用lstat文件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

有.testgroupGID: 1005和一个testuser用户UID: 1005, GID: 100

所以,基本上testuser 不是testgroup我的程序运行时,有效的UID,GID1005,0。我试图理解lstat行为

根据手册页,testuser应该能够执行lstaton/dir1因为它具有执行权限 on/但它不应该能够执行lstat /dir1/dir2正确的 ?

我有一个小的 C 代码,用来模仿更大的程序的功能,先执行setuid(1005)然后lstat在路径上执行。我在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()

一旦我打电话setgroupssetegid按照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

相关内容