Diutamakan dari pengguna dan pemilik grup dalam izin file

20

Saya baru saja menemukan sesuatu yang tidak terduga (untuk saya) mengenai izin file di Linux (Arch Linux). Pada dasarnya saya punya:

  • userX di groupX
  • fileX userX:groupX ---rwx----

Apa yang membingungkan saya: Saya tidak dapat melakukan tindakan apa pun ( rwx) pada fileX. Apakah ini benar? Bisakah seseorang mengonfirmasi ini memang perilaku yang diharapkan?

Satu-satunya tindakan yang dapat saya lakukan adalah mvdan rmkarena saya memiliki izin menulis di direktori induk.

Masalahnya adalah, saya selalu berpikir izin ini runtuh satu sama lain, dimulai dengan yang paling umum (lainnya -> grup -> pengguna). Dengan kata lain, jika o=rwxsiapa yang peduli apa penganiayaan untuk grup dan pengguna? Tampaknya ini bukan masalahnya tetapi itu tidak masuk akal bagi saya; tampaknya berlawanan dengan intuisi. Satu-satunya hal yang tampaknya berguna dalam pendekatan ini, adalah dengan mudah mengecualikan orang / kelompok yang sangat spesifik, yang sepertinya bukan cara yang cerdas untuk melakukannya (imho). Selain itu, pemilik (dan grup?) Harus tetap bisa chmod, kan? Adakah pemikiran tentang hal ini?

alex
sumber
Anda sudah pasti di groupX?
exussum
ya, tentu saja; memeriksa gid efektif denganid
alex

Jawaban:

24

Masalahnya adalah, saya selalu berpikir izin ini runtuh satu sama lain, dimulai dengan yang paling umum (lainnya -> grup -> pengguna).

Jika itu masalahnya maka izin "lain" akan berlaku untuk semua orang.

Dengan kata lain, jika o = rwx siapa yang peduli apa pengajuan untuk grup dan pengguna?

Itu berbeda dari kalimat Anda sebelumnya. Di sini Anda menyiratkan bahwa izin diurutkan bersama, mis. Bahwa userX memiliki izin baca jika userX memiliki file dan file tersebut dapat dibaca pengguna, atau jika grup yang dimiliki penggunaX memiliki file dan file tersebut grup -baca, atau jika file tersebut dapat dibaca orang lain. Tapi itu bukan cara kerjanya. Sebenarnya, ini o=rwxberarti bahwa rwxizin berlaku untuk orang lain, tetapi tidak mengatakan apa pun tentang entitas yang bukan milik orang lain.

Pertama, tidak masalah secara langsung grup mana yang dimiliki pengguna. Kernel tidak memiliki gagasan tentang pengguna milik grup. Apa yang dipertahankan oleh kernel adalah, untuk setiap proses, ID pengguna ( UID efektif ) dan daftar ID grup (GID efektif dan GID pelengkap). Grup ditentukan pada waktu login, oleh proses login - ini adalah proses login yang membaca database grup (mis /etc/group.). ID pengguna dan grup diwarisi oleh proses anak¹.

Ketika suatu proses mencoba membuka file, dengan izin Unix tradisional:

  • Jika pengguna yang memiliki file adalah UID efektif proses, maka bit izin pengguna digunakan.
  • Jika tidak, jika grup pemilik file adalah GID efektif proses atau salah satu ID grup pelengkap proses, maka bit izin grup digunakan.
  • Jika tidak, bit izin lainnya digunakan.

Hanya satu set bit rwx yang pernah digunakan. Pengguna lebih diutamakan daripada grup yang lebih diutamakan daripada yang lain. Ketika ada daftar kontrol akses , algoritma yang dijelaskan di atas digeneralisasi:

  • Jika ada ACL pada file untuk UID efektif proses, maka itu digunakan untuk menentukan apakah akses diberikan.
  • Jika tidak, jika ada ACL pada file untuk GID efektif proses atau salah satu ID grup pelengkap proses, maka bit izin grup digunakan.
  • Jika tidak, bit izin lainnya digunakan.

Lihat juga Precedence ACLS ketika pengguna menjadi bagian dari beberapa grup untuk detail lebih lanjut tentang bagaimana entri ACL digunakan, termasuk efek dari mask.

Dengan demikian -rw----r-- alice internsmenunjukkan file yang dapat dibaca dan ditulis oleh Alice, dan yang dapat dibaca oleh semua pengguna lain kecuali magang. File dengan izin dan kepemilikan ----rwx--- alice internshanya dapat diakses oleh peserta magang kecuali Alice (apakah ia magang atau tidak). Karena Alice dapat menelepon chmoduntuk mengubah izin, ini tidak memberikan keamanan apa pun; ini kasus tepi. Pada sistem dengan ACL, mekanisme umum memungkinkan penghapusan izin dari pengguna tertentu atau kelompok tertentu, yang kadang-kadang berguna.

Menggunakan satu set bit, alih-alih semua bit untuk setiap tindakan (baca, tulis, jalankan), memiliki beberapa keuntungan:

  • Ini memiliki efek yang berguna untuk memungkinkan penghapusan izin dari sekelompok pengguna atau grup, pada sistem dengan ACL. Pada sistem tanpa ACL, izin dapat dihapus dari satu grup.
  • Lebih mudah untuk diimplementasikan: periksa satu set bit, daripada menggabungkan beberapa set bit bersama-sama.
  • Lebih mudah untuk menganalisis izin file, karena lebih sedikit operasi yang terlibat.

