GNU/Linux >> Belajar Linux >  >> Linux

Memahami izin UNIX dan tipe file

Saya akan menjawab pertanyaan Anda dalam tiga bagian:jenis file, izin, dan kasus penggunaan untuk berbagai bentuk chmod .

Jenis file

Karakter pertama di ls -l output mewakili jenis file; d berarti itu adalah direktori. Itu tidak dapat disetel atau tidak disetel, itu tergantung pada bagaimana file itu dibuat. Anda dapat menemukan daftar lengkap jenis file di ls dokumentasi; yang mungkin Anda temui adalah

  • - :file “biasa”, dibuat dengan program apa pun yang dapat menulis file
  • b :memblokir file khusus, biasanya perangkat disk atau partisi, dapat dibuat dengan mknod
  • c :file khusus karakter, juga dapat dibuat dengan mknod (lihat /dev untuk contoh)
  • d :direktori, dapat dibuat dengan mkdir
  • l :tautan simbolis, dapat dibuat dengan ln -s
  • p :bernama pipa, dapat dibuat dengan mkfifo
  • s :socket, dapat dibuat dengan nc -U
  • D :door, dibuat oleh beberapa proses server di Solaris/openindiana.

Izin

chmod 0777 digunakan untuk mengatur semua izin dalam satu chmod eksekusi, daripada menggabungkan perubahan dengan u+ dll. Masing-masing dari empat digit adalah nilai oktal yang mewakili sekumpulan izin:

  • suid , sgid dan “lengket” (lihat di bawah)
  • izin pengguna
  • izin grup
  • izin “lainnya”

Nilai oktal dihitung sebagai jumlah izin:

  • "baca" adalah 4
  • “tulis” adalah 2
  • "eksekusi" adalah 1

Untuk digit pertama:

  • suid adalah 4; binari dengan set bit ini dijalankan sebagai pengguna pemiliknya (biasanya root )
  • sgid adalah 2; binari dengan set bit ini dijalankan sebagai grup pemiliknya (ini digunakan untuk game sehingga skor tinggi dapat dibagikan, tetapi seringkali merupakan risiko keamanan bila digabungkan dengan kerentanan dalam game), dan file yang dibuat di direktori dengan set bit ini adalah milik grup pemilik direktori secara default (ini berguna untuk membuat folder bersama)
  • "lengket" (atau "penghapusan terbatas") adalah 1; file dalam direktori dengan kumpulan bit ini hanya dapat dihapus oleh pemiliknya, pemilik direktori, atau root (lihat /tmp untuk contoh umum dari ini).

Lihat chmod halaman manual untuk rincian. Perhatikan bahwa selama ini saya mengabaikan fitur keamanan lain yang dapat mengubah izin pengguna pada file (SELinux, ACL file...).

Bit khusus ditangani secara berbeda tergantung pada jenis file (file biasa atau direktori) dan sistem yang mendasarinya. (Ini disebutkan dalam chmod halaman manual.) Pada sistem yang saya gunakan untuk menguji ini (dengan coreutils 8.23 pada ext4 filesystem, menjalankan kernel Linux 3.16.7-ckt2), perilakunya adalah sebagai berikut. Untuk file, bit khusus selalu dihapus kecuali diatur secara eksplisit, jadi chmod 0777 setara dengan chmod 777 , dan kedua perintah menghapus bit khusus dan memberikan izin penuh kepada semua orang pada file tersebut. Untuk direktori, bit khusus tidak pernah sepenuhnya dihapus menggunakan bentuk angka empat digit, sehingga berlaku chmod 0777 juga setara dengan chmod 777 tetapi itu menyesatkan karena beberapa bit khusus akan tetap apa adanya. (Versi sebelumnya dari jawaban ini salah.) Untuk menghapus bit khusus pada direktori, Anda perlu menggunakan u-s , g-s dan/atau o-t secara eksplisit atau tentukan nilai numerik negatif, jadi chmod -7000 akan menghapus semua bit khusus pada direktori.

Di ls -l keluaran, suid , sgid dan “sticky” muncul sebagai pengganti x entri:suid adalah s atau S bukan x pengguna , sgid adalah s atau S bukan x grup , dan "lengket" adalah t atau T bukan x milik orang lain . Huruf kecil menunjukkan bahwa bit khusus dan bit yang dapat dieksekusi telah disetel; huruf besar menunjukkan bahwa hanya bit khusus yang disetel.

