Katakanlah Anda memiliki struktur ini:
+ directory
-- file1
-- file2
-- file3 -> /tmp/file3
file3
adalah tautan ke file3
tempat lain di sistem.
Sekarang katakanlah saya chmod 777
direktori dan semua konten di dalamnya. Apakah saya file3
di /tmp
terima mereka izin? Juga, katakanlah kita memiliki situasi yang sama tetapi terbalik.
/tmp/file3 -> /directory/file3
Jika saya menerapkan izin pada file yang ditautkan, bagaimana hal itu memengaruhi tautan?
Jawaban:
Itu tergantung pada bagaimana Anda menelepon
chmod
dan platform yang Anda jalankan.Misalnya, pada sistem Linux,
man chmod
katakan ini:Namun, pada Mac, chmod dapat digunakan untuk mengubah izin tautan simbolik menggunakan opsi seperti ini (dari
man chmod
):Sebagai contoh, mari kita asumsikan Anda menggunakan mesin Linux untuk sisa jawaban ini.
Jika dalam kasus pertama Anda menjalankan
chmod -R 777 directory
secara berulang mengubah izin, target tautan tidak akan terpengaruh, tetapi jika Anda melakukannyachmod 777 directory/*
, itu akan terjadi.Jika Anda mengubah izin pada target tautan secara langsung, izin tersebut akan dijalankan (karena seperti yang dikatakan halaman manual dan baraboom , izin tautan yang sebenarnya tidak digunakan untuk apa pun).
Log uji untuk ilustrasi:
sumber
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 melaluichmod()
panggilan sistem - hanya akan bertindak sebagai jika itu dilakukan terhadap target tautan simbolik.Mengutip deskripsi SUSv4 / POSIX.1-2008 tentang panggilan sistem symlink () :
Di sini, "tidak ditentukan" menyisakan ruang interpretasi untuk setiap implementasi. Spesifik:
stat()
kembalist_mode=0777
, tidak peduli apa umask itu ketika symlink dibuat;ls -l
karena itu selalu ditampilkanlrwxrwxrwx
untuk tautan simbolik.chmod -h
Perintah yang disebutkan di atas dapat mengubah izin tautan ini (yang secara internal menggunakanlchown()
pemanggilan sistem non-POSIX untuk mencapai hal ini), danstat()
sistem panggilan mengembalikan nilai ini untukst_mode
.Tautan simbolik di Linux dan FreeBSD selalu dapat diikuti, seperti yang ditentukan oleh POSIX. Khususnya, pada FreeBSD, ini berarti bahwa mode file dari tautan simbolik sama sekali tidak berpengaruh pada kontrol akses.
Di sisi lain, macOS sedikit merusak POSIX. Meskipun tautan simbolis dapat diikuti tanpa izin baca,
readlink()
gagal denganEACCES
(Izin ditolak) jika pengguna tidak memiliki izin baca:(Perhatikan bahwa
-> target
bagian tersebut tidak ada dalam output darils -l
perintah kedua , dan itucat symlink
masih berhasil dan mencetak isitarget
file meskipun pengguna tidak memiliki izin bacasymlink
.)NetBSD rupanya menawarkan opsi pemasangan khusus
symperm
yang dinamai , yang jika disetel, menyebabkan tautan simbolik membaca / mengeksekusi izin untuk mengontrolreadlink()
dan menautkan traversal.sumber
sumber