Ưu tiên người dùng và chủ sở hữu nhóm trong quyền truy cập tệp


20

Tôi vừa gặp phải điều gì đó bất ngờ (đối với tôi) liên quan đến quyền truy cập tệp trên Linux (Arch Linux). Về cơ bản tôi có:

  • userX trong groupX
  • fileX userX:groupX ---rwx----

Điều gì làm tôi bối rối: Tôi không thể thực hiện bất kỳ hành động nào ( rwx) trên fileX. Thê nay đung không? Ai đó có thể vui lòng xác nhận đây thực sự là hành vi dự kiến?

Các hành động duy nhất tôi có thể thực hiện là mvrmvì tôi có quyền ghi trên thư mục mẹ.

Vấn đề là, tôi luôn nghĩ rằng các quyền này sụp đổ lẫn nhau, bắt đầu với cái chung nhất (khác -> nhóm -> người dùng). Nói cách khác, nếu o=rwxai quan tâm đến những sự thuyết phục cho nhóm và người dùng là gì? Rõ ràng đây không phải là trường hợp nhưng nó không có ý nghĩa nhiều với tôi; nó có vẻ phản trực giác Điều duy nhất mà phương pháp này có vẻ hữu ích, là dễ dàng loại trừ một người / nhóm rất cụ thể, điều này dường như không phải là một cách thông minh để thực hiện (imho). Bên cạnh đó, chủ sở hữu (và nhóm?) chmodDù sao cũng có thể đúng không? Bất kỳ suy nghĩ về vấn đề này?


bạn có chắc chắn trong nhómX không?
exussum

yeap, chắc chắn; kiểm tra gid hiệu quả vớiid
alex

Câu trả lời:


24

Vấn đề là, tôi luôn nghĩ rằng các quyền này sụp đổ lẫn nhau, bắt đầu với cái chung nhất (khác -> nhóm -> người dùng).

Nếu đúng như vậy thì các quyền khác của Viking sẽ áp dụng cho mọi người.

Nói cách khác, nếu o = rwx ai quan tâm đến những sự thuyết phục cho nhóm và người dùng là gì?

Điều đó khác với câu trước của bạn. Ở đây, bạn đang ám chỉ rằng các quyền được kết hợp với nhau, ví dụ: userX có quyền đọc nếu userX sở hữu tệp và tệp có thể đọc được hoặc nếu một nhóm mà userX thuộc sở hữu tệp và tệp là nhóm có thể đọc được hoặc nếu tệp khác có thể đọc được. Nhưng đó không phải là cách nó hoạt động. Trong thực tế, o=rwxcó nghĩa là các rwxquyền áp dụng cho người khác, nhưng nó không nói gì về các thực thể không phải là người khác.

Đầu tiên, nó không trực tiếp quan trọng nhóm người dùng thuộc về nhóm nào. Nhân không có khái niệm người dùng thuộc các nhóm. Hạt nhân duy trì là gì, đối với mọi quy trình, ID người dùng ( UID hiệu quả ) và danh sách ID nhóm (GID hiệu quả và GID bổ sung). Các nhóm được xác định tại thời điểm đăng nhập, theo quy trình đăng nhập - đó là quy trình đăng nhập đọc cơ sở dữ liệu nhóm (ví dụ /etc/group). ID người dùng và nhóm được kế thừa bởi các tiến trình con¹.

Khi một quá trình cố gắng mở một tệp, với các quyền Unix truyền thống:

  • Nếu người dùng sở hữu tệp là UID hiệu quả của quy trình, thì các bit quyền của người dùng sẽ được sử dụng.
  • Mặt khác, nếu nhóm sở hữu tệp là GID hiệu quả của quy trình hoặc một trong các ID nhóm bổ sung của quy trình, thì các bit quyền của nhóm được sử dụng.
  • Mặt khác, các bit cho phép khác được sử dụng.

