11

次の内容の小さなシェル スクリプトを作成しました。

cat /usr/bin/checksuid.sh

!/bin/bash
echo "Hello" > /etc/myfile.cnf

ls -l /usr/bin/checksuid.sh
-rwsr-xr-x 1 root root 56 Sep  9 12:56 /usr/bin/checksuid.sh

また、ルート アカウントでファイル/etc/myfile.cnfを作成し、以下のように権限を設定しました。

-rw-r--r-- 1 root root 6 Sep  9 12:26 /etc/myfile.cnf

root 以外のアカウントから実行する/usr/bin/checksuid.shと、次のエラーが発生します。

/usr/bin/checksuid.sh: line 3: /etc/myfile.cnf: Permission denied

SUIDが機能しない理由を教えてくれる人がいますか?

4

2 に答える 2

22

シェル スクリプトを SUID にすることはできません。http://www.faqs.org/faqs/unix-faq/faq/part4/section-7.htmlを参照

于 2013-09-09T13:10:37.757 に答える
16

http://www.tuxation.com/setuid-on-shell-scripts.htmlから:

「実際には、多くの *nix 実装で setuid ビットが無効になっているのは、それが引き起こす大規模なセキュリティ ホールのためです」

別のアプローチ - この例の c プログラムのように、setuid を使用できる何かでスクリプトをラップします。単純にスクリプトを呼び出す場合と、このようなラッパーを使用する場合 (たとえば、終了コードを無視する) には明らかに違いがありますが、とにかくこれでアイデアが得られるはずです。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
   setuid( 0 );
   system( "/path/to/script.sh" );

   return 0;
}
于 2014-07-23T19:46:47.673 に答える