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.
9.3.1. Owners and Permissions
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").
Three basic types of rights can be combined:
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).
For instance, the chmod 754 file
command will set the following rights: read, write and execute for the owner (since 7 = 4 + 2 + 1); read and execute for the group (since 5 = 4 + 1); read-only for others. The 0
(zero) means no rights; thus chmod 600 file
allows for read/write rights for the owner, and no rights for anyone else. The most frequent right combinations are 755
for executable files and directories, and 644
for data files.
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
Many filesystems, e.g. Btrfs, Ext3, Ext4, JFS, XFS, etc., support the use of Access Control Lists (ACLs). These extend the basic features of file ownership and permission, described in the previous section, and allow for a more fine-grained control of each (file) object. For example: A user wants to share a file with another user and that user should only be able to read the file, but not write or change it.
For some of the filesystems, the usage of ACLs is enabled by default (e.g. Btrfs, Ext3, Ext4). For other filesystems or older systems it must be enabled using the acl
mount option - either in the mount
command directly or in /etc/fstab
. In the same way the usage of ACLs can be disabled by using the noacl
mount option. For Ext* filesystems one can also use the tune2fs -o [no]acl /dev/device
command to enable/disable the usage of ACLs by default. The default values for each filesystem can usually be found in their homonym manual pages in section 5 (filesystem(5)) or in mount(8).
After enabling ACLs, permissions can be set using the setfacl(1) command, while getfacl(1) allows one to retrieve the ACLs for a given object or path. These commands are part of the acl package. With setfacl
one can also configure newly created files or directories to inherit permissions from the parent directory. It is important to note that ACLs are processed in their order and that an earlier entry that fits the situation has precedence over later entries.
If a file has ACLs set, the output of the ls -l
command will show a plus-sign after the traditional permissions. When using ACLs, the chmod
command behaves slightly different, and umask
might be ignored. The extensive documentation, e.g. acl(5) contains more information.