Saya memiliki skrip bash yang panjang dan berjalan lama di mana beberapa perintah perlu dijalankan sebagai root sementara mayoritas perintah harus dijalankan sebagai pengguna biasa sebelum sudo, karena itu akan mengacaukan kepemilikan file dan semacamnya.
Saya datang dengan beberapa metode, tetapi masing-masing memiliki beberapa masalah
Metode 1: Menggunakan sudo di dalam file
#!/bin/bash
sudo echo "I must be run by root"
touch needsToBeOwnedByUser1
echo "needs to be run by user"
sleep 1000
sudo echo "I, again, must be run by root"
Ini akan terlihat bagus, dari cara kode ditulis. sudo
ditulis sebelum beberapa pernyataan yang sebenarnya perlu dijalankan oleh root, tetapi jika waktu antara setiap sudo
panggilan terlalu lama sudo
lagi meminta kata sandi. Juga, jika eksekusi pertama sudo
gagal, misalnya karena kata sandi tidak valid, sisa skrip masih dieksekusi.
Metode 2: menggunakan sudo untuk memanggil file dan kemudian kembali ke pengguna asli saat diperlukan
#!/bin/bash
echo "I must be run by root"
su username -c 'touch needsToBeOwnedByUser1'
su username -c 'echo "needs to be run by user"'
su username -c 'sleep 1000'
echo "I, again, must be run by root"
Ini juga menyebalkan, karena saya perlu menambahkan su username -c
di depan hampir setiap baris. Juga menemukan nama pengguna asli setelah sudo
itu mungkin, tetapi rumit.
Apakah ada cara yang lebih baik?
Sunting: Saya hanya memposting skrip kecil yang tidak masuk akal di sini untuk menunjukkan apa yang saya bicarakan. Dalam skrip yang sebenarnya saya memiliki beberapa baris yang memerlukan sudo (layanan mulai dan berhenti), beberapa baris di mana tidak masalah jika ada sudo dan cukup banyak baris yang benar-benar perlu dijalankan tanpa sudo.
man sudo
? -v, --validate
'Perbarui kredensial yang di-cache pengguna, diautentikasi jika perlu. Untuk plugin sudoers, ini memperpanjang batas waktu sudo selama 15 menit secara default, tetapi tidak menjalankan perintah. Tidak semua kebijakan keamanan mendukung kredensial yang di-cache. ' (Jika Anda menjalankannya cukup sering, sudo autentikasi seharusnya tidak habis.)
sudo
jika perlu memiliki izin yang lebih tinggi. Tapi tidak ada gunanya beralihsu username -c
ke menjalankanecho
. Dengan kata lain, ini terdengar seperti [XY]. Bisakah Anda mengedit dan menjelaskan apa yang sebenarnya akan dilakukan skrip Anda dan mengapa Anda merasa harus sering berganti pengguna?