Linux: Kehilangan kepemilikan grup atas file

8

Saya punya proyek dengan sejumlah file yang saya buat di Linux.

Dan saya perlu memberi izin kepada pengguna lain untuk menulisnya. Jadi saya membuat grup "dev" di mana dia dan saya adalah anggota dan mengubah kepemilikan file ke grup ini.

File biasa sekarang memiliki izin ini:

-rw-rw-r--  1 phil dev   5617 Jul 14 15:45 profile.html

Namun, ketika saya mengedit file profile.html itu kembali kepada saya seperti ini, dan kolega saya kehilangan kemampuan untuk mengedit.

-rw-rw-r--  1 phil phil  5617 Jul 14 15:45 profile.html

Bagaimana saya menghindarinya kembali seperti ini? Apakah mengubah kepemilikan itu hal yang salah untuk dilakukan? Atau apakah itu dilakukan dengan opsi yang salah? Atau apakah ini berkaitan dengan konfigurasi editor (emacs) saya?

interstar
sumber

Jawaban:

17

Pada folder yang berisi Anda akan ingin mengubah grup menjadi dev dan kemudian gunakan tandai itu set-gid.

chgrp dev <containing-folder>
chmod g+ws <containing-folder>

Bit gid yang diset membuat file yang dibuat di folder itu untuk mewarisi grup folder serta menandai bit setgid pada folder baru apa pun. Anda harus berhati-hati saat memindahkan file ke direktori karena itu akan mempertahankan izin yang ada.

Frenchie
sumber
hanya obat (lihat jawaban saya)
asdmin
8

Anda dapat menggunakan bit setgid pada direktori untuk mempertahankan kepemilikan grup oleh anak-anak.

chown :dev directory/
chmod g+s directory/
Dan Carley
sumber
hanya obat (lihat jawaban saya)
asdmin
7

Anda juga bisa me-mount sistem file (dengan anggapan ext2 / 3) dengan opsi mount grpid yang akan membuatnya jadi setiap kali Anda membuat file baru di direktori, itu akan membuat pemilik grup sama dengan direktori induk. Jadi Anda hanya perlu membuatnya jadi direktori tempat file-file ini dimiliki oleh grup 'dev'.

Untuk memasang kembali jika itu adalah partisi root (contoh):

sudo mount -o remount,grpid,rw,relatime,errors=remount-ro /

Dari 'man mount 8':

grpid or bsdgroups / nogrpid or sysvgroups
These options define what group id a newly created file gets.

Ketika grpid diset, dibutuhkan id grup direktori tempat ia dibuat; jika tidak (default) mengambil fsgid dari proses saat ini, kecuali direktori tersebut memiliki set bit setgid, dalam hal ini mengambil gid dari direktori induk, dan juga mendapatkan set bit setgid yang ditetapkan jika itu adalah direktori itu sendiri.

Kyle Brandt
sumber
Sangat berita gembira berguna untuk mengetahui 1
Frenchie
Apakah ini juga akan menjaga izin menulis grup jika Anda membuat atau menyalin file?
KB
1

Perilaku default untuk emacs adalah membuat file cadangan dengan mengganti nama. Dari manual emacs:

Emacs dapat mengganti nama file asli sehingga menjadi file cadangan, dan kemudian menulis buffer disimpan ke file baru. Setelah prosedur ini, nama-nama lain (yaitu, tautan keras) dari file asli sekarang merujuk ke file cadangan. File baru dimiliki oleh pengguna yang melakukan pengeditan, dan grupnya adalah default untuk file baru yang ditulis oleh pengguna di direktori tersebut. Oleh pengguna di direktori itu.

Ada beberapa cara untuk mengubahnya.

  • Atur grup dan bit lengket, seperti yang dijelaskan orang lain.
  • Jalankan 'newgrp dev' sebelum mengedit file, sehingga grup default Anda adalah dev.

Atau khusus emacs:

  • Tetapkan file-precious-flag di emacs, yang mengubah perilaku untuk mempertahankan grup, tetapi memiliki efek samping lainnya.
  • Atur cadangan-dengan-menyalin-ketika-ketidakcocokan dalam emacs, yang menggunakan menyalin daripada mengganti nama ketika itu akan menyebabkan pemilik atau grup berubah.

Jadi, tambahkan ke .emacs Anda:

(setq backup-by-copying-when-mismatch 't)

Preferensi saya sebenarnya adalah 'newgrp dev', karena ini merupakan peralihan eksplisit dari mode "pribadi" (file yang saya edit hanya milik saya), ke mode grup dev (file yang sekarang saya edit dibagi di antara grup).

jmanning2k
sumber
ini jawaban terbaik di sini.
Christopher Neylan