Kalkulator chmod

Konversi izin berkas Unix antara oktal (755), simbolik (rwxr-xr-x), dan kisi kotak centang, dengan setuid, setgid, dan sticky bit.

Mode umum
KelasBacaTulisEksekusi
Pemilik
Grup
Lainnya
Oktal
Simbolik
Perintah oktal
chmod 644 file
Perintah simbolik
chmod u=rw,g=r,o=r file
gaya ls -l
-rw-r--r--

Apa yang dilakukan alat ini

Setiap berkas pada sistem Unix membawa sekumpulan izin yang memutuskan siapa yang boleh membacanya, mengubahnya, atau menjalankannya. Perintah chmod mengaturnya, dan ia menerima izin itu dalam dua ejaan yang cukup berbeda — angka oktal tiga digit dan string huruf — yang menjelaskan hal yang persis sama. Alat ini menjaga kedua ejaan, dan kisi kotak centang, tetap selaras, jadi Anda bisa mulai dari yang mana pun yang Anda punya dan menyalin yang Anda butuhkan.

Ia berjalan sepenuhnya di peramban Anda dan murni aritmetika: tak ada server, dan tak ada yang Anda ketik dikirim ke mana pun. Ia adalah kalkulator dan rujukan, bukan cara mengubah izin pada mesin nyata — untuk itu Anda menyalin perintah chmod yang dihasilkannya dan menjalankannya sendiri.

Tiga kelompok, tiga izin

Izin diatur sebagai tiga kelompok berisi tiga. Ketiga kelompok adalah pemilik berkas, grup yang memilikinya, dan semua orang lain — "lainnya". Dalam tiap kelompok ada tiga izin: baca, tulis, dan eksekusi.

  • Baca (r) — melihat konten berkas, atau mendaftar entri direktori.
  • Tulis (w) — mengubah berkas, atau menambah dan membuang entri dalam direktori.
  • Eksekusi (x) — menjalankan berkas sebagai program, atau memasuki direktori dan menjangkau berkas di dalamnya.

Eksekusi berarti sesuatu yang berbeda untuk direktori daripada untuk berkas, dan itu menjebak orang: direktori yang bisa Anda baca tetapi tak eksekusi membiarkan Anda melihat nama apa yang ada di dalamnya tetapi tak membuka satu pun darinya.

Bagaimana angka oktal bekerja

Ketiga izin tiap kelompok dikemas ke dalam satu digit oktal dengan menjumlahkan nilai tetap: baca adalah 4, tulis adalah 2, eksekusi adalah 1. Baca-tulis-eksekusi adalah 4+2+1 = 7; baca-eksekusi adalah 4+1 = 5; baca-tulis adalah 4+2 = 6. Tiga kelompok memberi tiga digit.

755
7 = 4+2+1   # owner: read + write + execute
5 = 4+0+1   # group: read + execute
5 = 4+0+1   # other: read + execute

Jadi 755 adalah "pemilik bisa melakukan segalanya, semua orang lain bisa membaca dan menjalankan tetapi tak mengubah", yang menjadi mode biasa untuk program atau direktori. 644 — pemilik baca-tulis, semua orang lain hanya-baca — adalah mode biasa untuk berkas biasa. Begitu polanya familiar, mode umum terbaca sekilas.

String simbolik

Ejaan lain adalah yang dicetak ls -l: sembilan karakter, tiga per kelompok, masing-masing entah hurufnya atau tanda hubung. 755 adalah rwxr-xr-x; 644 adalah rw-r--r--. Ia membawa informasi persis sama dengan angka oktal, hanya ditata sehingga Anda bisa melihat tiap izin ketimbang menjumlahkan digit di kepala Anda.

Sebaris ls -l punya karakter kesepuluh di depannya — d untuk direktori, tanda hubung untuk berkas biasa, l untuk tautan simbolik. Karakter depan itu adalah jenis berkas, bukan izin, dan chmod tak bisa mengubahnya. Anda bisa menempel seluruh bidang izin ls -l di sini dan karakter jenis cukup diabaikan.

Bit khusus: setuid, setgid, dan sticky

