Tạo liên kết cứng - Quyền?


16

Những quyền nào ảnh hưởng đến việc tạo liên kết cứng? Liệu quyền sở hữu tập tin có vấn đề?


Giả sử người dùng alicemuốn tạo một liên kết cứng đến tệp target.txttrong một thư mục target-dir.

  • Những quyền nào alicecần trên cả hai target.txttarget-dir?
  • Nếu target.txtthuộc sở hữu của người dùng billtarget-dirthuộc sở hữu của người dùng chad, nó có thay đổi gì không?

Tôi đã cố gắng mô phỏng tình huống này để tạo cấu trúc thư mục / tệp sau trong ext4hệ thống tệp:

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

Mặc dù alicecó thể tạo liên kết mềm đến target.txtnhưng cô ấy không thể tạo liên kết cứng:

#> ln source-dir/target.txt target-dir/
ln: failed to create hard link ‘target-dir/target.txt’ => ‘source-dir/target.txt’: Operation not permitted

Nếu alicesở hữu target.txtvà không có quyền được thay đổi, liên kết cứng thành công. Tôi đang thiếu gì ở đây?


Đây có phải là một nhiệm vụ? Nó có thể ảnh hưởng đến loại câu trả lời mà một số người sẽ chọn đưa ra nếu vậy (không phải là nó sẽ vượt ra ngoài giới hạn để đặt câu hỏi về một bài tập tất nhiên). Dù sao, bạn đã thử chỉ tạo kịch bản đó và xem điều gì xảy ra?
Eric Renouf

Không, nó không phải cho một nhiệm vụ. Tôi đang đối mặt với kịch bản chính xác này, và có một số dự đoán, nhưng tôi nghĩ sẽ tốt hơn nếu hỏi từ quan điểm lý thuyết. Trong trường hợp của tôi, tôi không thể tạo liên kết cứng bất kể target.txttarget-dirquyền, trừ khi tôi sudolà root.
gcscaglia

Liên kết cứng chia sẻ quyền sở hữu và quyền tương tự, vì vậy, nó giống như truy cập vào tệp gốc.
teppic

@teppic Khó khăn của tôi là không truy cập vào liên kết cứng đã tạo, nó đang tạo liên kết cứng dưới dạng. aliceTôi có thể truy cập cả tệp gốc và liên kết cứng với nó (được tạo bằng sudo), nhưng tôi không thể tạo liên kết dưới dạng người dùng alicemặc dù tất cả chúng ta đồng ý các quyền này là đủ cho nó.
gcscaglia

Câu trả lời:


18

Để tạo liên kết cứng alicesẽ cần có write+executequyền target-dirtrên tất cả các trường hợp. Các quyền cần thiết target.txtsẽ thay đổi:

  • Nếu fs.protected_hardlinks = 1sau đó alicecần quyền sở hữu target.txthoặc ít nhất là read+writequyền trên nó.
  • Nếu fs.protected_hardlinks = 0sau đó bất kỳ bộ quyền sẽ làm; Thậm chí 000 là ổn.

Câu trả lời này cho một câu hỏi tương tự có phần thông tin còn thiếu để trả lời câu hỏi này.

Từ http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1 [nhấn mạnh của tôi]:

Liên kết cứng:

Trên các hệ thống có thư mục người dùng có thể ghi trên cùng phân vùng với tệp hệ thống, một loại vấn đề bảo mật lâu đời là cuộc đua thời gian sử dụng dựa trên liên kết cứng, thường thấy nhất trong các thư mục có thể ghi trên thế giới thích / tmp. Phương pháp khai thác phổ biến của lỗ hổng này là vượt qua các ranh giới đặc quyền khi theo một liên kết cứng nhất định (tức là một quy trình gốc theo một liên kết cứng được tạo bởi người dùng khác). Ngoài ra, có một vấn đề tồn tại khi người dùng có thể "ghim" tệp setuid / setgid có khả năng bị tổn thương để quản trị viên thực sự không nâng cấp hệ thống đầy đủ.

Giải pháp là cho phép các liên kết cứng chỉ được tạo khi người dùng đã là chủ sở hữu của tệp hiện có hoặc nếu họ đã có quyền truy cập đọc / ghi vào tệp hiện có .


Cảm ơn! Đây là những gì tôi đã đấu tranh trong một ngày trên Debian 9!
Arda

Tại sao tôi lại nhận được "thao tác không được phép" ngay cả khi tôi có rwx perms trên dir và rw perm trên tệp?
Michael

1

alicecần ít nhất đọc quyền trên target.txtvà viết + thực thi quyền target-dir.

Bây giờ, cấu trúc quyền hoạt động như một bộ ba phần tách biệt:

  1. Quyền người dùng: áp dụng cho người dùng sở hữu nút.
  2. Quyền của nhóm: áp dụng cho bất kỳ người dùng nào thuộc nhóm sở hữu nút.
  3. Quyền của người khác: áp dụng cho bất kỳ người dùng / nhóm nào khác không sở hữu nút.

Do đó, câu hỏi về quyền sở hữu chỉ ảnh hưởng trong đó tập hợp các quyền mà các quyền cần thiết alicelà, là:

  • Nếu alicelà người dùng chủ sở hữu, các quyền cần thiết phải nằm trong phần "người dùng".
  • Nếu alicelà một phần của nhóm sở hữu nó, các quyền cần thiết phải nằm trong phần "nhóm".
  • Nếu alicekhông sở hữu nó và không phải là một phần của nhóm sở hữu nó, các quyền cần thiết phải nằm trong phần "khác".

Tôi cũng nghĩ vậy Nhưng trong tình huống của tôi target.txtcó các quyền 444 và target-dircó 777 quyền nhưng tôi không thể tạo liên kết cứng trừ khi tôi làm như vậy bằng root hoặc tôi sở hữu tệp tôi đang liên kết. Thật kỳ lạ, một liên kết mềm sẽ hoạt động như bạn mô tả.
gcscaglia

Thông tin đó sẽ hữu ích để có trong chính câu hỏi, tôi khuyên bạn nên cập nhật. Thật kỳ lạ là tôi đã không nghĩ về nó trước đây ... nhưng hệ thống tập tin nơi bạn đang làm việc có hỗ trợ quyền sở hữu / quyền giống như Unix, để bắt đầu không?
dave_alcarin

Đúng vậy, nó là một ext4 vượt trội trên hệ thống fedora 21; Liên kết hoạt động khi tôi là chủ sở hữu của tệp.
gcscaglia
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.