Saya mencoba mengikuti apa yang saya anggap praktik terbaik menggunakan sudo bukan akun root.
Saya menjalankan operasi file concat sederhana seperti:
sudo echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock
Ini gagal seperti di sebelah kanan ">>" itu berjalan sebagai pengguna normal. Menambahkan sudo tambahan juga gagal (perilaku yang diharapkan sejak pemipaan ke perintah sudo dan bukan ke file).
Contohnya hanya itu tetapi sudah diverifikasi dan diuji di bawah akun root.
shell
sudo
io-redirection
quoting
DarkSheep
sumber
sumber
tee
perintah berjalan sebagai root, bukan perintah utama yang bisa rumit dan rentan terhadap perilaku buruk. (tidak demikian halnyaecho
)Pilihan lain, sama-sama aman, adalah dengan menggunakan
sudo
's-i
beralih ke login sebagai root:Ini masih mengikuti aturan praktik terbaik karena akun root sebenarnya tidak diaktifkan, tetapi memungkinkan Anda melakukan hal-hal sebagai root dengan aman. Dari
man sudo
:sumber
sudo bash
Jika Anda mengekspresikan perintah Anda tanpa tanda kutip tunggal, Anda bisa memasukkannya ke dalam tanda kutip tunggal dan menjalankannya melalui shell perantara.
Untuk menjalankan ini sebagai root:
Tulis perintah dengan cara berbeda yang tidak digunakan
'
:Kemudian panggil
sudo sh -c …
:Atau, untuk menulis output ke file yang hanya dapat ditulisi oleh root, panggil
sudo tee
. Berikan-a
opsi untuktee
menambahkan ke file tujuan, jika tidak file akan terpotong.Untuk modifikasi file yang lebih kompleks, Anda dapat menghubungi
sudo sed
,sudo ed
,sudo perl
, ...Atau, gunakan editor yang layak dan buat panggilan sudo. Di Emacs, buka
/sudo:/etc/conf.d/hwclock
. Di Vim, panggil:w !sudo tee %
untuk menulis ke file yang dibuka sebagai root, atau gunakan plugin sudo.vim . Atau pergi dari ujung sudo dan panggilsudoedit /etc/conf.d/hwclock
.Atau Anda bisa menyerah pada sisi gelap dan menjalankan shell sebagai root.
sumber
Perintah gagal karena izin pada file yang dialihkan ke. Pengalihan terjadi bahkan sebelum
sudo
perintah dipanggil.Anda harus memastikan bahwa itu root yang benar-benar membuka file untuk ditulis.
Cara paling sederhana untuk melakukan itu:
The
echo
dapat dijalankan sebagai Anda pengguna biasa karena hanya menghasilkan string teks. Thetee
utilitas harus dijalankan sebagai root meskipun, dantee -a
akan menambahkan data. Kami mengarahkan output ke/dev/null
karenatee
, secara default, akan menduplikasi data inputnya ke output standar selain menulis ke file yang ditunjukkan.Dengan
bash
atau semua shell yang mengerti "di sini-string":Ini identik dengan efek di atas. Hanya cara kami menghasilkan string yang diubah.
Cara lain yang sedikit berbelit-belit untuk melakukannya:
Di sini, pengalihan terjadi di dalam
sh -c
shell anak yang berjalan sebagai root.sumber
sudo dd of=
Untuk menambahkan seperti yang Anda inginkan:
atau untuk membuat ulang file dari awal:
Keuntungan:
tee
sejak tidak ada/dev/null
redirectionsh
karena tidak ada subkulitdd
memiliki banyak opsi hebat, misalnyastatus=progress
untuk melihat kemajuan transferBekerja karena sudo meneruskan stdin ke perintah.
sumber