Mengapa sudoedit menulis ke direktori sementara?

10

Saya dulu sudoeditmembuat file:

 $ sudoedit /etc/systemd/system/apache2.service

tetapi ketika saya pergi untuk menyimpan file, itu menulisnya di direktori sementara (/ var / temp / blahblah). Apa yang sedang terjadi? Mengapa tidak menyimpannya ke direktori sistem?

Tyler Durden
sumber

Jawaban:

22

Intinya sudoeditadalah untuk memungkinkan pengguna mengedit file yang seharusnya tidak diizinkan, saat menjalankan editor yang tidak memiliki hak. Untuk mewujudkannya, sudoeditsalin file yang akan diedit ke lokasi sementara, buat itu dapat ditulisi oleh pengguna yang meminta, dan buka di editor yang dikonfigurasi. Itu sebabnya editor menunjukkan nama file yang tidak terkait dalam direktori sementara. Ketika editor keluar, sudoeditperiksa apakah ada perubahan yang benar-benar dilakukan, dan salin file sementara yang diubah kembali ke lokasi aslinya jika perlu.

Stephen Kitt
sumber
IIRC beberapa editor juga akan melakukan pemeriksaan kewarasan dasar untuk memastikan bahwa tidak ada perubahan komputer-bata yang dibuat, tapi saya tidak yakin seberapa umum itu ,.
Dana Gugatan Monica
1
@NicHartley: Sulit untuk melakukan itu dalam kasus umum, karena ada begitu banyak cara untuk merusak komputer Anda. Ini cenderung spesifik aplikasi, misalnya dengan visudountuk /etc/sudoers.
Kevin
@ Kevin Oh, ups, saya pikir saya bingung visudountuk sudoedit. Saya tahu visudopasti melakukannya. Terima kasih sudah membereskannya!
Dana Gugatan Monica
1

Ini dijelaskan dengan baik di halaman sudomanual . Deskripsi -e(yang sudoeditsetara dengan) mengatakan:

-e

Opsi -e(edit) menunjukkan bahwa, alih-alih menjalankan perintah, pengguna ingin mengedit satu atau lebih file. Sebagai pengganti perintah, string " sudoedit" digunakan ketika berkonsultasi dengan kebijakan keamanan. Jika pengguna diotorisasi oleh kebijakan, langkah-langkah berikut diambil:

  1. Salinan sementara terbuat dari file yang akan diedit dengan pemiliknya diatur ke pengguna yang memohon.
  2. Editor yang ditentukan oleh kebijakan dijalankan untuk mengedit file sementara. The sudoerskebijakan menggunakan SUDO_EDITOR, VISUALdan EDITORvariabel lingkungan (dalam urutan itu). Jika tidak ada SUDO_EDITOR, VISUALatau EDITORdisetel, program pertama yang tercantum dalam sudoers(5)opsi editor digunakan.
  3. Jika sudah dimodifikasi, file sementara disalin kembali ke lokasi aslinya dan versi sementara dihapus.

Jika file yang ditentukan tidak ada, itu akan dibuat. Perhatikan bahwa tidak seperti kebanyakan perintah yang dijalankan oleh sudo, editor dijalankan dengan lingkungan pengguna yang memohon tidak dimodifikasi. Jika, karena alasan tertentu, sudotidak dapat memperbarui file dengan versi yang diedit, pengguna akan menerima peringatan dan salinan yang diedit akan tetap dalam file sementara.

Secara khusus, perhatikan langkah ketiga: hanya jika file telah dimodifikasi pada akhir pengeditan maka aslinya diubah. Jadi, jika Anda memiliki program yang mengawasi file, ini dapat membantu menghindari (a) penulisan perantara, dan (b) tindakan yang tidak perlu jika Anda memutuskan untuk tidak membuat perubahan pada akhirnya.


sumber