setuidビットクラスの一部としてshスクリプトを実行しようとすると、「権限が拒否されました」

setuidビットクラスの一部としてshスクリプトを実行しようとすると、「権限が拒否されました」

setuidビットのプロセスを完了しようとしており、CentOS 7 VMで次のことを行いました(MacのTerminal.app経由)。

  1. program.shユーザーadamとそのホームフォルダにファイルを作成する
  2. program.sh以下を含む基本スクリプトです。

    echo "This is a test" >> /etc/stickytestfile.txt
    
  3. 設定chmod 777だけでなくchmod u+sprogram.sh/usr/bin/sh

しかし、まだ「権限が拒否されました」というメッセージが表示されます。どうすればいいですか?

-bash-4.2$ whoami
adam
-bash-4.2$ ls -al
total 32
drwsrwxrwx. 2 adam adam 4096 Oct  7 17:44 .
drwxr-xr-x. 6 root root   58 Oct  7 15:30 ..
-rw-------. 1 adam adam  853 Oct  7 19:26 .bash_history
-rw-r--r--. 1 adam adam   18 Nov 20  2015 .bash_logout
-rw-r--r--. 1 adam adam  193 Nov 20  2015 .bash_profile
-rw-r--r--. 1 adam adam  231 Nov 20  2015 .bashrc
-rw-rw-r--. 1 adam adam   29 Oct  7 16:07 adampersonalfile
-rw-rw-r--. 1 adam adam   27 Oct  7 16:07 adamsharedfile
-rwsrwxrwx. 1 root root   50 Oct  7 17:44 program.sh
-bash-4.2$ whereis sh
sh: /usr/bin/sh /usr/share/man/man1/sh.1.gz
-bash-4.2$ ls -al /usr/bin/sh
lrwxrwxrwx. 1 root root 4 Oct  2 16:05 /usr/bin/sh -> bash
-bash-4.2$ su
Password:
bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
[root@localhost adam]# chmod u+s /usr/bin/sh
[root@localhost adam]# ls -al /usr/bin/sh
lrwxrwxrwx. 1 root root 4 Oct  2 16:05 /usr/bin/sh -> bash
[root@localhost adam]# exit
exit
-bash-4.2$ sh program.sh
program.sh: line 1: /etc/stickytest.txt: Permission denied

ベストアンサー1

呼び出し部分を見てください。bash のマニュアルページ、bash(1):

    シェルの起動時に有効ユーザー(グループ)IDが実際のユーザー(グループ)IDと同じでない場合-血提供されたオプションはありません。 ...と有効ユーザーIDは実際のユーザーIDに設定されます。。もし-血コール時にオプションが提供され、起動動作は同じですが、有効なユーザーIDはリセットされません。
(ハイライトが追加されました.)

なしでbashを実行する場合-pオプションを使用すると、setuid(有効なユーザーIDが実際のユーザーIDと同じではありません)を実行するとすぐに「権限を放棄」します。つまり、実際のIDに戻ります。

ところで、間違った用語を使用しています。あなたが言うビットは固定ビットではなくsetuidビットです。

PS:あなたに従うことを望む指示はbashの初期モード(特権ビット)を設定し、作業が終わったら復元するように指示します。

おすすめ記事