Saya punya skrip bash kecil:
#!/bin/bash
touch dummy.txt
Jika saya menjalankan skrip ini dengan sudo
maka akan membuat dummy.txt
yang akan dilindungi root .
Yang ingin saya lakukan adalah:
Terlepas dari apakah script ini dijalankan menggunakan sudo
atau user biasa, file tersebut dummy.txt
harus tidak akan akar dilindungi.
chown
danchmod
dalam skrip Anda untuk mengatur kepemilikan dan izin yang diinginkan.Jawaban:
Anda bisa menguji apakah script yang dijalankan melalui
sudo
menggunakanEUID
danSUDO_USER
variabel, dan kemudian jalankantouch
sebagaiSUDO_USER
jika benar - sesuatu sepertisumber
==
digunakan untuk perbandingan string. Karena$EUID
seharusnya mengembalikan nilai integer, saya sarankan Anda menggunakan-ed
perbandingan. Spasi diperbolehkan dalam nama pengguna , jadi mungkin mengutip$SUDO_USER
variabel. Kalau tidak, jawaban yang bagus - ini adalah sesuatu yang saya pribadi akan gunakan.sudo -u
jika skrip itu dijalankan sebagai root. OP berbicara tentang memiliki banyak perintah dalam satu skrip. Tapi hati-hati untuk menghindari infinite loop pada kesalahan.[[...]]
sehingga tidak benar-benar diperlukan untuk mengutip variabel dalam pernyataan if @Serg dan aku gues-ed
adalah salah ketik untuk-eq
-eq
. Tidak tahu[[
tidak ada pemisahan kata. Terima kasih. Secara pribadi, saya masih mengutip demi kebiasaan menulis yang baikJika skrip Anda tidak dimaksudkan untuk dijalankan
root
, cara paling aman untuk menyelesaikan masalah adalah dengan membatalkan eksekusi skrip di awal:Secara opsional, Anda dapat menjalankan kembali skrip Anda sebagai pengguna fallback (mis.
sudo -u FALLBACK_USER "$0"
) Alih-alih hanya membatalkan.Mencoba memperbaiki kebiasaan masing-masing perintah akan membuat skrip Anda menjadi tidak perlu dan sulit untuk di-debug. Setiap kali Anda memodifikasinya, Anda harus melakukan semua pengujian dua kali (sebagai pengguna biasa, kemudian sebagai
root
), dan memperbaiki semuaroot
bug terkait yang muncul. Itu bukan solusi masa depan, jadi bisa dikatakan.sumber
Secara default, file yang dibuat dengan root accound memiliki izin seperti:
Di sini file milik pengguna root dan grup root, dan dapat dibaca dan ditulis oleh root, tetapi hanya dapat dibaca oleh orang lain.
Pendekatan paling sederhana adalah hanya dengan
chown
file kembali ke pengguna asli.Anda dapat menggunakan
$SUDO_USER
variabel yang hanya dapat diakses saatsudo
dipanggil, seperti:Jika Anda menjalankan skrip sebagai pengguna biasa,
chown
bagian itu tidak diperlukan sama sekali, jadi Anda mungkin ingin mempertimbangkan untuk menggunakan pernyataan-if atau&&
menguji untuk menguji kasus ketika skrip dijalankan sebagai root, dan lakukan sesuatu di sepanjang baris ini:Pendekatan di atas direkomendasikan. Ada yang lain, seperti menggunakan
chmod
untuk mengubah izin baca-tulis-jalankan untuk pengguna dan grup, tetapi tidak disarankan.sumber
sudo
, maka tidak - Anda tidak dapat mengabaikannya. Pilihan Anda adalah menjalankan skrip sebagai pengguna biasa (yang saya tidak mengerti mengapa Anda tidak melakukannya, karena Anda hanya membuat file untuk pengguna Anda di sini) atau mengubah kepemilikan file seperti yang saya tunjukkan dalam jawaban saya.