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?

gcscaglia
sumber
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 .

gcscaglia
sumber
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".
dave_alcarin
sumber
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