Siapa yang dapat mengubah izin file / direktori?

14

Saya percaya (tidak yakin) bahwa pemilik file / direktori dan pengguna root adalah satu-satunya pengguna yang diizinkan untuk mengubah izin file / direktori. Apakah saya benar atau ada pengguna lain yang juga diizinkan mengubah izin?

pengguna226341
sumber

Jawaban:

19

Hanya pemilik dan root(pengguna super) yang diizinkan untuk mengubah izin file atau direktori. Ini berarti bahwa pemilik dan pengguna super dapat mengatur izin baca ( r), tulis ( w) dan jalankan ( x). Tetapi mengubah kepemilikan (pengguna / grup) file dan direktori dengan perintah chown/ chgrphanya diperbolehkan root.

Rakib
sumber
19
Pemilik file dapat mengubah kepemilikan grup file tersebut jika pengguna adalah anggota grup baru.
Kusalananda
7

Untuk tujuan operasi normal, hanya root dan pemilik yang bisa chmod. Selain itu, root dapat chowndan chgrp, dan selanjutnya pemilik dapat chgrpselama pemiliknya adalah anggota kelompok target.

Untuk tujuan keamanan, ada kasus lain: setiap pengguna dengan izin menulis ke direktori yang berisi file dapat mengganti file dengan salinan, dan dengan demikian menjadi pemilik, mendapatkan kemampuan untuk memodifikasi izin dan konten.

Seperti itu:

14:14 mybox:~ mkdir mydir
14:14 mybox:~ cd mydir/
14:14 mybox:mydir echo foo | sudo tee yourfile
foo
14:14 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  3 me    staff  102 Apr 11 14:14 .
-rw-r--r--  1 root  staff    4 Apr 11 14:14 yourfile

Kami membuat direktori, dan menulis file sebagai root. Karena root memiliki file tersebut, kami tidak dapat menulisnya, kami juga tidak dapat chmod:

14:15 mybox:mydir echo bar > yourfile 
-bash: yourfile: Permission denied
14:15 mybox:mydir chmod a+x yourfile
chmod: Unable to change file mode on yourfile: Operation not permitted

Namun, kami memiliki izin menulis ke direktori, sehingga kami dapat mengganti file untuk mendapatkan kepemilikan:

14:15 mybox:mydir mv yourfile yourfile2
14:15 mybox:mydir cp yourfile2 yourfile
14:15 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  4 me   staff  136 Apr 11 14:15 .
-rw-r--r--  1 me   staff    4 Apr 11 14:15 yourfile

Dan sekarang kita adalah pemiliknya, tentu saja kita dapat melakukan apa yang kita inginkan dengan file itu:

14:15 mybox:mydir echo bar > yourfile 
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar

Demikian pula, setiap pengguna dengan izin menulis ke direktori mana pun di jalur lengkap yang mengarah ke file dapat menggantikan struktur direktori sejak saat itu, sehingga mendapatkan kepemilikan file dengan nama yang diberikan. Kepemilikan atau izin dari file asli yang sebenarnya (yang kami namai dengan "yourfile2") tentu saja tidak berubah.

14:17 mybox:mydir ls -l yourfile2
-rw-r--r--  1 root  staff  4 Apr 11 14:14 yourfile2
Bas
sumber
Apakah Anda tahu jika ada distribusi Linux yang mendukung fitur keamanan tambahan seperti Windows? Jika saya berada di Windows, saya dapat mengatur izin penghapusan file untuk ditolak untuk mencegah penghapusan bahkan ketika direktori permisif.
Kevin Li
Banyak (kebanyakan?) Rasa Linux saat ini mendukung daftar kontrol akses tingkat file, ( getfacl / setfacl) yang memberikan lebih banyak fleksibilitas daripada izin file gaya "klasik". Penghapusan file di * nix berfungsi dengan menghapus tautan ke file dari direktori, jadi penghapusan file selalu dikontrol oleh izin direktori; file permissions sendiri tidak berperan di sana.
Bass
Sangat sesuai dengan filosofi Unix tentang "semuanya adalah file." Jadi Anda mengatakan bahwa hal seperti itu tidak dapat dilakukan di Linux?
Kevin Li
3
@KevinLi Jawaban ini tidak terlalu lengkap. Anda dapat mengatur bit lengket pada direktori untuk membatasi kemampuan bukan pemilik untuk menghapus atau mengganti nama file. Lihat pertanyaan ini dan jawabannya: unix.stackexchange.com/questions/79395/... Tidak perlu menggunakan ACL atau skema lainnya.
Andrew Henle
Sistem file @KevinLi * nix sangat berbeda dari sistem Windows. File ada secara terpisah dari hierarki direktori, dan mereka dapat memiliki beberapa "tautan keras" yang menunjuk ke mereka di direktori. Menghapus file sebenarnya berarti menghapus tautan keras, yang dilakukan pada direktori. File melacak berapa banyak tautan keras yang menunjuk ke sana, dan file yang sebenarnya akan tetap berada di disk selama setidaknya ada satu tautan keras yang menunjuk ke sana. Dengan demikian, penghapusan dikendalikan oleh izin direktori, yang memang memiliki opsi khusus untuk hanya mengizinkan penghapusan oleh pemilik file & root, seperti kata Andrew.
Bass
1

The chmodperintah cukup langsung memanggil system call dengan nama yang sama; halaman manual untuk chmod(2)panggilan sistem (di Linux 4.10) mengatakan:

UID efektif dari proses panggilan harus sesuai dengan pemilik file, atau proses tersebut harus istimewa (Linux: itu harus memiliki CAP_FOWNERkemampuan).

Jika proses panggilan tidak istimewa (Linux: tidak memiliki CAP_FSETIDkemampuan), dan grup file tidak cocok dengan ID grup efektif dari proses atau salah satu ID grup tambahan, S_ISGIDbit akan dimatikan, tetapi ini tidak akan menyebabkan kesalahan dikembalikan.

Jadi ya, proses yang berjalan sebagai root dapat mengubah izin file apa pun jika tidak menghilangkan CAP_FOWNERkemampuannya.


Yang juga menarik adalah chown; halaman manual untuk chown(2)mengatakan:

Hanya proses istimewa (Linux: satu dengan CAP_CHOWNkemampuan) yang dapat mengubah pemilik file. Pemilik file dapat mengubah grup file ke grup mana pun yang pemiliknya adalah anggota. Proses istimewa (Linux: with CAP_CHOWN) dapat mengubah grup secara sewenang-wenang.

Toby Speight
sumber