lstat
ファイルシステムを呼び出すDebian 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