GNU/Linux >> Linux の 問題 >  >> Linux

Linux –Setuidが機能しないのはなぜですか??

この質問にはすでに回答があります :シェルスクリプトでsetuidを許可する

(10件の回答)
6年前に閉鎖されました。

プログラムをユーザーxyzだけが実行できるようにしたい ルート権限を使用します。これを行うには、setuidビットを次のように設定します:

chmod u+s program1.sh
ls -l program1.sh
rwsr-x--- 1 root house 1299 May 15 23:54 program1.sh

また、ユーザーxyzを追加しました housexyzのみになるようにグループ化する ルートはprogram1.shを実行できます。

program1.shには

があります
id -u

有効なIDを表示できるようにします。

program1.shを実行しています ルートとして、rootが表示されます 。ただし、xyzで実行する アカウント、 xyzが表示されます 。ルート権限で実行されなかったようです。ここで何が悪いのかわかりません。

承認された回答:

setuidビットを持つシェルスクリプト(たとえば、rwsr-xr-xのperms)を実行する場合、スクリプトは、スクリプトを所有するユーザーとしてではなく、スクリプトを実行するユーザーとして実行されます。これは、どのユーザーが実行するかに関係なく、バイナリを所有するユーザーとして実行されるバイナリ(/ usr / bin / passwdなど)のsetuidの処理方法とは逆です。

このページを確認してください:https://access.redhat.com/site/solutions/124693

これは、オペレーティングシステムによって実行されるセキュリティ対策です。スクリプトはsudoで使用する必要があります 代わりに。

スクリプトでsetuidを本当に使用する必要がある場合は、作業を行うバイナリを作成できます。新しいファイル「program.c」を作成し、次のコードをコピーします。

   #include <stdio.h>
   #include <stdlib.h>
   #include <sys/types.h>
   #include <unistd.h>
     
   int main()
   {
     setuid(0);
     system("./program.sh"); #This line is dangerous: It allows an attacker to execute arbitrary code on your machine (even by accident).
     return 0;
   }

次のコマンドを使用してコードをコンパイルして実行します。

$ gcc program.c -o program
$ sudo chown root.root program
$ sudo chmod 4755 program
$ ./program

このように動作します。 setuidはコンパイルされたファイルに対して機能し、このファイルは他のファイルをrootとして実行できます。


Linux
  1. Linux –なぜSuだけでなくSuを使用するのですか?

  2. Linux Setuidが機能しませんか?

  3. Linux –ロケールEs_mxは機能するがEsは機能しないのはなぜですか?

  1. Linux – Linux上のRsyncがすべてのタイムスタンプ(作成時間)を保持しないのはなぜですか?

  2. find -exec mv {} ./target/ + が機能しないのはなぜですか?

  3. Tomcat がポート 8080 で動作するのに 80 で動作しないのはなぜですか?

  1. Chrome デベロッパー ツールで JavaScript を編集できないのはなぜですか?

  2. ブータブル USB の作成に 'dd' が機能しないのはなぜですか?

  3. Linux ブリッジが機能しない理由