GNU/Linux >> Belajar Linux >  >> Linux

Linux – Mengapa Setuid Tidak Bekerja??

Pertanyaan ini sudah memiliki jawaban di sini :Izinkan setuid pada skrip shell

(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.


Linux
  1. Mengapa Ekspresi Reguler Bekerja Di X Tapi Tidak Di Y?

  2. Linux – Mengapa Kami Menggunakan Su – Dan Bukan Hanya Su?

  3. Linux Setuid Tidak Berfungsi?

  1. Linux – Mengapa Es_mx Lokal Bekerja Tapi Tidak Es?

  2. Mengapa Tomcat bekerja dengan port 8080 tetapi tidak dengan 80?

  3. Mengapa mengedit javascript di Alat Pengembang Chrome tidak berfungsi?

  1. Mengapa Windows tidak mengenali file di dalam partisi Linux?

  2. mengapa jembatan linux tidak berfungsi

  3. Mengapa regex ini tidak berfungsi di linux?