Saya tidak pernah benar-benar chmod
berhasil sampai hari ini. Saya mengikuti tutorial yang menjelaskan banyak hal kepada saya.
Misalnya, saya pernah membaca bahwa Anda memiliki tiga grup izin berbeda:
- pemilik (
u
) - grup (
g
) - semuanya (
o
)
Berdasarkan tiga kelompok ini, saya sekarang tahu bahwa:
- Jika file tersebut dimiliki oleh pengguna, izin pengguna menentukan akses.
- Jika grup file sama dengan grup pengguna, izin grup menentukan akses.
- Jika pengguna bukan pemilik file, dan tidak ada dalam grup, maka izin lainnya digunakan.
Saya juga mengetahui bahwa Anda memiliki izin berikut:
- baca (
r
) - tulis (
w
) - mengeksekusi (
x
)
Saya membuat direktori untuk menguji pengetahuan saya yang baru didapat:
mkdir test
Kemudian saya melakukan beberapa tes:
chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---
Setelah bermain-main untuk beberapa waktu saya pikir saya akhirnya memahami chmod
dan cara Anda mengatur izin menggunakan perintah ini.
Tapi...
Saya masih punya beberapa pertanyaan:
- Apa yang diperjuangkan
d
di awal? - Apa nama dan penggunaan slot yang berisi dan nilai-nilai apa yang bisa dimilikinya?
- Bagaimana saya bisa mengatur dan menghapusnya?
- Apa nilai untuk ini
d
? (Karena Anda hanya memiliki 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1) - Mengapa orang terkadang menggunakan
0777
alih-alih777
mengatur izin mereka?
Tetapi karena saya seharusnya tidak mengajukan banyak pertanyaan, saya akan mencoba menanyakannya dalam satu pertanyaan.
Dalam sistem berbasis UNIX seperti semua distribusi Linux, mengenai izin, untuk apa bagian pertama ( d
) berdiri dan apa gunanya untuk bagian izin ini?
sumber
S_IFDIR
. Anda tidak menggunakannya saat mengatur mode file, tetapistat()
fungsi sebenarnya mengembalikan nilai 040750 untukdrwxr-x---
.Jawaban:
Saya akan menjawab pertanyaan Anda dalam tiga bagian: jenis file, izin, dan kasus penggunaan untuk berbagai bentuk
chmod
.Jenis file
Karakter pertama dalam
ls -l
output mewakili tipe file;d
berarti itu adalah direktori. Itu tidak dapat diatur atau tidak disetel, tergantung pada bagaimana file itu dibuat. Anda dapat menemukan daftar lengkap tipe file dalam dokumentasi ls ; yang mungkin Anda temui adalah-
: File "biasa", dibuat dengan program apa pun yang dapat menulis fileb
: blok file khusus, biasanya perangkat disk atau partisi, dapat dibuat denganmknod
c
: file karakter khusus, juga dapat dibuat denganmknod
(lihat/dev
contoh)d
: direktori, dapat dibuat denganmkdir
l
: tautan simbolik, dapat dibuat denganln -s
p
: bernama pipa, dapat dibuat denganmkfifo
s
: socket, dapat dibuat dengannc -U
D
: door , dibuat oleh beberapa proses server di Solaris / openindiana.Izin
chmod 0777
digunakan untuk mengatur semua izin dalam satuchmod
eksekusi, daripada menggabungkan perubahan denganu+
dll. Masing-masing dari empat digit adalah nilai oktal yang mewakili satu set izin:suid
,sgid
dan "lengket" (lihat di bawah)Nilai oktal dihitung sebagai jumlah dari izin:
Untuk digit pertama:
suid
adalah 4; binari dengan bit ini dijalankan sebagai pengguna pemiliknya (umumnyaroot
)sgid
adalah 2; biner dengan bit set ini dijalankan sebagai grup pemiliknya (ini digunakan untuk game sehingga skor tinggi dapat dibagikan, tetapi sering kali risiko keamanan saat dikombinasikan dengan kerentanan dalam game), dan file yang dibuat dalam direktori dengan bit ini milik grup pemilik direktori secara default (ini berguna untuk membuat folder bersama)root
(lihat/tmp
untuk contoh umum ini).Lihat halaman
chmod
manual untuk detailnya. Perhatikan bahwa dalam semua ini saya mengabaikan fitur keamanan lain yang dapat mengubah izin pengguna pada file (SELinux, file ACL ...).Bit khusus ditangani secara berbeda tergantung pada jenis file (file biasa atau direktori) dan sistem yang mendasarinya. (Ini disebutkan di halaman
chmod
manual.) Pada sistem yang saya gunakan untuk menguji ini (dengancoreutils
8.23 pada sistemext4
file, menjalankan kernel Linux 3.16.7-ckt2), perilaku adalah sebagai berikut. Untuk file, bit khusus selalu dihapus kecuali ditetapkan secara eksplisit, sehinggachmod 0777
setara denganchmod 777
, dan kedua perintah menghapus bit khusus dan memberikan semua orang izin penuh pada file. Untuk direktori, bit khusus tidak pernah sepenuhnya dihapus menggunakan bentuk angka empat digit, sehingga berlakuchmod 0777
juga setara denganchmod 777
tapi itu menyesatkan karena beberapa bit khusus akan tetap apa adanya. (Versi sebelumnya dari jawaban ini salah.) Untuk menghapus bit khusus pada direktori yang perlu Anda gunakanu-s
,g-s
dan / atauo-t
secara eksplisit atau tentukan nilai numerik negatif, makachmod -7000
akan menghapus semua bit khusus pada direktori.Dalam
ls -l
output,suid
,sgid
dan “lengket” muncul di tempatx
masuknya:suid
adalahs
atauS
bukan penggunax
,sgid
adalahs
atauS
bukan kelompokx
, dan “lengket” adalaht
atauT
bukan orang lainx
. Huruf kecil menunjukkan bahwa bit khusus dan bit yang dapat dieksekusi ditetapkan; huruf besar menunjukkan bahwa hanya bit khusus yang disetel.Berbagai bentuk chmod
Karena perilaku yang dijelaskan di atas, menggunakan empat digit penuh
chmod
dapat membingungkan (setidaknya ternyata saya bingung). Ini berguna ketika Anda ingin mengatur bit khusus serta bit izin; selain itu bit dihapus jika Anda memanipulasi file, dipertahankan jika Anda memanipulasi direktori. Jadichmod 2750
pastikan Anda akan mendapatkan setidaknyasgid
dan tepatu=rwx,g=rx,o=
; tetapichmod 0750
tidak akan menghapus bit khusus.Menggunakan mode numerik alih-alih perintah teks (
[ugo][=+-][rwxXst]
) mungkin lebih merupakan kebiasaan dan tujuan dari perintah. Setelah Anda terbiasa menggunakan mode numerik, seringkali lebih mudah untuk hanya menentukan mode penuh seperti itu; dan itu berguna untuk dapat memikirkan izin menggunakan mode numerik, karena banyak perintah lain dapat menggunakannya (install
,mknod
...).Beberapa varian teks bisa berguna: jika Anda hanya ingin memastikan file dapat dieksekusi oleh siapa pun,
chmod a+x
akan melakukannya, terlepas dari apa pun izin lainnya. Demikian juga,+X
menambahkan izin eksekusi hanya jika salah satu izin eksekusi sudah ditetapkan atau file tersebut adalah direktori; ini berguna untuk mengembalikan izin secara global tanpa harus ke file kasus khusus v. direktori. Dengan demikian,chmod -R ug=rX,u+w,o=
sama dengan menerapkanchmod -R 750
ke semua direktori dan file yang dapat dieksekusi danchmod -R 640
ke semua file lainnya.sumber
sgid
bit mereka selalu ditetapkan, terlepas dari nilai aktualnya. Pada FreeBSDsuid
bit dapat dikonfigurasi untuk bertindak secara analogsgid
(yaitu file dan subdirektori yang dibuat di dalamnya akan memiliki pemilik yang sama dengan direktori), asalkan filesystem yang mendasari mendukung itu, dan sudah terpasang dengansuiddir
opsi.+X
menambahkan izin eksekusi hanya jika salah satu izin eksekusi sudah disetel atau file tersebut adalah direktori" terima kasih @ stephen-kitt melewatkan dokumentasi "sudah disetel" benar-benar membuat saya loop!Jadi, izin di Linux sangat penting. Saya akan mencoba membuat penjelasan singkat.
Untuk potongan-potongan mode file
Setiap file Unix memiliki serangkaian izin yang menentukan apakah Anda dapat membaca, menulis, atau menjalankan file. Menjalankan ls-l menampilkan izin. Berikut ini contoh tampilan seperti itu:
Saya melampirkan gambar potongan-potongan mode file:
Jenisnya bisa berbeda. Sebagai contoh:
Jika Anda ingin menetapkan beberapa izin untuk semua direktori Anda dapat menggunakan atribut R, misalnya:
Untuk chmod 777 vs 0777
The
chmod
Perintah biasanya mengharapkan masukan untuk menjadi bilangan oktal, terkemuka nol mengacu pada nilai lengket / SGID / suid bit triplet. Namun dalam C, itu akan membuat perbedaan, karena777
akan diterjemahkan ke01411
(oktal), sehingga menetapkan bit sticky (lihatchmod(2)
halaman manual), membaca izin untuk pemilik dan bit yang dapat dieksekusi untuk grup dan lainnya (yang merupakan kombinasi yang agak aneh) .EDIT 1
Saya menemukan gambar lain tentang izin Linux dan saya akan melampirkan untuk memahami lebih mudah:
sumber
chmod(777)
akan sama dengan menjalankanchmod 1411
(yaituchmod
perintah dengan argumen1411
).0x1FF
, biner:0b111111111
atau oktal:0o777
. PYTHON POWERd
berarti itu adalah direktori, jika Anda memiliki file itu-
dan jika itu adalah tautan Anda akan menemukanl
. Tidak dapat diatur / tidak disetel.Jika Anda menggunakan 0777 sebagai izin, Anda memberikan kontrol penuh (baca + tulis + eksekusi) untuk setiap pengguna / grup sistem. Ini adalah cara malas untuk menyelesaikan masalah ketika Anda memiliki pengguna / grup yang tidak dapat mengakses direktori / file.
Misalnya, jika Anda mencantumkan konten direktori dan mendapatkan ini:
-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so
preloadable_libintl.so adalah file yang dimiliki oleh root pengguna dan root grup. The pemilik telah membaca dan menulis akses, kelompok hanya akses baca dan setiap pengguna lain telah membaca akses. Ini dapat diterjemahkan sebagai 644.
Jika saya mengubahnya ke 777 akan terlihat seperti ini:
-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so
sumber
Setelah menjawab pertanyaan saya di sini dan melakukan penelitian tentang hasilnya saya menemukan sebuah artikel yang menjelaskan semuanya dengan sangat baik. Saya ingin membagikan beberapa bagian dari artikel ini di sini untuk referensi di masa mendatang.
Melihat izin
Agar dapat digunakan
chmod
untuk mengubah izin file atau direktori, Anda harus terlebih dahulu tahu apa mode akses saat ini. Anda dapat melihat konten direktori di terminal dengancd
ke direktori itu dan kemudian menggunakan:The
-l
switch penting karena menggunakanls
tanpa itu hanya akan menampilkan nama file atau folder dalam direktori.Di bawah ini adalah contoh penggunaan
ls -l
pada direktori home saya:Apa artinya kolom
Kolom pertama adalah jenis setiap file:
-
menunjukkan file normal.d
menunjukkan direktori, yaitu folder yang berisi file atau folder lain.p
menunjukkan pipa bernama (alias FIFO).l
menunjukkan tautan simbolik.Surat-surat setelah itu adalah izin, kolom pertama ini adalah yang paling menarik bagi kami. Yang kedua adalah berapa banyak tautan yang ada dalam suatu file, kita dapat mengabaikannya dengan aman. Kolom ketiga memiliki dua nilai / nama: Yang pertama (dalam contoh saya 'peter') adalah nama pengguna yang memiliki file. Nilai kedua ('pengguna' dalam contoh) adalah grup yang menjadi pemiliknya (Baca lebih lanjut tentang grup).
Kolom berikutnya adalah ukuran file atau direktori dalam byte dan informasi setelah itu adalah tanggal dan waktu file atau direktori terakhir dimodifikasi, dan tentu saja nama file atau direktori.
Apa yang dimaksud dengan izin
Tiga huruf pertama, setelah yang pertama
-
ataud
, adalah izin yang dimiliki pemilik. Tiga huruf berikutnya adalah izin yang berlaku untuk grup. Tiga huruf terakhir adalah izin yang berlaku untuk semua orang.Setiap set terdiri dari tiga huruf terdiri dari
r
w
danx
.r
selalu di posisi pertama,w
selalu di posisi kedua, danx
selalu di posisi ketiga.r
adalah izin baca,w
adalah izin tulis, danx
merupakan izin eksekusi. Jika ada tanda hubung (-
) di tempat salah satu dari surat-surat ini itu berarti izin tidak diberikan, dan jika surat itu hadir maka itu diberikan.Folder
Dalam kasus folder bit mode dapat diartikan sebagai berikut:
r
(Baca) singkatan dari kemampuan untuk membaca daftar isi direktori yang diberikan,w
(write) adalah kemampuan untuk menulis daftar isi direktori yang diberikan (membuat file baru, folder; mengganti nama, menghapus file yang ada, folder) jika dan hanya jika bit eksekusi diatur. Kalau tidak, izin ini tidak ada artinya.x
(Eksekusi) singkatan dari kemampuan untuk memasuki direktori yang diberikan dengan perintah cd dan mengakses file, folder di direktori itu.Mengubah izin menggunakan perintah chmod
chmod
adalah perintah di Linux dan sistem operasi mirip Unix lainnya. Ini memungkinkan Anda untuk mengubah izin (atau mode akses) file atau direktori.Anda dapat mengubah izin dengan dua cara berbeda: - Berbasis teks - Berbasis
chmod
nomorchmod
Metode teks
Untuk mengubah izin-atau mode akses file, kami menggunakan perintah chmod di terminal. Di bawah ini adalah struktur umum perintah:
Di mana Siapa saja dari berbagai surat, dan masing-masing menandakan siapa Anda akan memberikan izin untuk. Mereka adalah sebagai berikut:
Hak akses yang sama seperti yang sudah dibahas (
r
,w
, danx
).Perintah chmod memungkinkan kita menambah dan mengurangi izin dari set yang ada menggunakan + atau - alih-alih =. Hal ini berbeda dengan perintah di atas, yang pada dasarnya menulis ulang izin (yaitu untuk mengubah izin dari
r--
kerw-
, Anda masih perlu menyertakanr
sertaw
setelah=
dichmod
perintah. Jika Anda melewatkan keluarr
, itu akan menghilangkanr
izin sebagai mereka sedang ditulis ulang dengan tanda =. Menggunakan + dan - hindari ini dengan menambahkan atau menghapus set izin saat ini).Metode angka
chmod
juga dapat mengatur izin menggunakan angka.Menggunakan angka adalah metode lain yang memungkinkan Anda untuk mengedit izin untuk ketiga pemilik, grup, dan lainnya secara bersamaan. Struktur dasar kode ini adalah ini:
Di mana xxx adalah angka 3 digit di mana setiap digit dapat berupa apa saja dari 1 hingga 7. Digit pertama berlaku untuk izin untuk pemilik, digit kedua berlaku untuk izin untuk grup, dan digit ketiga berlaku untuk izin untuk semua lainnya.
Dalam notasi angka ini, nilai r, w, dan x memiliki nilai angka sendiri:
Untuk menghasilkan angka tiga digit, Anda perlu mempertimbangkan izin apa yang Anda inginkan untuk dimiliki oleh pemilik, grup, dan pengguna, lalu total nilainya. Sebagai contoh, katakanlah saya ingin memberikan izin kepada pemilik direktori baca-tulis dan eksekusi, dan saya ingin mengelompokkan dan semua orang untuk baru saja membaca dan mengeksekusi izin. Saya akan datang dengan nilai numerik seperti:
Ini sama dengan menggunakan yang berikut ini:
Sebagian besar folder / direktori diatur ke 755 untuk memungkinkan membaca dan menulis dan mengeksekusi kepada pemilik, tetapi menolak menulis kepada semua orang, dan file biasanya 644 untuk memungkinkan membaca dan menulis untuk pemilik tetapi hanya membaca untuk semua orang, merujuk ke yang terakhir perhatikan kurangnya izin x dengan file yang tidak dapat dieksekusi - ini adalah kesepakatan yang sama di sini.
sumber
Untuk pertanyaan d
Ini memberitahu Anda jenis file Unix. Secara default Unix hanya memiliki 3 jenis file. Mereka:
-
- File biasad
- File direktorib
- Blokir filec
- File perangkat karakterp
- File pipa Bernama atau hanya file pipal
- File tautan simboliks
- File soketBaca lebih lanjut di sini: Jenis file di Linux / Unix dijelaskan secara rinci
0777
vs.777
Sticky bit ditentukan atau tidak. Ketika bit sticky direktori diatur, sistem file memperlakukan file dalam direktori tersebut dengan cara khusus sehingga hanya pemilik file, pemilik direktori, atau pengguna root yang dapat mengganti nama atau menghapus file. Tanpa bit sticky yang ditetapkan, setiap pengguna dengan menulis dan mengeksekusi izin untuk direktori dapat mengubah nama atau menghapus file yang terkandung, terlepas dari pemilik file.
0777
menetapkan izin file 777, dan bit lengket ke 0 - tidak ada mode khusus.777
sedang mengatur 777 izin file, tanpa mengubah bit sticky.Baca lebih lanjut: bit lengket dan chmod
sumber
chmod 777
tidak menghapus bit setuid, setgid dan sticky? Cobalah.