Hành vi cấp phép liên kết cứng khác nhau giữa CentOS 6 và CentOS 7


8

Tôi đang gặp lỗi về quyền trong CentOS 7 khi tôi cố gắng tạo liên kết cứng. Với các quyền tương tự được đặt trong CentOS 6, tôi không gặp lỗi. Các vấn đề tập trung vào quyền của nhóm. Tôi không chắc phiên bản HĐH nào đúng và sai.

Hãy để tôi minh họa những gì đang xảy ra. Trong thư mục làm việc hiện tại của tôi, tôi có hai thư mục: nguồn và đích. Khi bắt đầu, đích đến trống rỗng; nguồn chứa một tệp văn bản.

[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]# 

Như bạn có thể thấy, liên quan đến các quyền, hai thư mục là 777, với cả chủ sở hữu và nhóm được đặt thành root. Chủ sở hữu và nhóm của tệp văn bản cũng được đặt thành root. Tuy nhiên, quyền của tệp văn bản là đọc-ghi cho chủ sở hữu nhưng chỉ đọc cho nhóm.

Khi tôi đăng nhập bằng root, tôi không gặp vấn đề gì khi tạo liên kết cứng trong thư mục đích trỏ đến tệp văn bản (trong thư mục nguồn).

[root@tc-dlx-nba cwd]# ln source/test.txt destination/
[root@tc-dlx-nba cwd]# ls destination/
test.txt

Tuy nhiên, nếu tôi đăng nhập với tư cách người dùng khác, trong trường hợp này là quản trị viên, tôi không thể tạo liên kết. Tôi nhận được: "Hoạt động không được phép."

