Bagaimana cara mempertahankan kepemilikan file setelah diedit?

11

Pertanyaan saya mirip dengan yang lain ini , kecuali ada yang bertanya tentang file yang baru dibuat.

Di kotak Unix saya, pengguna alice , bob dan tomcat ada di grup tomcat .

File konfigurasi server Tomcat dimiliki oleh tomcat pengguna, dan dalam tomcat grup.

Saya telah mengubah izin file ini menjadi dapat dibaca dan ditulis oleh grup sehingga alice dan bob dapat mengedit file.

Namun, saya perhatikan bahwa setelah mengedit, file menjadi milik pengguna terakhir yang mengeditnya.

T: Apakah mungkin untuk mengubah izin sehingga Alice dan Bob dapat mengedit file, tanpa mengubah kepemilikannya?

Bagaimana cara mengedit file mengubah kepemilikannya?

Leonel
sumber
Apakah tujuan Anda untuk memastikan bahwa tomcat terus memiliki file, atau apakah untuk memastikan bahwa: server tomcat terus berfungsi; alice dan bob dapat terus mengedit file, dan keamanannya dipertahankan?
ctrl-alt-delor
1
Saya akan berasumsi bahwa layanan kucing jantan sedang berjalan di bawah pengguna 'kucing jantan', berdasarkan cara pertanyaan Anda diucapkan. Ini mungkin tidak diinginkan karena eksploitasi tomcat dapat mengakibatkan konfigurasi sendiri ditulis ulang untuk mengekspos bit server Anda yang mungkin tidak Anda inginkan. Anda harus mempertimbangkan menggunakan grup lain yang dapat menulis konfigurasi, sedangkan grup kucing jantan dapat membaca, tetapi tidak menulis.
Ed Neville
1
Bacaan latar yang disarankan
Gilles 'SO- stop being evil'

Jawaban:

17

Pengguna file yang dihasilkan tergantung pada apa yang editor lakukan. Beberapa editor menyimpan file dengan memotongnya, dan menulis di atas file (tanpa mengubah inode). Dan beberapa editor mengganti nama file menjadi nama lain ( fileseperti file~biasa), dan membuat file baru dengan nama aslinya. Memodifikasi file asli membuat pemilik tetap sama, membuat yang baru membuat file baru yang dimiliki oleh UID dari proses pembuatan.

Dari editor yang saya miliki di Debian, nanodan joe, juga nvidan vim(versi minimal dalam vim-tiny) tampaknya menimpa di tempat. Meskipun saya kira vimdan Emacs mungkin dapat dikonfigurasi dalam apa yang mereka lakukan.


Stephen berkomentar tentang pembaruan atom . Masalah dengan menciptakan kembali di tempat adalah bahwa file terpotong ke panjang nol, lalu ditulis. Proses lain dapat membuka dan membacanya sebelum semua data ditulis.

Pembaruan atom akan dilakukan dengan membuat versi baru seperti katakan file.new, lalu ganti nama file.newmenjadi file. Meninggalkan file cadangan, orang dapat membuat file.new, menautkan fileke file~dan kemudian mengganti nama file.newmenjadi file. Ganti nama bersifat atomik dalam proses apa pun yang mengakses file dengan nama mendapatkan versi lama atau baru, bukan apa pun di antaranya. Pegangan file yang terbuka tentu saja akan mengarah ke file yang dibuka, memberikan tampilan yang konsisten pada file.


Dari sudut pandang izin file , menyimpan lebih dari file yang sama (inode) memerlukan akses tulis ke file itu sendiri (tetapi bukan direktori), mengubah nama file dan membuat yang baru memerlukan akses tulis ke direktori (tetapi tidak ke file asli ).

(Mengganti nama dan membuat ulang secara kebetulan juga merupakan cara untuk memperbaiki izin file jika seseorang membuat atau memodifikasi file dalam direktori bersama, tetapi lupa untuk memberikan akses tulis grup kepada file tersebut.)

ilkkachu
sumber
6
Membuat dan mengganti nama juga merupakan satu-satunya cara untuk memastikan bahwa file diperbarui secara atomik menggunakan semantik POSIX.
Stephen Kitt
penjelasan yang bagus.
Mian Asbat Ahmad
13

Seperti yang dijelaskan oleh ilkkachu , jika editor yang digunakan membuat file baru saat menyimpan, maka tidak ada cara untuk mengontrol pemilik file. Yang mungkin Anda benar-benar pedulikan adalah memastikan file tetap dapat dibaca oleh Tomcat; Anda dapat melakukannya dengan memastikan grup mereka tomcat(dan mereka dapat dibaca oleh grup mereka), dan itu dapat diberlakukan pada file baru dengan mengatur setgidbit pada direktori induk :

chmod g+s .

Jadi, jika bobmengedit file menggunakan editor yang membuat kembali file, file yang diedit akan berakhir menjadi milik bob:tomcatdan Tomcat masih dapat membacanya (dengan tipikal umasksetidaknya). Selama direktori induk dapat ditulis oleh tomcatgrup, setiap pengguna dalam grup tersebut akan dapat mengedit file dalam direktori (jika hanya dengan membuat ulang mereka).

Namun saya akan merekomendasikan untuk mengubah proses Anda; Anda mungkin tidak boleh mengedit file langsung di lokasi yang mereka baca dari Tomcat. Idealnya, file akan disimpan dalam VCS dari beberapa jenis dan digunakan oleh proses terpisah (mungkin otomatis). Dengan begitu Anda menghindari semua masalah kepemilikan ini ...

Stephen Kitt
sumber
solusi bagus !!
Mian Asbat Ahmad