Berbagai bentuk chmod

Karena perilaku yang dijelaskan di atas, gunakan empat digit penuh di chmod bisa membingungkan (setidaknya ternyata saya bingung). Ini berguna saat Anda ingin menyetel bit khusus dan juga bit izin; jika tidak, bit dihapus jika Anda memanipulasi file, dipertahankan jika Anda memanipulasi direktori. Jadi chmod 2750 memastikan Anda mendapatkan setidaknya sgid dan tepatnya u=rwx,g=rx,o=; tapi chmod 0750 belum tentu menghapus bit khusus.

Menggunakan mode numerik alih-alih perintah teks ([ugo][=+-][rwxXst] ) mungkin lebih merupakan kasus kebiasaan dan tujuan dari perintah. Setelah Anda terbiasa menggunakan mode numerik, seringkali lebih mudah untuk hanya menentukan mode lengkap seperti itu; dan sangat berguna untuk dapat memikirkan izin menggunakan mode numerik, karena banyak perintah lain yang dapat menggunakannya (install , mknod ...).

Beberapa varian teks dapat berguna:jika Anda hanya ingin memastikan file dapat dijalankan oleh siapa saja, chmod a+x akan melakukan itu, terlepas dari izin lainnya. Demikian juga, +X menambahkan izin eksekusi hanya jika salah satu izin eksekusi sudah ditetapkan atau file tersebut adalah direktori; ini berguna untuk memulihkan izin secara global tanpa harus file kasus khusus v. direktori. Jadi, chmod -R ug=rX,u+w,o= sama dengan menerapkan chmod -R 750 ke semua direktori dan file yang dapat dieksekusi dan chmod -R 640 ke semua file lainnya.


Jadi, izin di Linux sangat penting. Saya akan mencoba membuat penjelasan singkat.

Untuk potongan mode file

Setiap file Unix memiliki sekumpulan izin yang menentukan apakah Anda dapat membaca, menulis, atau menjalankan file tersebut. Runningls -l menampilkan izin. Berikut ini contoh tampilan seperti itu:

-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile

Saya lampirkan gambar potongan file mode:

Jenis bisa jadi hal yang berbeda. Misalnya:

  • d (direktori)
  • c (perangkat karakter)
  • l (symlink)
  • p (bernama pipa)
  • s (soket)
  • b (blokir perangkat)
  • D (pintu, tidak umum pada sistem Linux, tetapi telah di-porting)

Jika Anda ingin menetapkan beberapa izin untuk semua direktori, Anda dapat menggunakan atribut R, misalnya:

chmod -R 777 /some/directory/

Untuk chmod 777 vs 0777

chmod perintah biasanya mengharapkan input menjadi angka oktal, nol di depan mengacu pada nilai triplet sticky/sgid/suid bit. Namun di C, itu akan membuat perbedaan, karena 777 akan diterjemahkan ke 01411 (oktal), sehingga menyetel sticky bit (lihat chmod(2) halaman manual), izin baca 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 melampirkannya agar lebih mudah dipahami:


d berarti itu adalah sebuah direktori, jika Anda memiliki file itu adalah - dan jika itu adalah tautan, Anda akan menemukan l . Itu tidak dapat disetel/tidak disetel.

Jika Anda menggunakan 0777 sebagai izin, Anda memberikan kontrol penuh (baca+tulis+eksekusi) kepada setiap pengguna/grup sistem. Ini adalah cara malas untuk menyelesaikan masalah saat 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. pemilik memiliki akses baca dan tulis, grup hanya memiliki akses baca dan pengguna lain memiliki akses baca. Ini dapat diterjemahkan sebagai 644.

Jika saya ubah ke 777 akan terlihat seperti ini:

-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so


Linux
  1. Tabel Izin untuk Jenis Pengguna File/Direktori Dan Sistem File

  2. Bagaimana cara menghapus setgid (linux/unix)?

  3. Bagaimana izin file berlaku untuk symlink?

  1. Linux – Memahami Izin Unix Dan Jenis File?

  2. Diutamakan Pengguna Dan Pemilik Grup Dalam Izin File?

  3. Izin File Dan Menyimpan?

  1. Izin Linux:Pengantar chmod

  2. Linux chmod and chown – Cara Mengubah Izin dan Kepemilikan File di Linux

  3. UNIX / Linux:Panduan Pemula untuk Izin File dan Direktori ( umask, chmod, baca, tulis, jalankan)