あなたがユーザーだと仮定してx
実行したid
場合
uid=1001(x) gid=1001(x) groups=1001(x)
y
他のユーザーがいます
uid=1002(y) gid=1002(y) groups=1002(y)
次に、次のようにユーザーのホームディレクトリにroot
ファイルを作成します。readme
x
# cd /home/x
# touch readme
# echo "hello" > readme
# chown root:y readme
# chmod 640 readme
コピーしてみましょうless
# cd /home/x
# cp /usr/bin/less .
# chown y:x less
# chmod 6110 less
ユーザーが以下を実行して読み取ることx
ができるようにしたい。readme
./less readme
ただし、setuidとsetgidが原因で「許可拒否」エラーが発生します。なぜ?
これは私の論理ですが、何か問題があるかもしれません。
chmod 6110
与えられたただ所有者(y
)とグループメンバー()x
の実行権限。ユーザーはx
グループに属しているためx
実行できますless
。その後、 setuid は有効な UID を に等しくしy
、 setgid は再び有効な GID を所有者グループと同じにしますy
。そしてreadme
グループなので、y
読み取りless
権限が必要です。
答え1
エラーはここにあります。
setgidは再び有効なGIDを所有者グループと同じにします
y
。
x
setgid ビットは、有効な gid をここ ( chmod y:x less
) のバイナリ所有者グループの gid にします。
less
最後に、y
sに対応する有効なuidとx
sに対応する有効なgidを使用して実行します。readme
に属しているため読めませんroot:y
。