(10 jawaban)
Tutup 6 tahun yang lalu.
Saya ingin memastikan bahwa program saya hanya dapat dijalankan oleh pengguna xyz
menggunakan hak akses root. Untuk melakukan ini, saya mengatur bit setuid dengan:
chmod u+s program1.sh
ls -l program1.sh
rwsr-x--- 1 root house 1299 May 15 23:54 program1.sh
Juga, saya menambahkan pengguna xyz
ke house
grup sehingga hanya xyz
dan root dapat menjalankan program1.sh.
Di program1.sh ada
id -u
sehingga dapat menunjukkan kepada saya ID yang efektif.
Menjalankan program1.sh
sebagai root, ini menunjukkan root
. Tetapi berjalan dengan xyz
akun, itu menunjukkan xyz
. Tampaknya itu tidak berjalan dengan hak akses root. Saya tidak tahu apa yang salah di sini.
Jawaban yang Diterima:
Saat menjalankan skrip shell yang memiliki bit setuid (mis., Perms rwsr-xr-x), skrip dijalankan sebagai pengguna yang menjalankannya, bukan sebagai pengguna yang memilikinya. Ini bertentangan dengan cara setuid ditangani untuk binari (mis., /usr/bin/passwd), yang dijalankan sebagai pengguna yang memilikinya, terlepas dari pengguna mana yang menjalankannya.
Periksa halaman ini:https://access.redhat.com/site/solutions/124693
Ini adalah ukuran keamanan yang diambil oleh sistem operasi. Anda harus menggunakan skrip Anda dengan sudo sebagai gantinya.
Jika Anda benar-benar perlu menggunakan setuid o skrip Anda, Anda dapat membuat biner yang akan melakukan pekerjaan itu. Buat file baru “program.c” dan salin kode berikut:
#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;
}
Kompilasi dan jalankan kode menggunakan perintah berikut:
$ gcc program.c -o program
$ sudo chown root.root program
$ sudo chmod 4755 program
$ ./program
Cara ini akan berhasil. Setuid berfungsi untuk file yang dikompilasi, dan file ini dapat mengeksekusi file lain sebagai root.