Saya mendapatkan kesalahan izin di CentOS 7 ketika saya mencoba membuat tautan keras. Dengan izin yang sama yang diatur dalam CentOS 6 saya tidak mendapatkan kesalahan. Masalahnya berpusat pada izin grup. Saya tidak yakin versi OS mana yang benar dan mana yang salah.
Biarkan saya menggambarkan apa yang terjadi. Dalam direktori kerja saya saat ini, saya memiliki dua direktori: sumber dan tujuan. Pada awalnya, tujuan kosong; sumber berisi file teks.
[root@tc-dlx-nba cwd]# ls -l
total 0
drwxrwxrwx. 2 root root 6 Jun 12 14:33 destination
drwxrwxrwx. 2 root root 21 Jun 12 14:33 source
[root@tc-dlx-nba cwd]# ls -l destination/
total 0
[root@tc-dlx-nba cwd]# ls -l source/
total 4
-rw-r--r--. 1 root root 8 Jun 12 14:20 test.txt
[root@tc-dlx-nba cwd]#
Seperti yang Anda lihat, mengenai izin kedua direktori tersebut adalah 777, dengan pemilik dan grupnya disetel ke root. Pemilik dan grup file teks juga diatur ke root. Namun, izin file teks adalah baca-tulis untuk pemilik tetapi hanya-baca untuk grup.
Ketika saya login sebagai root, saya tidak punya masalah membuat hard-link di direktori tujuan yang menunjuk ke file teks (di direktori sumber).
[root@tc-dlx-nba cwd]# ln source/test.txt destination/
[root@tc-dlx-nba cwd]# ls destination/
test.txt
Namun, jika saya masuk sebagai pengguna lain, dalam hal ini admin, saya tidak dapat membuat tautan. Saya mendapatkan: "Operasi tidak diizinkan."
[root@tc-dlx-nba cwd]# rm -f destination/test.txt
[root@tc-dlx-nba cwd]# su admin
bash-4.2$ pwd
/root/cwd
bash-4.2$ ln source/test.txt destination/
ln: failed to create hard link ‘destination/test.txt’ => ‘source/test.txt’: Operation not permitted
Apa yang terjadi sebenarnya masuk akal bagi saya, tetapi karena hal di atas diperbolehkan dalam CentOS 6, saya ingin memeriksa untuk melihat apakah saya salah memahami sesuatu. Bagi saya, sepertinya ada bug di CentOS 6 yang telah diperbaiki di CentOS 7.
Adakah yang tahu apa yang terjadi? Apakah saya benar percaya bahwa perilaku di atas adalah perilaku yang benar? Apakah CentOS 6 yang benar? Atau, apakah keduanya benar dan mungkin ada beberapa masalah izin grup halus yang saya lewatkan? Terima kasih.
Sunting: Saya mencoba tes yang sama sekarang pada Debian v7 VM yang saya miliki. Debian setuju dengan CentOS 7: "Operasi tidak diizinkan."
Sunting # 2: Saya baru saja mencoba hal yang sama pada Mac OS X (Yosemite). Itu bekerja seperti yang dilakukan CentOS 6. Dengan kata lain, itu memungkinkan tautan dibuat. (Catatan: Pada OS X, grup root disebut "roda." Itulah satu-satunya perbedaan, sejauh yang saya tahu.)
sumber
Jawaban:
Saya memutar beberapa CentOS 6 dan 7 vm baru dan mampu menciptakan kembali perilaku yang Anda tunjukkan. Setelah melakukan beberapa penggalian, ternyata ini sebenarnya adalah perubahan dalam kernel tentang perilaku default sehubungan dengan tautan keras dan lunak demi keamanan. Halaman-halaman berikut mengarahkan saya ke arah yang benar:
http://kernel.opensuse.org/cgit/kernel/commit/?id=561ec64ae67ef25cac8d72bb9c4bfc955edfd415
http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1
Jika Anda membuat dunia file dapat ditulis, pengguna admin Anda akan dapat membuat tautan keras.
Untuk kembali ke perilaku lebar sistem CentOS 6, parameter kernel baru ditambahkan. Tetapkan yang berikut ini di /etc/sysctl.conf:
lalu lari
Adapun mengapa program Anda memilih untuk menggunakan tautan daripada menyalin file, mengapa membuat salinan persis file yang perlu Anda gunakan ketika Anda bisa membuat entri yang mengarah ke blok asli? Ini menghemat ruang disk dan operasi lebih murah dalam hal CPU dan I / O. Hard link baru adalah file yang sama, hanya dengan metadata / inode yang berbeda. Jika Anda menghapus file asli setelah membuat tautan keras, itu tidak akan memengaruhi tautan. File hanya 'dihapus' setelah semua tautan dihapus.
sumber