Quyền của tập tin được tính như thế nào?


7

Sử dụng chmodtôi có thể đặt quyền cho một tệp, nhưng nếu thư mục cha ( ..) có quyền xung đột, điều gì sẽ xảy ra?

Và nếu tôi tạo một tệp mới, sử dụng touchhoặc một cái gì đó tương tự, các quyền ban đầu được tính như thế nào? Được phép thừa kế nó từ ..?

Và tại sao tôi không thể làm bất cứ điều gì trong thư mục khi tôi gỡ bỏ executablecờ cho phép?

$ mkdir temp;
$ chmod -x temp;
$ touch temp/a;
$ ls temp;
touch: cannot touch `temp/a': Permission denied

Câu trả lời:


15
  1. Nói một cách nghiêm túc - không có thứ nào trong UNIX là "quyền xung đột": quyền truy cập trên mục nhập hệ thống tệp (thư mục, tệp, v.v.) xác định những gì bạn có thể hoặc không thể làm trên đối tượng đó. Quyền đối với các mục nhập hệ thống tệp khác không được nhập vào hình ảnh, ngoại trừ bit "x" trên tất cả các thư mục tổ tiên trong đường dẫn đến một tệp (tối đa /) - xem 3.

  2. Quyền mặc định trên một tệp mới được tạo được xác định bởi các quyền mà chương trình tạo cho phép ( modeđối số cho các cuộc gọi openhoặc creathệ thống) và quy trình hiện tại umask. Cụ thể, bất kỳ bit nào được đặt (1) trong "umask" đều được đặt lại (0) trong các quyền của tệp mới được tạo: theo ký hiệu giống như C : file_permissions = open_mode & ! umask. Đọc man 2 creat(tìm kiếm O_CREAT) và man umaskđể biết chi tiết.

  3. Bit "x" (có thể thực thi) trên một thư mục kiểm soát xem bạn có thể duyệt qua thư mục đó hay không: đi qua một thư mục có nghĩa là có thể cdvào đó và truy cập các tệp có trong đó. Lưu ý rằng khả năng liệt kê nội dung của thư mục được kiểm soát bởi bit "r".

Đọc thêm:


Thật hữu ích. Tôi sẽ +5 (Thông tin) này nếu tôi có thể.
Kevin M

1
Nhẹ nitpick đến điểm 1: kernel kiểm tra các quyền trên đường dẫn bạn đi tới nó, ngay cả khi nó tương đối. Vì vậy, bạn có thể làm việc trong một thư mục mà bạn không thể truy cập chdirthông qua đường dẫn đầy đủ của nó (thử với mkdir foo/bar; cd foo/bar; chmod 000 ..; cd ..; ls -ld . ..; touch yes_I_can_write_here; chmod 755 ..; cd ..). Điều này không xuất hiện thường xuyên (đôi khi nó được sử dụng trong một số tình huống giam cầm quy trình).
Gilles 'SO- ngừng trở thành ác quỷ'

3

Trước hết ... trong Linux mọi thứ đều là một tập tin. Ý tôi là tất cả mọi thứ ... thư mục của bạn, hoặc chuột hoặc bàn phím ... tất cả đều là một tập tin.

Bây giờ, hãy trả lời câu hỏi của bạn:

  1. Không có xung đột giữa thư mục và tập tin chứa. Nếu bạn có một thư mục chỉ đọc quyền, nhưng bạn có một tệp trong thư mục đó có quyền ghi, bạn có thể ghi vào tệp đó. Tuy nhiên, bạn không thể tạo / xóa các tập tin trong thư mục đó. Vì vậy, đừng lo lắng về xung đột. Ngoài ra, bạn có thể đọc nội dung của thư mục (liệt kê thư mục).

  2. Quyền mặc định thường là 644 (nghĩa là: rw cho người dùng, r cho nhóm và người khác)

  3. Bit "thực thi" cho một thư mục có nghĩa là "liệt kê" thư mục. Nói cách khác, nếu bạn -xa thư mục, bạn không thể biết nội dung của nó, điều đó có nghĩa là bạn không thể chạm vào thứ gì đó trong đó.


1
Nếu nó có thể thực thi được, thì bạn có thể đọc một cái gì đó trong đó, hoặc những gì trong thư mục con, nhưng bạn phải biết tên tệp; bạn không thể liệt kê nội dung thư mục (đọc quyền). Để kiểm tra điều này, hãy tạo một thư mục chứa một tệp trong đó, xóa tất cả các quyền đọc khỏi thư mục, cdra khỏi thư mục và cattệp.
Kevin M

(2) Quyền truy cập tệp mặc định được cung cấp bởi umask(nói một cách đại khái, nó chỉ ra các bit bị loại trừ) và các quyền được yêu cầu bởi ứng dụng tạo tệp. Giá trị umaskthường là 022, dẫn đến quyền 755 nếu chương trình yêu cầu tệp thực thi (đối số 777), 644 nếu ứng dụng yêu cầu tệp công khai (đối số 666) và 600 nếu ứng dụng yêu cầu tệp riêng (đối số 600). (3) Như Kevin nói, bạn đã trộn lẫn việc thực thi và đọc các quyền cho một thư mục ở đây.
Gilles 'SO- ngừng trở thành ác quỷ'

OK, cảm ơn vì thông tin bổ sung cho câu trả lời của tôi ... Tôi chỉ cố gắng giải thích nó đơn giản nhất có thể mà không có thông tin quá mức.
Patkos Csaba

Re "trong Linux mọi thứ đều là một tập tin": Không hoàn toàn chính xác. Chẳng hạn, không có nút nào /devcho các thiết bị như radio Bluetooth hoặc thẻ Ethernet của tôi. Các khái niệm cấp cao hơn như cửa sổ X11 cũng không xuất hiện dưới dạng tệp (ngoại trừ wmii:). (BTW, câu lệnh có thể được áp dụng cho HĐH Plan9.)
user1686
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.