GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana izin file berlaku untuk symlink?

Itu tergantung pada bagaimana Anda memanggil chmod dan platform tempat Anda menjalankan.

Misalnya, pada sistem Linux, man chmod mengatakan ini:

chmod tidak pernah mengubah izin tautan simbolik; chmod panggilan sistem tidak dapat mengubah izinnya. Ini bukan masalah karena izin tautan simbolik tidak pernah digunakan. Namun, untuk setiap tautan simbolis yang tercantum pada baris perintah, chmod mengubah izin file yang diarahkan ke. Sebaliknya, chmod abaikan tautan simbolis yang ditemukan selama penjelajahan direktori rekursif.

Namun, pada Mac, chmod dapat digunakan untuk mengubah izin tautan simbolis menggunakan opsi seperti ini (dari man chmod ):

-h Jika file tersebut adalah tautan simbolik, ubah mode tautan itu sendiri daripada file yang ditunjuk oleh tautan tersebut.

Demi contoh, anggap saja Anda menggunakan mesin Linux untuk sisa jawaban ini.

Jika dalam kasus pertama Anda menjalankan chmod -R 777 directory untuk mengubah izin secara rekursif, target tautan tidak akan terpengaruh, tetapi jika Anda melakukan chmod 777 directory/* , itu akan.

Jika Anda mengubah izin pada target tautan secara langsung, izin tersebut akan diteruskan (karena seperti yang dikatakan halaman manual dan baraboom, izin tautan yang sebenarnya tidak digunakan untuk apa pun).

Log uji untuk ilustrasi:

$ mkdir dir && touch dir/file{1,2} /tmp/file3 && ln -s {/tmp,dir}/file3
$ ls -l dir/* /tmp/file3
-rw-r--r-- 1 user group  0 2011-06-27 22:02 /tmp/file3
-rw-r--r-- 1 user group  0 2011-06-27 22:02 dir/file1
-rw-r--r-- 1 user group  0 2011-06-27 22:02 dir/file2
lrwxrwxrwx 1 user group 10 2011-06-27 22:02 dir/file3 -> /tmp/file3

$ chmod -R 777 dir && ls -l dir/* /tmp/file3
-rw-r--r-- 1 user group  0 2011-06-27 22:02 /tmp/file3
-rwxrwxrwx 1 user group  0 2011-06-27 22:02 dir/file1
-rwxrwxrwx 1 user group  0 2011-06-27 22:02 dir/file2
lrwxrwxrwx 1 user group 10 2011-06-27 22:02 dir/file3 -> /tmp/file3

$ chmod 700 dir/* && ls -l dir/* /tmp/file3
-rwx------ 1 user group  0 2011-06-27 22:02 /tmp/file3
-rwx------ 1 user group  0 2011-06-27 22:02 dir/file1
-rwx------ 1 user group  0 2011-06-27 22:02 dir/file2
lrwxrwxrwx 1 user group 10 2011-06-27 22:02 dir/file3 -> /tmp/file3

jawaban baraboom dan peth keduanya benar:Bit izin pada tautan simbolik itu sendiri tidak relevan (kecuali pada macOS; lihat di bawah), dan mengubah izin pada tautan simbolik – dengan chmod alat baris perintah atau dengan chmod() panggilan sistem – hanya akan bertindak seolah-olah dilakukan terhadap target tautan simbolik.

Mengutip deskripsi panggilan sistem symlink() SUSv4/POSIX.1-2008:

Nilai bit mode file untuk tautan simbolik yang dibuat tidak ditentukan. Semua antarmuka yang ditentukan oleh POSIX.1-2008 akan berperilaku seolah-olah konten tautan simbolik selalu dapat dibaca, kecuali nilai bit mode file yang dikembalikan dalam st_mode bidang stat struktur tidak ditentukan.

Di sini, "tidak ditentukan" menyisakan ruang interpretasi untuk setiap implementasi. Spesifik:

  • Di Linux (diuji menggunakan ext4fs), stat() mengembalikan st_mode=0777 , apa pun umasknya saat symlink dibuat; ls -l oleh karena itu selalu tampilkan lrwxrwxrwx untuk tautan simbolik.
  • Di macOS (HFS) dan FreeBSD (baik UFS maupun ZFS), tautan simbolik memang memiliki izinnya sendiri:chmod -h perintah yang disebutkan di atas dapat mengubah izin tautan ini (yang secara internal menggunakan lchown() non-POSIX panggilan sistem untuk mencapai ini), dan stat() panggilan sistem mengembalikan nilai ini untuk st_mode .

Tautan simbolik di Linux dan FreeBSD selalu dapat diikuti, seperti yang ditentukan oleh POSIX. Secara khusus, pada FreeBSD, ini berarti mode file dari tautan simbolik tidak berpengaruh sama sekali pada kontrol akses.

Di sisi lain, macOS sedikit merusak POSIX. Meskipun tautan simbolis dapat diikuti terlepas dari izin bacanya, readlink() gagal dengan EACCES (Izin ditolak) jika pengguna tidak memiliki izin membaca:

$ sudo ln -shf target symlink
$ sudo chmod -h 444 symlink
$ ls -l symlink
lr--r--r--  1 root  staff  1 Mar 14 13:05 symlink -> target
$ sudo chmod -h 000 symlink
$ ls -l symlink

ls: symlink: Permission denied
l---------  1 root  staff  1 Mar 14 13:05 symlink
$ echo kthxbye > target
$ cat symlink
kthxbye

(Perhatikan bahwa -> target bagian yang hilang dalam output dari ls -l kedua perintah, dan cat symlink itu masih berhasil dan mencetak isi dari target file meskipun pengguna tidak memiliki izin baca pada symlink .)

NetBSD rupanya menawarkan opsi pemasangan khusus bernama symperm yang, jika disetel, menyebabkan izin baca/eksekusi tautan simbolik untuk mengontrol readlink() dan link traversal.


Linux
  1. Izin Linux:Pengantar chmod

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

  3. Bagaimana Mengubah Izin File Pada Drive FAT32??

  1. Cara mengubah izin file di cPanel File Manager

  2. Bagaimana umask memengaruhi ACL?

  3. Memahami izin UNIX dan tipe file

  1. Cara Mengubah Izin File Secara Rekursif dengan chmod di Linux

  2. Bagaimana cara menggunakan chmod untuk mengubah izin file?

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