Pembuatan tautan keras - Izin?


16

Izin mana yang memengaruhi pembuatan tautan keras? Apakah kepemilikan file itu sendiri penting?


Misalkan pengguna aliceingin membuat tautan keras ke file target.txtdalam direktori target-dir.

  • Izin mana yang alicedibutuhkan untuk keduanya target.txtdan target-dir?
  • Jika target.txtdimiliki oleh pengguna billdan target-dirdimiliki oleh pengguna chad, apakah itu mengubah apa pun?

Saya telah mencoba mensimulasikan situasi ini dengan membuat folder / struktur file berikut dalam ext4sistem 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 alicedapat 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 alicememiliki target.txtdan tidak ada izin yang diubah, hard-link berhasil. Apa yang kulewatkan di sini?


Apakah ini untuk tugas? Ini mungkin memengaruhi jenis jawaban yang akan dipilih beberapa orang untuk memberikan jawaban jika tidak (bukan karena di luar batas untuk mengajukan pertanyaan tentang penugasan tentu saja). Ngomong-ngomong, sudahkah Anda mencoba membuat skenario itu dan melihat apa yang terjadi?
Eric Renouf

Tidak, ini bukan untuk tugas. Saya menghadapi skenario yang tepat ini, dan memiliki beberapa tebakan, tetapi saya pikir akan lebih baik untuk bertanya dari sudut pandang teoritis. Dalam kasus saya, saya tidak dapat membuat tautan keras apa pun target.txtdan target-dirizinnya, kecuali saya sudosebagai root.
gcscaglia

Tautan keras memiliki kepemilikan dan izin yang sama, sehingga sama dengan mengakses file asli.
teppic

@teppic Kesulitan saya tidak mengakses hard-link yang dibuat, itu membuat hard-link karena. aliceSaya dapat mengakses file asli dan hard-link untuk itu (dibuat dengan sudo), tetapi saya tidak dapat membuat tautan sebagai pengguna alicemeskipun kita semua menyetujui izin ini sudah cukup untuk itu.
gcscaglia

Jawaban:


18

Untuk membuat hard-link aliceakan membutuhkan write+executeizin target-dirpada semua kasus. Izin yang diperlukan target.txtakan bervariasi:

  • Jika fs.protected_hardlinks = 1demikian aliceperlu kepemilikan target.txtatau setidaknya read+writeizin di atasnya.
  • Jika fs.protected_hardlinks = 0kemudian, 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]:

Hardlink:

Pada sistem yang memiliki direktori yang dapat ditulis pengguna pada partisi yang sama dengan file sistem, kelas lama masalah keamanan adalah ras waktu-of-check-waktu-penggunaan penggunaan berbasis hardlink, paling umum terlihat di direktori yang dapat ditulis oleh dunia suka / tmp. Metode umum eksploitasi cacat ini adalah dengan melintasi batas privilege ketika mengikuti hardlink yang diberikan (yaitu proses root mengikuti hardlink yang dibuat oleh pengguna lain). Selain itu, ada masalah di mana pengguna dapat "menyematkan" file setuid / setgid yang berpotensi rentan sehingga administrator tidak akan benar-benar memutakhirkan sistem sepenuhnya.

Solusinya adalah mengizinkan hardlink hanya dibuat ketika pengguna sudah menjadi pemilik file yang ada, atau jika mereka sudah memiliki akses baca / tulis ke file yang ada .


Terima kasih! Inilah yang saya perjuangkan selama satu hari di Debian 9!
Arda

Mengapa saya mendapatkan "operasi tidak diizinkan" bahkan ketika saya memiliki perm rwx di dir dan perm rw pada file?
Michael

1

alicemembutuhkan setidaknya membaca izin target.txtdan menulis + menjalankan izin pada target-dir.

Sekarang, struktur izin berfungsi sebagai set terpisah tiga kali lipat:

  1. Izin pengguna: berlaku untuk pengguna yang memiliki simpul.
  2. Izin grup: berlaku untuk pengguna yang termasuk dalam grup yang memiliki simpul.
  3. Izin orang lain: berlaku untuk pengguna / grup lain yang tidak memiliki node.

Oleh karena itu, pertanyaan kepemilikan hanya memengaruhi serangkaian izin yang diperlukan untuk aliceitu, yaitu:

  • Jika aliceadalah pengguna pemilik, izin yang diperlukan harus di bagian "pengguna".
  • Jika alicemerupakan bagian dari grup yang memilikinya, izin yang diperlukan harus berada di bagian "grup".
  • Jika alicetidak memilikinya dan bukan bagian dari grup yang memilikinya, izin yang diperlukan harus ada di bagian "lain".

Saya juga berpikir begitu. Tetapi dalam situasi saya target.txtmemiliki 444 izin dan target-dirmemiliki 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.
gcscaglia

Informasi itu akan berguna untuk dimiliki dalam pertanyaan itu sendiri, saya sarankan Anda untuk memperbarui. Anehnya saya tidak memikirkannya sebelumnya ... tetapi apakah sistem file tempat Anda bekerja mendukung kepemilikan / izin seperti Unix, untuk memulainya?
dave_alcarin

Ya, itu adalah ext4 out-of-the-box pada sistem fedora 21; Tautan berfungsi ketika saya adalah pemilik file.
gcscaglia
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.