[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

Điều gì xảy ra thực sự có ý nghĩa với tôi, nhưng vì những điều trên được cho phép trong CentOS 6, tôi muốn kiểm tra xem liệu tôi có đang hiểu nhầm điều gì không. Đối với tôi, nó có vẻ như là một lỗi trong CentOS 6 đã được sửa trong CentOS 7.

Bất cứ ai biết những gì cho? Tôi có đúng khi tin rằng hành vi trên là hành vi đúng? Có phải CentOS 6 là chính xác? Hoặc, cả hai đều đúng và có lẽ có một số vấn đề quyền nhóm tinh tế mà tôi đang thiếu? Cảm ơn.


Chỉnh sửa: Tôi đã thử cùng một bài kiểm tra trên máy ảo Debian v7 mà tôi có. Debian đồng ý với CentOS 7: "Hoạt động không được phép."


Chỉnh sửa # 2: Tôi vừa thử điều tương tự trên Mac OS X (Yosemite). Điều đó đã làm việc theo cách mà CentOS 6 đã làm. Nói cách khác, nó cho phép liên kết được tạo. (Lưu ý: Trên OS X, nhóm gốc được gọi là "bánh xe." Đó là sự khác biệt duy nhất, theo như tôi có thể nói.)


1
Có vẻ như quản trị viên người dùng không có quyền ảnh hưởng đến liên kết. Quyền sở hữu của liên kết thuộc về người sở hữu các tệp / thư mục được liên kết. Quản trị viên không giống như root. Đó là 2 xu của tôi. Khi quản trị viên thử sử dụng 'sudo ln source / test.txt Destination /' Bạn cũng có thể muốn bắt đầu sử dụng cờ -s. Khi bạn tạo một liên kết không có cờ -s, bạn đang tạo một liên kết cứng. Đây là một công thức cho thảm họa vì nếu tệp / thư mục được liên kết bị hủy, thì đó là bản gốc. Với -s 'liên kết mềm', việc hủy liên kết đến tệp không ảnh hưởng đến bản gốc.
Baazigar

@Baazigar - Cảm ơn. Tôi đã nhìn vào đó. Đây là vấn đề của tôi. Tôi đã kế thừa ứng dụng Perl dựa trên hành vi của CentOS 6 (có thể tạo liên kết). Tôi đang chuyển ứng dụng sang CentOS 7. Đây thực sự chỉ là một vấn đề nhỏ trong sơ đồ tổng thể của mọi thứ, nhưng tôi không biết tại sao chức năng liên kết Perl đang được sử dụng, thay vì chức năng Perl File :: Copy. Tôi nghĩ rằng chỉ cần sao chép các tập tin là đủ. Tuy nhiên, tôi phải thực hiện sự chuyên cần của mình trước khi thay đổi mọi thứ - và tất nhiên (không có tài liệu hay bình luận nào để giải thích quyết định ban đầu mà tôi được thừa hưởng.
Mario

Không có tài liệu hoặc biện minh cho hiện tại, giải pháp của bạn có giá trị như nhau khi cho rằng nó hoạt động và hợp lệ hơn nếu nó hoạt động và có tài liệu. Tôi không nghĩ rằng có một sự thay đổi trong việc xử lý centos của các liên kết. Tôi nghĩ nhiều khả năng là thứ gì đó bạn chưa gặp trên hộp cũ, có thể là thứ gì đó trong / etc / nhóm hoặc nơi nào khác giải thích sự bất thường rõ ràng.
Baazigar

@Baazigar - Tôi vừa thử điều tương tự trong Mac OS X, mặc dù tôi phải sử dụng nhóm "bánh xe" (nhóm của root) thay cho nhóm "root". Như bạn có thể biết, OS X là một biến thể BSD. Điều đó hoạt động giống như cách CentOS 6 hoạt động với cách nói khác, nó cho phép liên kết được thực hiện. Tôi không biết điều gì đúng, tại thời điểm này. Không nên có một thực tiễn thống nhất trên các hệ thống tuân thủ POSIX (hầu hết) là gì?
Mario

Câu trả lời:


5

Tôi đã tạo ra một số CentOS 6 và 7 vm mới và có thể tạo lại hành vi chính xác mà bạn đã thể hiện. Sau khi thực hiện một số hoạt động đào, hóa ra đây thực sự là một thay đổi trong kernel liên quan đến hành vi mặc định liên quan đến các liên kết cứng và mềm vì mục đích bảo mật. Các trang sau chỉ cho tôi đi đúng hướng:

http://kernel.opensuse.org/cgit/kernel/commit/?id=561ec64ae67ef25cac8d72bb9c4bfc955edfd415

http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1

Nếu bạn tạo thế giới tệp có thể ghi, người dùng quản trị viên của bạn sẽ có thể tạo liên kết cứng.

Để trở lại hoạt động của hệ thống CentOS 6, các tham số kernel mới đã được thêm vào. Đặt các mục sau trong /etc/sysctl.conf:

fs.protected_hardlinks = 0
fs.protected_symlinks = 0

sau đó chạy

sysctl -p

Đối với lý do tại sao chương trình của bạn chọn sử dụng liên kết thay vì sao chép tệp, tại sao tạo bản sao chính xác của tệp bạn cần sử dụng khi bạn chỉ có thể tạo một mục nhập trỏ đến các khối ban đầu? Điều này giúp tiết kiệm không gian đĩa và hoạt động ít tốn kém hơn về CPU và I / O. Liên kết cứng mới là cùng một tệp, chỉ với siêu dữ liệu / inode khác nhau. Nếu bạn xóa tệp gốc sau khi tạo liên kết cứng, nó sẽ không ảnh hưởng đến liên kết. Một tệp chỉ bị 'xóa' khi tất cả các liên kết đã bị xóa.


Cảm ơn bạn. Tôi sẽ xem xét các liên kết này một chút sau ngày hôm nay. (Có một upvote trong khi chờ đợi!) Tôi hiểu sự khác biệt giữa một liên kết cứng và một bản sao. Tuy nhiên, chương trình tôi đã kế thừa đang tạo một liên kết từ tệp nguồn đến khu vực "tải xuống" (thông qua giao diện ứng dụng web). Tôi không nghĩ dung lượng đĩa là một vấn đề, vì nó chỉ là một tệp văn bản. Ngoài ra, chỉ bằng cách "tải xuống" thường có nghĩa là gì, tôi không hiểu làm thế nào một liên kết phù hợp: về mặt ngữ nghĩa, một bản sao dường như có ý nghĩa hơn. (Tôi lo lắng có một số hành vi khác trong chương trình dựa trên một liên kết. Tôi sẽ phải kiểm tra.)
Mario

1
"Tôi hiểu sự khác biệt giữa một liên kết cứng và một bản sao." Đúng vậy, tôi chỉ đang viết câu trả lời của mình với một đối tượng chung trong tâm trí cho những người dùng tương lai khó hiểu mà có thể không biết.
Sean

Tôi sẵn sàng viết cho một đối tượng chung :-) Tôi sẽ điều tra cách khắc phục tốt nhất cho ứng dụng vào Thứ Hai. Rất may, tôi có rất nhiều thời gian. (Hạn chế duy nhất của tôi là "bạn phá vỡ nó; bạn đã mua nó"!) Tôi đánh dấu câu trả lời của bạn là câu trả lời được chấp nhận. Cảm ơn, một lần nữa!
Mario

PS Tôi đoán rằng người CentOS đã chọn các liên kết được bảo vệ theo mặc định. (Những gì tôi nhận được từ các liên kết bạn cung cấp là đây là một vấn đề gây tranh cãi.)
Mario
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.