Di atas sembilan bit biasa duduk tiga yang khusus, ditulis sebagai digit oktal keempat opsional di depan — setuid (4), setgid (2), dan sticky bit (1). Mereka tak mendapat kolomnya sendiri; sebaliknya masing-masing menumpang pada slot eksekusi dalam string simbolik, yang menjadi sumber huruf kapital yang membingungkan orang.

  • setuid pada eksekutabel membuatnya berjalan sebagai pemilik berkas ketimbang sebagai pengguna yang meluncurkannya. Beginilah passwd bisa memperbarui berkas sistem yang tak bisa Anda tulisi langsung — dan mengapa program setuid dengan bug adalah lubang serius.
  • setgid pada eksekutabel menjalankannya sebagai grup berkas. Pada direktori ia melakukan sesuatu yang lebih berguna dan lebih aman: berkas baru yang dibuat di dalam mewarisi grup direktori itu ketimbang grup pembuatnya.
  • Sticky bit pada direktori berarti hanya pemilik berkas yang bisa menghapus atau menamainya ulang, bahkan ketika semua orang bisa menulis ke direktori. Inilah yang menjaga /tmp tetap bersama tetapi aman. Pada berkas polos ia tak melakukan apa pun.

Dalam string simbolik bit khusus yang terpasang mengubah slot eksekusinya menjadi huruf: s dalam slot pemilik untuk setuid, s dalam slot grup untuk setgid, t dalam slot lainnya untuk sticky. Besar-kecilnya memberi tahu Anda apakah eksekusi juga menyala — huruf kecil berarti ya, huruf besar berarti tidak.

rwsr-xr-x  4755   # setuid, owner executes
rwSr-xr-x  4655   # setuid, owner does NOT execute
rwxrwxrwt  1777   # sticky, other executes
rwxrwxrwT  1776   # sticky, other does NOT execute

S atau T kapital hampir selalu kesalahan: ia berarti bit khusus dipasang pada berkas yang tak dapat dieksekusi, jadi bit itu tak berpengaruh pada apa pun.

Oktal atau simbolik pada baris perintah

chmod menerima kedua bentuk, dan alat ini menulis keduanya. Bentuk oktal mengatur setiap bit sekaligus: chmod 755 file. Bentuk = simbolik melakukan hal yang sama secara mutlak — chmod u=rwx,g=rx,o=rx file — menyebutkan tiap kelompok sehingga hasilnya tak bergantung pada keadaan awal berkas.

Ada bentuk ketiga, relatif, yang tak dibutuhkan kalkulator tetapi akan Anda temui: chmod +x file menambah eksekusi untuk semua orang, chmod g-w file membuang tulis grup, chmod o= file membersihkan segalanya untuk lainnya. Bentuk itu mengubah bit relatif terhadap mode saat ini ketimbang mengatur keseluruhannya, yang praktis pada baris perintah tetapi tak punya satu "hasil" untuk ditampilkan.

Mode yang lebih baik tak diatur

Alat izin sebaiknya juga mengatakan kapan mode adalah ide buruk. Dua muncul terus-menerus:

  • 777 memberi setiap pengguna baca, tulis, dan eksekusi. Ia adalah perbaikan refleks ketika sesuatu "tak mau bekerja", dan ia hampir selalu menukar masalah kecil dengan lubang keamanan nyata. Mode yang tepat hampir selalu lebih sempit — biasanya 755 atau 644.
  • Berkas dapat-ditulis-siapa-saja apa pun (digit terakhir termasuk 2) membiarkan akun mana pun pada mesin menulis ulang kontennya. Untuk apa pun yang dijalankan, di-source, atau dipercaya, itu adalah jalan masuk. Beri tulis ke grup sebagai gantinya, atau batasi hanya untuk pemilik.

Alat menandai ini saat mereka terjadi. Ia tak bisa tahu apakah target Anda berkas atau direktori, jadi ia menyampaikannya sebagai hal yang layak dilihat lagi ketimbang sebagai galat — sticky bit tepat pada direktori dan tak berguna pada berkas, dan hanya Anda yang tahu mana yang Anda punya.

