Contoh skrip bisa seperti di bawah ini:
#!/bin/bash
sudo su
ls /root
Saat menggunakan ./test.sh
sebagai pengguna normal, alih-alih jalankan ls
sebagai pengguna super dan keluar, ia beralih ke root; dan ketika saya logout, dijalankan ls /root
sebagai pengguna normal.
Adakah yang bisa memberi tahu saya tentang mekanisme itu?
sudo su
membuat mataku sakit.sudo -s
?sudo su
karena saya lebih terbiasa dengan pilihansu
daripada saya dari merekasudo
. Saya tahu opsi sudo dengan cukup baik, tapi saya bisa mengetikkan su lebih cepat. Tapi ya saya kira itu berarti saya tidak cukup tahu sudo.sudo -i
mirip dengansu -
saatsudo -s
beroperasi sepertisu
(tanpa tanda hubung)Jawaban:
Perintah dalam sebuah skrip mengeksekusi satu per satu, secara independen. Script itu sendiri sebagai induk dari semua perintah dalam skrip, adalah proses independen lainnya dan perintah su tidak dan tidak dapat mengubahnya menjadi root: perintah su menciptakan proses baru dengan hak akses root.
Setelah perintah su selesai, proses induk, masih berjalan sebagai pengguna yang sama, akan mengeksekusi sisa skrip.
Yang ingin Anda lakukan adalah menulis skrip wrapper. Perintah istimewa masuk ke skrip utama, misalnya
~/main.sh
Skrip wrapper memanggil skrip utama dengan izin root, seperti ini
Untuk meluncurkan proses ini, Anda menjalankan pembungkus, yang pada gilirannya meluncurkan skrip utama setelah mengalihkan pengguna ke pengguna root.
Teknik pembungkus ini dapat digunakan untuk mengubah skrip menjadi pembungkus di sekitarnya. Pada dasarnya periksa untuk melihat apakah itu berjalan sebagai root, jika tidak, gunakan "su" untuk meluncurkan kembali sendiri.
$ 0 adalah cara praktis untuk membuat skrip merujuk pada dirinya sendiri, dan perintah whoami dapat memberi tahu kita siapa kita (apakah kita root?)
Jadi skrip utama dengan pembungkus bawaan menjadi
Perhatikan penggunaan exec. Ini berarti "ganti program ini dengan", yang secara efektif mengakhiri pelaksanaannya dan memulai program baru, diluncurkan oleh su, dengan root, untuk berjalan dari atas. Instance pengganti adalah "root" sehingga tidak menjalankan sisi kanan ||
sumber
Gunakan skrip berikut dalam.
Kode antara blok HERE akan dijalankan sebagai root.
sumber
sudo su
memanggil dua program. Gunakansudo -s <<HEREDOC
atausu user <<HEREDOC
... Batas bodoh 5 menit.Tanpa argumen lebih lanjut
su
akan menjalankan shell login untuk root. Itulah yang dilakukan baris pertama skrip Anda. Ketika Anda keluar, login shell menutup, kembali su dan script Anda terus eksekusi, yaitu dengan baris kedua:ls /root
. Saya pikir Anda bisasudo ls /root
melakukan apa yang Anda inginkan.sumber
ls
, tetapi ini hanya contoh. Sebenarnya saya perlu melakukan lebih banyak hal dengan privilege root :-) Jadi saya lebih suka jawaban @ Ankit.Setelah Anda
sudo su
menjalankan proses baru dengan efektifuserid (euid=EUID)
forked super user, maka kami memiliki bash baru yang berjalan di id proses yang berbeda(pid=PID)
terkait dengan terminal yang sama(tname=TTY)
.Penjelasan
Misalkan setelah menembak
ps -A | grep bash
Anda memiliki21460 pts/2 00:00:00 bash
sebagai output. Sekarang, ketika Anda menjalankan./test.sh
kedua perintahsudo su
danls /root
akan spooled kePID 21460
. Setelah eksekusi ketika Andaroot
sebagai pengguna aktif menekanps -A | grep bash
lagi, Anda akan melihat bash baru berjalanPID say, 21570
. Keluar dariroot bash
akan membunuh bash baru bercabang kembali keuser's bash
dan karenanya menjalankan perintah spooledls /root
sebelum melepaskan prompt.sumber