Saya baru saja mengalami sesuatu yang tidak terduga (bagi saya) mengenai izin file di Linux (Arch Linux). Pada dasarnya saya punya:
userX
digroupX
fileX userX:groupX ---rwx----
Yang membingungkan saya:Saya tidak dapat melakukan tindakan apa pun (rwx
) pada fileX
. Apakah ini benar? Bisakah seseorang mengonfirmasi bahwa ini memang perilaku yang diharapkan?
Satu-satunya tindakan yang dapat saya lakukan adalah mv
dan rm
karena saya memiliki izin menulis di direktori induk.
Masalahnya, saya selalu berpikir izin ini runtuh satu sama lain, dimulai dengan yang paling umum (lainnya -> grup -> pengguna). Dengan kata lain, jika o=rwx
siapa yang peduli apa izin untuk grup dan pengguna?
Rupanya ini bukan masalahnya, tetapi itu tidak masuk akal bagi saya; tampaknya berlawanan dengan intuisi. Satu-satunya hal yang tampaknya berguna dari pendekatan ini, adalah dengan mudah mengecualikan orang / kelompok yang sangat spesifik, yang sepertinya bukan cara cerdas untuk melakukannya (imho). Selain itu, pemilik (dan grup?) harus dapat chmod
toh kan? Ada pendapat tentang masalah ini?
Jawaban yang Diterima:
Masalahnya, saya selalu berpikir bahwa izin ini runtuh satu sama lain, dimulai dengan yang paling umum (lainnya -> grup -> pengguna).
Jika demikian halnya, izin “lainnya” akan berlaku untuk semua orang.
Dengan kata lain, jika o=rwx siapa yang peduli apa izin untuk grup dan pengguna?
Itu berbeda dari kalimat Anda sebelumnya. Di sini Anda menyiratkan bahwa izin digabungkan, mis. bahwa userX memiliki izin baca jika userX memiliki file dan file dapat dibaca pengguna, atau jika grup milik userX memiliki file dan file dapat dibaca grup, atau jika file dapat dibaca orang lain. Tapi bukan itu cara kerjanya. Faktanya, o=rwx
artinya rwx
izin berlaku untuk orang lain, tetapi tidak mengatakan apa pun tentang entitas yang bukan orang lain.
Pertama, tidak masalah secara langsung grup mana yang dimiliki pengguna. Kernel tidak memiliki gagasan tentang pengguna yang termasuk dalam grup. Apa yang dipertahankan kernel adalah, untuk setiap proses, ID pengguna (UID efektif) dan daftar ID grup (GID efektif dan GID tambahan). Grup ditentukan pada waktu login, oleh proses login — proses login yang membaca database grup (mis. /etc/group
). ID pengguna dan grup diwarisi oleh proses turunan¹.
Saat sebuah proses mencoba membuka file, dengan izin Unix tradisional:
- Jika pengguna pemilik file adalah UID proses yang efektif, maka bit izin pengguna akan digunakan.
- Jika tidak, jika grup pemilik file adalah GID efektif proses atau salah satu ID grup tambahan proses, maka bit izin grup akan digunakan.
- Jika tidak, bit izin lainnya akan digunakan.
Hanya satu set bit rwx yang pernah digunakan. Pengguna didahulukan daripada grup yang didahulukan dari yang lain. Ketika ada daftar kontrol akses, algoritma yang dijelaskan di atas digeneralisasikan:
- Jika ada ACL pada file untuk UID proses yang efektif, maka itu digunakan untuk menentukan apakah akses diberikan.
- Jika tidak, jika ada ACL pada file untuk GID efektif proses atau salah satu ID grup tambahan proses, maka bit izin grup akan digunakan.
- Jika tidak, bit izin lainnya akan digunakan.
Jadi -rw----r-- alice interns
menunjukkan file yang dapat dibaca dan ditulis oleh Alice, dan yang dapat dibaca oleh semua pengguna lain kecuali pekerja magang. File dengan izin dan kepemilikan ----rwx--- alice interns
hanya dapat diakses oleh pekerja magang kecuali Alice (apakah dia magang atau bukan). Karena Alice dapat memanggil chmod
untuk mengubah izin, ini tidak memberikan keamanan apa pun; ini adalah kasus tepi. Pada sistem dengan ACL, mekanisme umum memungkinkan penghapusan izin dari pengguna tertentu atau grup tertentu, yang terkadang berguna.
Menggunakan satu set bit, daripada meng-or-ing semua bit untuk setiap tindakan (baca, tulis, jalankan), memiliki beberapa keuntungan:
- Ini memiliki efek berguna yang memungkinkan penghapusan izin dari sekumpulan pengguna atau grup, pada sistem dengan ACL. Pada sistem tanpa ACL, izin dapat dihapus dari satu grup.
- Lebih mudah untuk diterapkan: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 ketika proses setuid atau setgid dijalankan. Ini tidak terkait dengan masalah yang dihadapi.