Izin mana yang memengaruhi pembuatan tautan keras? Apakah kepemilikan file itu sendiri penting?
Misalkan pengguna alice
ingin membuat tautan keras ke file target.txt
dalam direktori target-dir
.
- Izin mana yang
alice
dibutuhkan untuk keduanyatarget.txt
dantarget-dir
? - Jika
target.txt
dimiliki oleh penggunabill
dantarget-dir
dimiliki oleh penggunachad
, apakah itu mengubah apa pun?
Saya telah mencoba mensimulasikan situasi ini dengan membuat folder / struktur file berikut dalam ext4
sistem file:
#> ls -lh . *
.:
drwxr-xr-x 2 bill bill 60 Oct 1 11:29 source-dir
drwxrwxrwx 2 chad chad 60 Oct 1 11:40 target-dir
source-dir:
-r--r--r-- 1 bill bill 0 Oct 1 11:29 target.txt
target-dir:
-rw-rw-r-- 1 alice alice 0 Oct 1 11:40 dummy
Meskipun alice
dapat membuat tautan lunak ke target.txt
, ia tidak dapat membuat tautan keras:
#> ln source-dir/target.txt target-dir/
ln: failed to create hard link ‘target-dir/target.txt’ => ‘source-dir/target.txt’: Operation not permitted
Jika alice
memiliki target.txt
dan tidak ada izin yang diubah, hard-link berhasil. Apa yang kulewatkan di sini?
linux
permissions
hard-link
gcscaglia
sumber
sumber
target.txt
dantarget-dir
izinnya, kecuali sayasudo
sebagai root.alice
Saya dapat mengakses file asli dan hard-link untuk itu (dibuat dengansudo
), tetapi saya tidak dapat membuat tautan sebagai penggunaalice
meskipun kita semua menyetujui izin ini sudah cukup untuk itu.Jawaban:
Untuk membuat hard-link
alice
akan membutuhkanwrite+execute
izintarget-dir
pada semua kasus. Izin yang diperlukantarget.txt
akan bervariasi:fs.protected_hardlinks = 1
demikianalice
perlu kepemilikantarget.txt
atau setidaknyaread+write
izin di atasnya.fs.protected_hardlinks = 0
kemudian, serangkaian izin akan dilakukan; Bahkan 000 tidak apa-apa.Jawaban untuk pertanyaan serupa ini memiliki informasi yang hilang untuk menjawab pertanyaan ini.
Dari http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1 [penekanan tambang]:
sumber
alice
membutuhkan setidaknya membaca izintarget.txt
dan menulis + menjalankan izin padatarget-dir
.Sekarang, struktur izin berfungsi sebagai set terpisah tiga kali lipat:
Oleh karena itu, pertanyaan kepemilikan hanya memengaruhi serangkaian izin yang diperlukan untuk
alice
itu, yaitu:alice
adalah pengguna pemilik, izin yang diperlukan harus di bagian "pengguna".alice
merupakan bagian dari grup yang memilikinya, izin yang diperlukan harus berada di bagian "grup".alice
tidak memilikinya dan bukan bagian dari grup yang memilikinya, izin yang diperlukan harus ada di bagian "lain".sumber
target.txt
memiliki 444 izin dantarget-dir
memiliki 777 izin namun saya tidak dapat membuat tautan keras kecuali saya melakukannya sebagai root atau saya memiliki file yang saya tautkan. Anehnya, tautan lunak akan berfungsi seperti yang Anda jelaskan.