chmod 6110を使用して `less`を実行すると、「権限の拒否」が表示されるのはなぜですか?

chmod 6110を使用して `less`を実行すると、「権限の拒否」が表示されるのはなぜですか?

あなたがユーザーだと仮定してx実行したid場合

uid=1001(x) gid=1001(x) groups=1001(x)

y他のユーザーがいます

uid=1002(y) gid=1002(y) groups=1002(y)

次に、次のようにユーザーのホームディレクトリにrootファイルを作成します。readmex

# 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

xsetgid ビットは、有効な gid をここ ( chmod y:x less) のバイナリ所有者グループの gid にします。

less最後に、ysに対応する有効なuidとxsに対応する有効なgidを使用して実行します。readmeに属しているため読めませんroot:y

関連情報