Di distribusi Linux manakah Anda? Atau Unix, bahkan?
slhck
@slhck Linux, Ubuntu 12
HappyDeveloper
3
setuidtidak akan berfungsi pada skrip - dinonaktifkan karena alasan keamanan di sebagian besar * distribusi nix hari ini. Anda dapat mengaturnya, tetapi itu akan diabaikan. Mungkin Anda dapat menjelaskan lebih lanjut tentang masalah Anda yang sebenarnya sehingga kami dapat membantu Anda menyelesaikan ini? Naskah apa itu? Mengapa Anda perlu dijalankan sebagai root? Apakah menggunakan sudoalternatif?
slhck
Sudahkah Anda mencoba sudo -s?
Nam Phung
Jawaban:
29
Berhati-hatilah: skrip yang dikombinasikan dengan setuid berbahaya!
Jika Anda masih ingin menjalankan skrip Anda dengan setuidset, maka Anda dapat menulis program C pendek sebagai pembungkus dan mengatur setuidbit pada biner yang dikompilasi.
Contoh bungkus:
int main(void) {
setuid(0);
clearenv();
system("/absolute/path/to/your/script.sh");
}
Solusi lain menggunakan sudo(disebutkan di sini ):
Sebagai root, cegah akses tulis (dan mungkin lainnya) ke skrip Anda:
Bahaya spesifiknya tidak terlalu jelas, tetapi mereka berputar di sekitar lingkungan. Tidak seperti kebanyakan program, perilaku shell script dapat diubah secara signifikan oleh puluhan variabel lingkungan, cukup sehingga tanpa perlindungan yang luas, skrip seperti itu dapat dengan mudah diperdaya untuk mengeksekusi kode arbitrer.
Stephanie
1
Anda harus menambahkan panggilan ke clearenv () sebelum panggilan sistem di bungkus itu, benar-benar meniup lingkungan sehingga tidak ada pengaturan jahat di sekitar untuk memanipulasi skrip. kernel.org/doc/man-pages/online/pages/man3/clearenv.3.html
Stephanie
@Stephanie saya pasti melakukan kesalahan, karena semua ini terlihat terlalu gila untuk tugas bersama. Inilah yang saya coba lakukan: serverfault.com/questions/401405/...
HappyDeveloper
@ HappyDeveloper Tidak terlalu gila untuk skrip setuid, karena skrip setuid yang tidak aman adalah jalur untuk me-root siapa pun yang mengelola untuk menjalankannya.
Stephanie
4
sudodapat digunakan untuk memberi semua pengguna akses ke program (atau skrip) tertentu. Dalam hal itu, ia bertindak sebagai pembungkus setuid yang mewah. Sepertinya itu biasanya akan menjadi pilihan yang lebih baik daripada menulis setuid wrapper Anda sendiri.
jjlin
4
Cara termudah dan teraman adalah dengan menggunakan bit SETUID dalam izin file. dengan begitu izin perintah akan dinaikkan ke mengajukan izin pemilik.
untuk mencegah skrip dari edisi, jangan setel bit bits untuk semua orang.
Saya tidak tahu apakah ini berguna tetapi, untuk membuat skrip hanya berjalan sebagai root, Anda dapat menggunakan shebang ini pada baris pertama skrip:
setuid
tidak akan berfungsi pada skrip - dinonaktifkan karena alasan keamanan di sebagian besar * distribusi nix hari ini. Anda dapat mengaturnya, tetapi itu akan diabaikan. Mungkin Anda dapat menjelaskan lebih lanjut tentang masalah Anda yang sebenarnya sehingga kami dapat membantu Anda menyelesaikan ini? Naskah apa itu? Mengapa Anda perlu dijalankan sebagai root? Apakah menggunakansudo
alternatif?sudo -s
?Jawaban:
Berhati-hatilah: skrip yang dikombinasikan dengan setuid berbahaya!
Pertama, lihat pertanyaan / jawaban ini , terutama pada jawaban dan peringatan keamanan ini .
Jika Anda masih ingin menjalankan skrip Anda dengan
setuid
set, maka Anda dapat menulis program C pendek sebagai pembungkus dan mengatursetuid
bit pada biner yang dikompilasi.Contoh bungkus:
Solusi lain menggunakan
sudo
(disebutkan di sini ):Sebagai root, cegah akses tulis (dan mungkin lainnya) ke skrip Anda:
Verifikasi bahwa siapa pun kecuali root dapat mengganti skrip , misalnya dengan memodifikasi hak akses folder induk:
Ubah hak akses sudo
/etc/sudoers
denganvisudo
:Rincian lebih lanjut tentang pengaturan (misalnya membatasi akses ke pengguna atau grup tertentu) dapat ditemukan di halaman sudoers.
Setelah itu, semua pengguna dapat menjalankan skrip sebagai root tanpa kata sandi:
Ini mirip dengan menggunakan larutan pembungkus / setuid di atas.
sumber
sudo
dapat digunakan untuk memberi semua pengguna akses ke program (atau skrip) tertentu. Dalam hal itu, ia bertindak sebagai pembungkus setuid yang mewah. Sepertinya itu biasanya akan menjadi pilihan yang lebih baik daripada menulis setuid wrapper Anda sendiri.Cara termudah dan teraman adalah dengan menggunakan bit SETUID dalam izin file. dengan begitu izin perintah akan dinaikkan ke mengajukan izin pemilik.
untuk mencegah skrip dari edisi, jangan setel bit bits untuk semua orang.
sumber
Saya tidak tahu apakah ini berguna tetapi, untuk membuat skrip hanya berjalan sebagai root, Anda dapat menggunakan shebang ini pada baris pertama skrip:
sumber