Chỉ có một bộ bit rwx được sử dụng. Người dùng được ưu tiên hơn nhóm được ưu tiên hơn nhóm khác. Khi có danh sách kiểm soát truy cập , thuật toán được mô tả ở trên được khái quát hóa:

  • Nếu có một ACL trên tệp cho UID hiệu quả của quy trình, thì nó được sử dụng để xác định xem quyền truy cập có được cấp hay không.
  • Mặt khác, nếu có một ACL trên tệp cho GID hiệu quả của quy trình hoặc một trong các ID nhóm bổ sung của quy trình, thì các bit cho phép của nhóm được sử dụng.
  • Mặt khác, các bit cho phép khác được sử dụng.

Xem thêm Ưu tiên của ACLS khi người dùng thuộc nhiều nhóm để biết thêm chi tiết về cách sử dụng các mục ACL, bao gồm cả tác dụng của mặt nạ.

Do đó -rw----r-- alice internschỉ ra một tệp có thể được đọc và viết bởi Alice và tất cả người dùng khác có thể đọc và ngoại trừ. Một tệp có quyền và quyền sở hữu ----rwx--- alice internschỉ có thể truy cập được đối với thực tập sinh ngoại trừ Alice (cho dù cô ấy có phải là thực tập sinh hay không). Vì Alice có thể gọi chmodđể thay đổi quyền, điều này không cung cấp bất kỳ bảo mật nào; đó là một trường hợp cạnh. Trên các hệ thống có ACL, cơ chế tổng quát cho phép xóa quyền từ người dùng cụ thể hoặc các nhóm cụ thể, đôi khi rất hữu ích.

Sử dụng một tập hợp các bit, thay vì hoặc nhập tất cả các bit cho mỗi hành động (đọc, ghi, thực thi), có một số lợi thế:

  • Nó có tác dụng hữu ích là cho phép xóa quyền từ một nhóm người dùng hoặc nhóm, trên các hệ thống có ACL. Trên các hệ thống không có ACL, quyền có thể được xóa khỏi một nhóm.
  • Việc thực hiện đơn giản hơn: kiểm tra một bộ bit, thay vì kết hợp nhiều bộ bit lại với nhau.
  • Việc phân tích quyền của một tệp sẽ đơn giản hơn vì có ít thao tác hơn.

¹ Họ có thể thay đổi khi một setuid quá trình hoặc setgid được thực thi. Điều này không liên quan đến vấn đề trong tay.


tốt ... bằng cách "sụp đổ" Tôi có nghĩa là điều tương tự, một hoạt động OR :)
alex

cảm ơn vì đã dành thời gian cho tôi; +1 cho câu trả lời rất chi tiết và kỹ thuật
alex

Câu trả lời chính xác. Nhưng tôi có một câu hỏi về các gạch đầu dòng cuối cùng của bạn: Có thực sự đơn giản hơn để thực hiện và phân tích? Sẽ không kiểm tra các quyền chỉ để ORing các quyền cùng nhau như OP nghĩ là trường hợp?
vườn

Trường hợp cạnh này có vẻ ngớ ngẩn với tôi vẫn: (userX trong nhómX) + (userZ trong groupX). Bạn có một fileX userX: groupX --- rwx ----. Bây giờ người tạo thư mục gốc userX không thể truy cập tệpX .. nhưng userZ thì có thể. Và cả hai đều thuộc cùng một nhóm. Thực sự không trực quan.
alexfvolk

4

Các quyền cụ thể hơn được ưu tiên hơn các quyền ít cụ thể hơn.

userX trong nhómX

fileX userX: groupX --- rwx ----

Vì bạn là chủ sở hữu của tệp, bạn sẽ chỉ được cấp quyền chủ sở hữu. Chủ sở hữu không có quyền. Vì vậy, bạn không thể làm bất cứ điều gì. Nếu bạn không phải là chủ sở hữu của tệp và thành viên nhóm thì quyền của nhóm sẽ được áp dụng.

Vui lòng đọc phần này của trang wiki

https://en.wikipedia.org/wiki/File_system_permissions#C Cầu


2

-rwxrw---- có nghĩa là chủ sở hữu đã đọc, viết và thực thi quyền, nhóm đã đọc và viết và những người khác không có quyền.