Apa arti chmod 755

Ini mode yang akhirnya dipakai hampir setiap skrip, program, dan direktori, dan ia dibaca kelompok demi kelompok. Tiap digit adalah tiga izin kelompok itu dijumlahkan — baca 4, tulis 2, eksekusi 1 — jadi 7 adalah ketiganya dan 5 adalah baca ditambah eksekusi dengan tulis ditinggalkan.

  • Pemilik — 7 = 4+2+1. Baca, tulis, dan eksekusi: Anda bisa menyunting berkas itu dan menjalankannya.
  • Grup — 5 = 4+0+1. Baca dan eksekusi, tanpa tulis: anggota grup berkas itu bisa membacanya dan menjalankannya, dan tak bisa mengubahnya.
  • Lainnya — 5 = 4+0+1. Sama lagi: setiap akun lain pada mesin bisa membacanya dan menjalankannya, dan tak satu pun bisa mengubahnya.

Ditulis penuh itu rwxr-xr-x, dan perintahnya chmod 755 file — atau chmod u=rwx,g=rx,o=rx file kalau huruf lebih nyaman bagi Anda. Pada direktori bit yang sama terbaca lain, sebab di sana eksekusi berarti Anda boleh masuk dan menjangkau apa yang di dalam: 755 adalah direktori yang siapa pun bisa mendaftar isinya dan memasukinya, sementara hanya pemilik bisa menambah atau membuang entri. Tentang 755 kalkulator tak berkata apa pun, dan itu disengaja — inilah mode tersempit yang masih membiarkan akun lain menjalankan apa yang Anda tulis. Kalau grup juga perlu menyunting berkasnya, mode yang menambahkan tulis grup adalah 775, bukan 777.

Apa arti chmod 644, dan mengapa berkas Anda sudah begitu

644 adalah 755 dengan semua bit eksekusi dicabut: 6 = 4+2 untuk pemilik, lalu 4 = 4+0+0 untuk grup dan 4 lagi untuk lainnya, yaitu rw-r--r--. Tak ada yang bisa menjalankannya, dan itu justru tepat bagi apa pun yang hanya dibaca — dokumen, halaman HTML, berkas konfigurasi, berkas sumber yang dikompilasi program lain. Pada direktori ia bukan ketat melainkan rusak: tanpa eksekusi tak ada yang bisa masuk, jadi nama di dalamnya terdaftar dan tak satu pun terbuka.

Ia juga mode yang biasanya dipunyai berkas baru sebelum siapa pun menyentuhnya, dan alasannya umask. Program yang membuat berkas biasanya meminta 666 dan yang membuat direktori meminta 777; lalu umask menghapus bit yang disebutnya, bahkan sebelum berkasnya ada. Dengan umask umum 022 — tulis diambil dari grup dan dari lainnya — 666 menjadi 644 dan 777 menjadi 755, dan karena itulah keduanya ada di mana-mana dan karena itulah keduanya dua mode pertama yang ditawarkan alat ini. Ketik umask di shell untuk melihat nilai yang Anda punya.

  • umask 022, nilai bawaan yang biasa — berkas baru keluar 644 dan direktori baru 755.
  • umask 002, disetel di tempat setiap pengguna punya grup sendiri — 664 dan 775, jadi anggota grup pun bisa menyunting.
  • umask 077, setelan privat — 600 dan 700, yang selain pemilik tak seorang pun bisa membacanya sekalipun.

Keenamnya mode siap pakai di sini, dan itu bukan kebetulan: itulah tiga umask yang orang benar-benar setel, dikenakan sekali pada berkas dan sekali pada direktori. Membacanya sebagai tiga pasang ketimbang enam nilai adalah jalan tercepat untuk berhenti mencari mode.

Apa arti chmod 711: masuk, tetapi jangan melihat