¹ Mereka dapat berubah saat proses setuid atau setgid dijalankan. Ini tidak terkait dengan masalah yang dihadapi.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
baik ... dengan "runtuh" ​​Aku agak berarti hal yang sama, operasi ATAU :)
alex
Terima kasih atas waktunya; +1 untuk jawaban yang sangat terperinci dan cukup teknis
alex
Jawaban yang bagus Tapi saya punya pertanyaan tentang poin-poin terakhir Anda: Apakah benar-benar lebih mudah untuk diterapkan dan dianalisis? Tidak akan memeriksa izin hanya turun ke ATAU izin bersama seperti OP pikir kasusnya?
Gardenhead
Kasus tepi ini tampaknya masih konyol bagi saya: (userX di groupX) + (userZ di groupX). Anda memiliki fileX userX: groupX --- rwx ----. Sekarang pencipta folder asli userX tidak dapat mengakses fileX .. tetapi userZ bisa. Dan mereka berdua bagian dari kelompok yang sama. Benar-benar tidak intuitif.
alexfvolk
4

Izin yang lebih spesifik didahulukan dari kurang spesifik.

userX di groupX

fileX userX: groupX --- rwx ----

Karena Anda adalah pemilik file, Anda hanya akan diberikan izin pemilik. Pemilik tidak memiliki izin. Dengan demikian, Anda tidak dapat melakukan apa pun. Jika Anda bukan pemilik file dan anggota grup, maka izin grup akan berlaku.

Silakan baca bagian halaman wiki ini

https://en.wikipedia.org/wiki/File_system_permissions#Classes

kog
sumber
2

-rwxrw---- berarti pemilik telah membaca, menulis, dan mengeksekusi izin, grup telah membaca dan menulis, dan yang lain tidak memiliki izin.

Izin yang Anda berikan memberi izin grup 'groupX' untuk membaca, menulis, dan mengeksekusi file. Jika Anda adalah anggota grup "groupX" tetapi bukan pemilik file, izin ini akan berlaku untuk Anda.

Dalam hal ini saya berasumsi Anda memang pemilik file. Hanya izin yang ditetapkan untuk pemilik yang akan berlaku untuk Anda. Tentu saja pemilik dapat mengganti atau mengubah izin pada file. Namun, grup tidak dapat melakukan ini. Misalnya vim akan meminta Anda untuk mengkonfirmasi jika Anda menulis ke file yang Anda tidak memiliki izin untuk menulis tetapi adalah pemiliknya.

Saya biasanya membaca izin dari kiri ke kanan. Apakah saya pemiliknya? Jika ya, izin pemilik berlaku. Jika tidak; Apakah saya anggota grup? Jika ya, izin grup berlaku. Jika tidak, maka izin untuk "Lainnya" berlaku untuk saya.

Dalam beberapa kasus, berguna untuk menjadi pemilik file tetapi tidak memiliki izin menulis. Ini melindungi Anda dari menghapus atau memodifikasi file secara tidak sengaja. Secara pribadi saya telah menetapkan izin 400 pada semua file template saya, hanya untuk memastikan saya tidak memodifikasinya secara tidak sengaja. Hal yang sama berlaku untuk mengeksekusi izin.

arnefm
sumber
1
Saya yakin Anda salah memahami pertanyaan itu. Ketika OP mengatakan izin "runtuh" ​​sebagai Orang Lain-> Grup-> Pengguna, saya pikir maksudnya adalah ketika menentukan apakah tindakan Anda diizinkan, pertama izin "Lainnya" diperiksa, lalu "Grup" dan akhirnya (jika semua yang lain gagal) yang "Pengguna".
Joseph R.
@ JosephephR. ya, itulah yang saya maksudkan :)
alex
Oh, maafkan saya. Saya akan menghapus bagian itu. Apakah ada yang berguna dalam jawabannya?
arnefm
Catatan: Anda harus mengedit jawaban Anda sedikit dan menghapus (atau menguraikan kembali) paragraf kedua karena itu semacam "tidak jelas" (itu tidak cukup jelas, jenis yang bertentangan dengan perilaku yang saya jelaskan)
alex
Setelah dipikir-pikir, saya mungkin harus cepat menerima jawabannya. Maaf soal itu. Jadi Anda mengatakan bahwa kadang-kadang berguna untuk tidak memiliki izin menulis sehingga Anda tidak sengaja mengubah beberapa file penting; tetapi apa gunanya ketika orang lain memiliki izin penuh? (jadi ... Anda akan berhenti melakukan kesalahan tetapi tidak yang lain )
alex
0

Saya dapat menambahkan pengguna ke grup, memberikan izin grup ke direktori (070), dan kemudian SETELAH MEMULAI kembali dapat mengakses folder.

Buat grup: sudo groupadd nama grup

Tambahkan pengguna ke grup: sudo gpasswd -nama nama grup

Pastikan seluruh direktori berada di bawah kepemilikan grup yang benar (harus menjadi anggota groupname saat ini untuk melakukan): sudo chgrp -R groupname directory_path /

Berikan hanya grup rwx untuk folder (bisa saja rw, sesuaikan seperlunya): sudo chmod -R 070 directory_path

Setelah melakukan hal di atas, pastikan untuk keluar dan kembali. Jika itu tidak berhasil, hidupkan ulang mesin. Melakukan ini berhasil bagi saya.

Justin Woods
sumber