Các quyền bạn cung cấp cung cấp cho nhóm 'nhómX' quyền đọc, ghi và thực thi tệp. Nếu bạn là thành viên của nhóm "groupX" nhưng không phải là chủ sở hữu của tệp, các quyền này sẽ áp dụng cho bạn.

Trong trường hợp này tôi giả sử bạn thực sự là chủ sở hữu của tập tin. Chỉ các quyền được thiết lập cho chủ sở hữu sau đó sẽ áp dụng cho bạn. Tất nhiên chủ sở hữu có thể ghi đè hoặc thay đổi quyền trên tệp. Nhóm, tuy nhiên, không thể làm điều này. Ví dụ, vim sẽ nhắc bạn xác nhận nếu bạn đang ghi vào một tệp mà bạn không có quyền ghi nhưng là chủ sở hữu của.

Tôi thường đọc quyền từ trái sang phải. Tôi có phải là chủ sở hữu không? Nếu có, quyền chủ sở hữu áp dụng. Nếu không; Tôi có phải là thành viên của nhóm không? Nếu có, quyền nhóm được áp dụng. Nếu không, thì quyền cho "Khác" áp dụng cho tôi.

Trong một số trường hợp, rất hữu ích khi là chủ sở hữu của một tệp nhưng không có quyền ghi. Nó bảo vệ bạn khỏi việc vô tình xóa hoặc sửa đổi tập tin. Cá nhân tôi đã đặt quyền 400 cho tất cả các tệp mẫu của mình, chỉ để đảm bảo rằng tôi không sửa đổi chúng một cách tình cờ. Điều tương tự cũng xảy ra đối với các quyền thực thi.


1
Tôi tin rằng bạn đã hiểu nhầm câu hỏi. Khi OP cho biết các quyền "sụp đổ" là Khác-> Nhóm-> Người dùng, tôi nghĩ rằng họ có nghĩa là khi xác định liệu hành động của bạn có được phép hay không, trước tiên, quyền "Khác" sẽ được kiểm tra, sau đó là "Nhóm" không thành công) "Người dùng".
Joseph R.

@JosephR. yeap, đó là những gì tôi muốn nói :)
alex

Ồ, lời xin lỗi của tôi. Tôi sẽ loại bỏ phần đó. Có bất cứ điều gì hữu ích trong câu trả lời?
arnefm

Lưu ý: bạn nên chỉnh sửa câu trả lời của mình một chút và xóa (hoặc viết lại) đoạn thứ hai vì nó "tối nghĩa" (nó không đủ rõ ràng, loại mâu thuẫn với hành vi mà tôi đã mô tả)
alex

Suy nghĩ thứ hai, tôi có thể đã nhanh chóng chấp nhận câu trả lời. Xin lỗi vì điều đó. Vì vậy, bạn đang nói rằng đôi khi thật hữu ích khi không có quyền ghi để bạn không vô tình thay đổi một số tệp quan trọng; Nhưng nó có ích gì khi những người khác có toàn quyền? (vì vậy ... bạn sẽ không bị mắc lỗi mà không phải là người khác )
alex

0

Tôi đã có thể thêm người dùng vào một nhóm, cấp quyền cho nhóm vào một thư mục (070) và sau đó SAU KHI RESTARTING có thể truy cập vào thư mục.

Tạo nhóm: sudo groupadd groupname

Thêm người dùng vào nhóm: sudo gpasswd -a tên người dùng

Đảm bảo toàn bộ thư mục thuộc quyền sở hữu nhóm chính xác (phải là thành viên hiện tại của tên nhóm để thực hiện): sudo chgrp -R tên nhóm thư mục_path /

Chỉ cung cấp nhóm rwx cho thư mục (chỉ có thể là rw, điều chỉnh khi cần thiết): sudo chmod -R 070 thư mục_path

Sau khi thực hiện các thao tác trên, đảm bảo đăng xuất và đăng nhập lại. Nếu không được, hãy khởi động lại máy. Làm điều này làm việc cho tôi.

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.