Izin dan kepemilikan sebuah berkas bukan atribut permanen, melainkan metadata yang dapat diubah sesuai kebutuhan. Topik ini membahas dua perintah yang menjadi tumpuannya, yaitu chmod untuk mengubah bit izin dan chown untuk mengubah pemilik beserta grupnya. Pembahasan mencakup notasi oktal dan simbolik pada chmod, penerapan rekursif dengan huruf X kapital, serta aturan tentang siapa yang boleh mengubah kepemilikan. Setelah menyelesaikannya, perubahan izin dapat dilakukan secara sadar, bukan dengan menyalin perintah, dan setiap hasilnya dapat diverifikasi dengan stat.
Mengubah mode dengan notasi oktal#
Perintah chmod (change mode) mengubah bit izin sebuah berkas atau direktori. Hak untuk menjalankannya terbatas pada pemilik berkas dan root, sehingga pengguna lain yang mencoba mengubah izin berkas milik orang lain akan ditolak kernel. Bentuk paling ringkas dari perintah ini memakai notasi oktal tiga digit sebagaimana dihitung pada topik model izin, dengan digit pertama untuk pemilik, digit kedua untuk grup, dan digit ketiga untuk other.
Contoh berikut menyiapkan dua berkas dengan mode awal yang ditetapkan eksplisit, lalu mengubah mode laporan.txt menjadi 640.
# folder kerja
mkdir -p /tmp/kerja-chmod-dan-chown
cd /tmp/kerja-chmod-dan-chown
rm -rf laporan.txt skrip.sh
touch laporan.txt
printf '#!/bin/bash\necho "skrip berjalan"\n' > skrip.sh
# mode awal ditetapkan eksplisit
chmod 664 laporan.txt
chmod 644 skrip.sh
stat -c '%A %a %n' laporan.txt skrip.sh-rw-rw-r-- 664 laporan.txt
-rw-r--r-- 644 skrip.sh# pemilik membaca dan menulis, grup membaca, other tanpa izin
chmod 640 laporan.txt
stat -c '%A %a %n' laporan.txt-rw-r----- 640 laporan.txtMode 640 cocok untuk berkas kerja yang boleh dibaca satu tim, tetapi tidak boleh dilihat pihak lain. Perubahan pada notasi oktal selalu menetapkan seluruh sembilan bit sekaligus, sehingga satu perintah cukup untuk mengganti mode sepenuhnya. Konsekuensinya, digit yang ditulis tanpa diperhitungkan tetap menimpa izin lama dan dapat menghapus izin yang semestinya tetap ada. Itulah alasan notasi simbolik disediakan. Karena setiap digit adalah ringkasan tiga bit, mode 640 selalu dapat diperiksa ulang dengan membacanya sebagai 6, 4, dan 0, yaitu rw-, r--, dan ---, tanpa menghitung dari nol.
Notasi simbolik pada chmod#
Notasi simbolik mengubah izin secara relatif tanpa menulis ulang seluruh digit. Strukturnya terdiri atas tiga bagian, yaitu siapa yang disasar, operator, dan huruf izinnya. Bagian siapa memakai u untuk pemilik (user), g untuk grup (group), o untuk other, dan a untuk ketiganya sekaligus (all). Operator yang tersedia adalah + untuk menambah, - untuk menghapus, dan = untuk menetapkan persis, sedangkan huruf izinnya tetap r, w, dan x.
Contoh berikut menambahkan izin eksekusi hanya untuk pemilik, lalu menjalankan skrip tersebut.
# menambah izin eksekusi hanya bagi pemilik
chmod u+x skrip.sh
stat -c '%A %a %n' skrip.sh
./skrip.sh-rwxr--r-- 744 skrip.sh
skrip berjalanIzin grup dan other tidak tersentuh oleh u+x, karena notasi simbolik hanya mengubah bagian yang disebutkan. Skrip shell memang membutuhkan bit eksekusi agar dapat dijalankan lewat ./skrip.sh, dan tanpa u+x shell akan menolak dengan pesan Permission denied. Bentuk lain yang umum dipakai adalah chmod a=r yang menyisakan izin membaca saja untuk semua pihak, serta chmod go-w yang menutup izin menulis bagi grup dan other tanpa menyentuh pemilik.
chmod rekursif dan huruf X kapital#
Opsi -R (recursive) menerapkan perubahan mode ke seluruh isi direktori, termasuk subdirektori di dalamnya. Opsi ini praktis, tetapi menuntut kehati-hatian karena satu mode berlaku untuk berkas dan direktori sekaligus, padahal keduanya memakai bit x dengan arti yang berbeda. Kesalahan yang paling sering terjadi adalah membuka x untuk semua berkas data hanya demi membuat direktorinya dapat dimasuki.
Urutan berikut menyiapkan proyek kecil, mengunci seluruh akses grup dan other secara rekursif, lalu membukanya kembali dengan a+rX.
# struktur proyek kecil
rm -rf proyek
mkdir -p proyek/src
touch proyek/src/utama.py
# menghapus seluruh akses grup dan other secara rekursif
chmod -R go-rwx proyek
stat -c '%A %a %n' proyek proyek/src proyek/src/utama.pydrwx------ 700 proyek
drwx------ 700 proyek/src
-rw------- 600 proyek/src/utama.py# baca untuk semua, eksekusi hanya untuk direktori
chmod -R a+rX proyek
stat -c '%A %a %n' proyek proyek/src proyek/src/utama.pydrwxr-xr-x 755 proyek
drwxr-xr-x 755 proyek/src
-rw-r--r-- 644 proyek/src/utama.pyHuruf X kapital berbeda dari x kecil karena hanya menambahkan izin eksekusi pada direktori, atau pada berkas yang sudah memiliki setidaknya satu bit eksekusi. Berkas utama.py yang tidak pernah memakai bit eksekusi berakhir dengan mode 644, sedangkan kedua direktori menjadi 755. Kombinasi a+rX inilah cara yang aman untuk membuka struktur proyek kepada pengguna lain tanpa menandai berkas data sebagai program.
Mengubah kepemilikan dengan chown#
Perintah chown (change owner) mengubah pemilik dan grup sebuah berkas, dengan bentuk umum chown pemilik:grup target. Mengganti grup saja dilakukan dengan menulis nama grup setelah tanda titik dua, misalnya chown :z berkas, sedangkan perintah khusus chgrp melakukan hal yang sama untuk grup semata.
Aturannya bersifat membatasi. Pemilik berkas yang bukan root hanya boleh memindahkan berkasnya ke grup tempat pemilik terdaftar sebagai anggota, sedangkan penggantian pemilik selalu membutuhkan hak root. Larangan ini mencegah pengguna memberikan berkasnya kepada akun lain secara sembunyi-sembunyi, misalnya untuk mengelabui program yang memeriksa pemiliknya.
# mengubah grup berkas ke grup utama milik sendiri
chown :z laporan.txt
stat -c '%U:%G %n' laporan.txtz:z laporan.txtPerubahan grup ke grup utama pengguna berhasil tanpa pesan apa pun, sebab banyak perintah yang berhasil tidak menampilkan keluaran. Percobaan berikut mengganti pemilik berkas menjadi root, dan kernel menolaknya karena operasi ini memang bukan wewenang pengguna biasa.
# mengganti pemilik ke root tanpa hak root
chown root laporan.txtchown: changing ownership of 'laporan.txt': Operation not permittedPesan Operation not permitted di atas adalah perilaku yang benar. Pada server sungguhan, penggantian pemilik dijalankan lewat sudo chown pemilik:grup target, misalnya untuk menyerahkan berkas konfigurasi kepada akun layanan yang menjalankan aplikasi. Hasil setiap perubahan, baik izin maupun kepemilikan, selalu dapat dipastikan dengan stat sebelum dipakai lebih lanjut.
Kesalahan umum#
- Menggunakan
chmod -R 777sebagai solusi segala masalah akses. Mode ini membuka seluruh berkas kepada semua pengguna dan menghapus batasan yang sengaja dipasang. Sebutkan mode yang benar per target, dan gunakanXkapital bila eksekusi hanya dimaksudkan untuk direktori. - Mengira
chmoddapat mengubah pemilik berkas.chmodhanya menyentuh bit izin, sedangkan pemilik dan grup adalah ranahchown. Akibatnya, mode berubah sedangkan kepemilikan tetap. - Mengubah kepemilikan secara rekursif tanpa memeriksa target.
chown -Ryang salah jalur, misalnya dijalankan pada/alih-alih folder aplikasi, dapat merusak kepemilikan berkas sistem. Jalankanpwddan periksa jalurnya sebelum menambahkan-R. - Menganggap
u+xmengubah berkas data menjadi program. Bit eksekusi hanya mengizinkan berkas dijalankan, sedangkan isi berkas tetap harus berupa skrip atau program yang valid agar shell dapat mengeksekusinya. - Menggabungkan
-Rdengan wildcard tanpa memeriksa pola ekspansinya terlebih dahulu. Pola sepertichmod -R 640 *menyasar berkas dan direktori dengan mode yang sama, sehingga direktori kehilangan bitxyang dibutuhkan untuk penerobosan. Pisahkan perubahan berkas dari perubahan direktori, atau gunakanXkapital.
Ringkasan#
chmodmengubah bit izin lewat notasi oktal yang menetapkan sembilan bit sekaligus, atau notasi simbolik yang mengubah bagian tertentu saja denganu,g,o,aserta operator+,-, dan=.- Opsi
-Rmenerapkan perubahan ke seluruh isi direktori, dan hurufXkapital menambahkan eksekusi hanya untuk direktori sehingga berkas data tidak ikut ditandai sebagai program. chown pemilik:grupmengubah kepemilikan, sedangkanchown :grupmengubah grup saja. Penggantian grup dibatasi pada grup yang menjadi anggota pemilik, dan penggantian pemilik selalu membutuhkan hak root.- Hasil setiap perubahan diverifikasi dengan
stat -c '%A %a %U:%G %n'agar mode dan kepemilikan baru terlihat jelas.
Referensi#
- chmod(1) — Ubuntu manpages — Notasi oktal dan simbolik pada chmod, termasuk aturan huruf X kapital.
- chown(1) — Ubuntu manpages — Bentuk perintah chown dan syarat penggantian pemilik serta grup.
- chmod(2) — Linux man-pages project — Proses perubahan mode pada tingkat kernel dan pemeriksaan haknya.