(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
を追加しました house
へ xyz
のみになるようにグループ化する ルートは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として実行できます。