711 adalah mode umum yang memberi eksekusi tanpa baca: 7 = 4+2+1 untuk pemilik, lalu 1 = 0+0+1 dua kali, yaitu rwx--x--x. Ia baru masuk akal setelah Anda memisahkan lagi kedua izin direktori — baca mendaftar nama, eksekusi membiarkan Anda melintas — jadi direktori pada 711 bisa dimasuki siapa pun yang sudah tahu nama yang dicarinya, dan tak bisa didaftar siapa pun.

  • Pada direktori ini sungguh berguna. Direktori rumah pada 711 membiarkan server web, atau akun lain pada mesin bersama, membuka /home/you/public/report.pdf sementara ls /home/you ditolak. Tak ada yang disembunyikan dari pemilik; namanya saja yang tak bisa dicacah dari luar.
  • Pada berkas ia nyaris tak berguna. Menjalankan skrip shell berarti penafsir membuka berkasnya dan membacanya, jadi eksekusi tanpa baca gagal; hanya biner terkompilasi, yang dimuat kernel sendiri, masih berjalan. Kalau yang Anda maksud skrip yang bisa dijalankan orang lain, yang Anda mau 755.

Tentang 711 kalkulator juga tak berkata apa pun, sebab ia lebih sempit daripada 755 dan bukan lebih lebar: ia tak memberi apa pun yang tak diberi 755. Tetangganya muncul karena alasan yang sama — 751 memberi grup pendaftaran yang ditolak bagi lainnya, dan 700 mengambil bahkan lintasannya, yang justru dimau direktori untuk satu akun saja.

777 dan 1777: berjarak satu bit, dan bukan nasihat yang sama

Dua mode yang cenderung menarik direktori bersama berbeda satu bit saja, dan alat ini menjawabnya berbeda dengan sengaja. 777 adalah rwxrwxrwx dan kembali ditandai sebagai bahaya; 1777 adalah rwxrwxrwt, kembali sebagai catatan biasa, dan termasuk mode siap pakai di atas — itulah mode yang sungguh dipunyai /tmp.

  • 777 — setiap digit adalah 4+2+1: baca, tulis, dan eksekusi bagi pemilik, grup, dan semua orang lain. Tak tersisa apa pun yang melindungi apa pun: akun mana saja bisa menulis ulang berkasnya, dan akun mana saja bisa menghapus atau mengganti entri dalam direktori yang membawanya. Ia perbaikan refleks atas masalah izin, dan hampir selalu menukar masalah kecil dengan masalah nyata.
  • 1777 — sembilan bit yang sama ditambah sticky bit, yang mengizinkan penghapusan dan penggantian nama sebuah entri hanya bagi pemilik entri itu. Satu pembatasan itulah yang membuat aman meninggalkan direktori dapat ditulis semua orang, dan itu sebabnya /tmp bekerja: siapa pun boleh membuat berkas di sana dan tak seorang pun boleh membuang berkas orang lain.

Perbedaan itu hanya berlaku di tempat lainnya juga punya eksekusi, dan alat ini ketat soal itu. 1666 adalah rw-rw-rwT — sticky bit dipasang di tempat tak satu kelompok pun punya eksekusi — dan tak ada yang berbentuk begitu bisa menjadi direktori yang terpakai, jadi sticky bit tak menjaga apa pun dan modenya ditandai dapat-ditulis-siapa-saja dengan bobot penuh, persis seperti 666. T kapital mengatakan hal yang sama dalam satu karakter.

Jadi: direktori yang harus dibagi mau 1777, atau lebih baik lagi 775 dengan grup yang tepat; dan berkas yang tak mau terbuka hampir selalu masalah kepemilikan, bukan perkara yang menuntut 777.

Pertanyaan yang sering diajukan

