我在 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
有.testgroup
GID: 1005
和一个testuser
用户UID: 1005, GID: 100
所以,基本上testuser
不是当testgroup
我的程序运行时,有效的UID,GID
是1005,0
。我试图理解lstat
行为
根据手册页,testuser
应该能够执行lstat
on/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)
/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