Linux tentu saja adalah sistem multi-pengguna, sehingga perlu untuk menyediakan sistem izin untuk mengontrol set operasi terotorisasi pada berkas dan direktori, yang mencakup semua sumber daya sistem dan perangkat (pada sebuah sistem Unix, setiap perangkat diwakili oleh sebuah berkas atau direktori). Prinsip ini umum untuk semua sistem Unix, tetapi pengingat selalu berguna, terutama karena ada beberapa penggunaan tingkat lanjut yang menarik dan relatif tidak dikenal.
Setiap berkas atau direktori memiliki izin khusus untuk tiga kategori pengguna:
pemiliknya (dilambangkan oleh u
seperti "user/pengguna");
grup pemilik (dilambangkan oleh g
dalam "grup"), yang mewakili semua anggota kelompok;
yang lain (dilambangkan oleh o
seperti "other/yang lain").
Tiga jenis hak dasar dapat digabungkan:
membaca (symbolized oleh r
seperti "read/baca");
menulis (atau memodifikasi, dilambangkan oleh w
seperti "write/menulis");
mengeksekusi (dilambangkan oleh x
seperti "eXecute/menjalankan").
Dalam kasus berkas, hak-hak ini yang mudah dipahami: akses baca memungkinkan membaca konten (termasuk menyalin), akses menulis memungkinkan mengubah, dan akses mengeksekusi memungkinkan Anda untuk menjalankannya (yang hanya akan bekerja jika itu adalah sebuah program).
Direktori ditangani secara berbeda. Akses baca memberikan hak untuk berkonsultasi ke daftar entri (berkas dan direktori), akses tulis mengizinkan membuat atau menghapus berkas, dan akses mengeksekusi memungkinkan melintasinya (terutama untuk pergi ke sana dengan perintah cd
). Mampu untuk melintasi sebuah direktori tanpa bisa membacanya memberikan izin untuk mengakses entri di dalamnya yang dikenal dengan nama, tetapi tidak untuk menemukan mereka jika Anda tidak tahu keberadaan mereka atau nama yang tepat.
Tiga perintah mengontrol izin yang terkait dengan berkas:
chown pengguna berkas
mengubah pemilik berkas;
chgrp grup berkas
mengubah kelompok pemilik;
chmod hak berkas
mengubah izin untuk berkas.
Ada dua cara untuk menyajikan hak. Di antara mereka, representasi simbolik adalah mungkin yang paling mudah untuk dipahami dan diingat. Ini melibatkan huruf simbol yang disebutkan di atas. Anda bisa mendefinisikan hak untuk setiap kategori pengguna (u
g
/o
), dengan menetapkan mereka secara eksplisit (dengan =
), dengan menambahkan (+
), atau mengurangi (-
). Dengan demikian rumus u=rwx,g+rw,o-r
memberikan pemilik hak baca, tulis, dan eksekusi, menambahkan hak baca dan tulis untuk pemilik grup, dan menghilangkan hak-hak baca untuk pengguna lain. Hak-hak yang tidak diubah oleh penambahan atau pengurangan dalam perintah tersebut tetap tak berubah. Huruf a
, untuk "all/semua", mencakup semua kategori pengguna, sehingga a=rx
menghibahkan ke ketiga kategori hak yang sama (membaca dan mengeksekusi, tapi tidak menulis).
Representasi numerik (oktal) mengasosiasikan hak masing-masing dengan suatu nilai: 4 untuk baca, 2 untuk tulis, dan 1 untuk eksekusi. Kita menghubungkan setiap kombinasi hak dengan menjumlah angka-angka. Setiap nilai kemudian ditugaskan untuk berbagai kategori pengguna dengan meletakkan mereka dalam urutan biasa (pemilik, kelompok, lain-lain).
Misalnya, perintah chmod 754berkas
akan menetapkan hak-hak berikut: baca, tulis dan, jalankan untuk pemilik (karena 7 = 4 + 2 + 1); baca dan jalankan untuk grup (karena 5 = 4 + 1); hanya-baca untuk orang lain. 0
berarti tidak ada hak; dengan demikian chmod 600berkas
memungkinkan hak baca/tulis untuk pemilik, dan tidak ada hak untuk orang lain. Kombinasi tepat yang paling sering adalah 755
untuk berkas yang dapat dieksekusi dan direktori, dan 644
untuk berkas data.
Untuk mewakili hak khusus, Anda dapat memberi awalan digit keempat ke nomor ini sesuai dengan prinsip yang sama, dengan bit setuid
, setgid
, dan sticky
masing-masing adalah 4, 2, dan 1. chmod 4754
akan mengasosiasikan bit setuid
dengan hak-hak yang dijelaskan sebelumnya.
Perhatikan bahwa penggunaan notasi oktal hanya memungkinkan untuk mengatur semua hak sekaligus pada berkas; Anda tidak dapat menggunakannya untuk menambahkan hak baru, seperti akses baca untuk pemilik grup, karena Anda harus memperhitungkan hak-hak yang ada dan menghitung nilai numerik baru yang sesuai.
9.3.2. ACLs - Access Control Lists (Daftar Kontrol Akses)
Banyak sistem berkas, misalnya Btrfs, Ext3, Ext4, JFS, XFS, dll., mendukung penggunaan Access Control Lists (ACL). Ini memperluas fitur dasar kepemilikan dan izin berkas, yang dijelaskan di bagian sebelumnya, dan memungkinkan kontrol yang lebih halus dari setiap objek (berkas). Misalnya: Pengguna ingin berbagi berkas dengan pengguna lain dan pengguna tersebut seharusnya hanya dapat membaca berkas tersebut, tetapi tidak menulis atau mengubahnya.
Untuk beberapa sistem berkas, penggunaan ACL diaktifkan secara baku (misalnya Btrfs, Ext3, Ext4). Untuk sistem berkas lain atau sistem yang lebih lama, itu harus diaktifkan menggunakan opsi kait acl
- baik di perintah mount
langsung atau di /etc/fstab
. Dengan cara yang sama penggunaan ACL dapat dinonaktifkan dengan menggunakan opsi kait noacl
. Untuk sistem berkas Ext*, seseorang juga dapat menggunakan perintah tune2fs -o [no]acl /dev/peranti
untuk mengaktifkan/menonaktifkan penggunaan ACL secara baku. Nilai baku untuk setiap sistem berkas biasanya dapat ditemukan di halaman manual homonim mereka di bagian 5 (filesystem(5)) atau di mount(8).
Setelah mengaktifkan ACL, izin dapat diatur menggunakan perintah setfacl(1), sementara getfacl(1) memungkinkan seseorang untuk mendapatkan ACL bagi objek atau path tertentu. Perintah ini adalah bagian dari paket acl. Dengansetfacl
Seseorang juga dapat mengonfigurasi berkas atau direktori yang baru dibuat untuk mewarisi izin dari direktori induk. Penting untuk dicatat bahwa ACL diproses dalam urutannya dan bahwa entri sebelumnya yang sesuai dengan situasi lebih diutamakan daripada entri selanjutnya.
Jika berkas memiliki ACL yang ditetapkan, keluaran dari ls -l
perintah akan menampilkan tanda plus setelah izin tradisional. Saat menggunakan ACL, chmod
perintah berperilaku sedikit berbeda, dan umask
mungkin diabaikan. Dokumentasi ekstensif, misalnya acl(5) berisi lebih banyak informasi.