Apa perbedaan antara 644 dan 755?
644 adalah baca-tulis untuk pemilik dan hanya-baca untuk semua orang lain, mode biasa untuk berkas biasa. 755 menambah eksekusi untuk ketiga kelompok, yang menjadi kebutuhan program untuk berjalan dan direktori untuk dimasuki. Pakai 644 untuk dokumen dan berkas sumber, 755 untuk skrip dan direktori.
Mengapa mode saya menampilkan S atau T kapital?
Karena bit khusus dipasang pada kelompok yang tak punya izin eksekusi. S atau t kecil berarti bit khusus dan eksekusi keduanya menyala; bentuk kapital berarti bit khusus menyala tetapi eksekusi mati, yang biasanya berarti mode bukan yang dimaksudkan — misalnya 4644 (rwSr--r--) adalah setuid pada berkas yang tak bisa dieksekusi siapa pun.
Apa yang sebenarnya dilakukan chmod 777, dan mengapa ia tak dianjurkan?
Ia memberi baca, tulis, dan eksekusi kepada pemilik, grup, dan semua orang lain — akses penuh untuk setiap akun pada sistem. Ia tak dianjurkan karena ia membuang setiap perlindungan sekaligus; berkas yang bisa ditulisi siapa pun adalah berkas yang bisa diutak-atik siapa pun, dan direktori yang bisa ditulisi siapa pun adalah direktori yang bisa ditanami berkas oleh siapa pun. Hampir setiap kasus yang meraih 777 dipecahkan oleh 755 atau 644 ditambah kepemilikan yang tepat.
Apakah digit depan harus ada?
Tidak. Ketika tak ada bit khusus dipasang, mode cukup tiga digit — 755, bukan 0755 — dan itulah yang ditampilkan alat ini. Nol di depan diterima dan berarti hal yang sama; 4, 2, atau 1 di depan menyalakan setuid, setgid, atau sticky bit masing-masing.
Bisakah saya menempel sebaris langsung dari ls -l?
Ya. Tempel bidang izin sepuluh karakter, seperti -rwxr-xr-x atau drwxr-xr-x, dan alat membuang karakter jenis di depan dan membaca sisanya. Jenisnya (berkas, direktori, tautan) bukan izin dan chmod tak bisa mengubahnya, jadi ia diabaikan.
Apakah ada yang saya masukkan dikirim ke server?
Tidak. Seluruh alat adalah aritmetika yang berjalan di peramban Anda. Tidak ada yang diunggah, dicatat, atau disimpan, yang juga sebabnya ia bekerja tanpa koneksi jaringan sama sekali.
Apa yang dilakukan chmod 711?
Ia memberi pemilik segalanya dan memberi grup serta semua orang lain hanya eksekusi — rwx--x--x. Pada direktori itu berarti mereka bisa melintasinya ke jalur yang sudah mereka tahu tetapi tak bisa mendaftar apa yang ada di dalamnya, yang biasanya justru dimau direktori rumah pada mesin bersama. Pada berkas ia tak berguna: skrip shell harus dibaca penafsirnya agar berjalan, jadi eksekusi tanpa baca sekadar gagal.
Apa bedanya chmod 777 dan chmod 1777?
Satu bit — sticky bit, ditulis sebagai 1 di depan, yang mengubah karakter terakhir dari x menjadi t. Keduanya memberi setiap akun baca, tulis, dan eksekusi; 1777 selain itu mengizinkan penghapusan atau penggantian nama sebuah entri hanya bagi pemiliknya. Karena itu alat ini menandai 777 sebagai hampir tak pernah benar sementara menyebut 1777 mode standar untuk direktori bersama seperti /tmp.
Mengapa berkas baru keluar 644 dan direktori baru keluar 755?
Karena umask. Program yang membuat berkas meminta 666 dan yang membuat direktori meminta 777, dan umask menghapus bit dari itu bahkan sebelum berkasnya ada. Nilai yang biasa, 022, mengambil tulis dari grup dan dari lainnya, sehingga tinggal 644 dan 755. Jalankan umask di shell untuk melihat milik Anda: 002 memberi 664 dan 775, dan 077 memberi 600 dan 700.
Apa arti rwxr-xr-x?
Itu 755 yang ditulis penuh. Bacalah tiga karakter sekaligus: rwx adalah pemilik, dengan baca, tulis, dan eksekusi; r-x adalah grup, dengan baca dan eksekusi tetapi tanpa tulis; r-x lagi adalah semua orang lain. Tanda hubung berarti izin itu mati. Tempelkan string itu ke bidang "Simbolik" di sini dan kotak "Oktal" akan menampilkan 755.

Alat terkait