Làm thế nào để quyền / tập tin hoạt động? Cấp hạt nhân, cấp độ FS hoặc cả hai?


8

Một câu hỏi đã xảy ra với tôi trước đó: là quyền / thuộc tính tệp OS- (và do đó kernel-) phụ thuộc hay chúng phụ thuộc vào hệ thống tệp? Dường như với tôi, sự thay thế thứ hai là hợp lý hơn, nhưng tôi chưa bao giờ nghe về reiserfsquyền truy cập tệp, ví dụ: chỉ "quyền truy cập tệp Unix". Mặt khác, để trích dẫn từ một bài viết trên Wikipedia :

Khi các phiên bản Windows mới ra mắt, Microsoft đã thêm vào kho các thuộc tính có sẵn trên hệ thống tệp NTFS

có vẻ như gợi ý rằng các thuộc tính tệp Windows bằng cách nào đó được gắn với hệ thống tệp.

Ai có thể làm ơn cho tôi sáng mắt ra không?

Câu trả lời:


7

Cả kernel và hệ thống tập tin đều đóng một vai trò. Quyền được lưu trữ trong hệ thống tập tin, vì vậy cần có một nơi để lưu trữ thông tin ở định dạng hệ thống tập tin. Quyền được thực thi và truyền đạt tới các ứng dụng bởi kernel, vì vậy kernel phải thực thi các quy tắc để xác định thông tin được lưu trữ trong hệ thống tập tin có nghĩa là gì.

Quyền truy cập tệp Unix Unix Liên quan đến một hệ thống cấp phép truyền thống bao gồm ba hành động (đọc, viết, thực thi) được kiểm soát thông qua ba loại vai trò (người dùng, nhóm, người khác). Công việc của hệ thống tập tin là lưu trữ 3 × 3 = 9 bit thông tin. Công việc của kernel là diễn giải các bit này dưới dạng quyền; đặc biệt, khi một quá trình thử một thao tác trên một tệp, hạt nhân phải xác định, cung cấp cho người dùng và các nhóm rằng quá trình đang chạy như các bit cho phép của tệp và thao tác được yêu cầu, có cho phép thao tác hay không. (Quyền truy cập tệp Unix Unix cũng thường bao gồm các bit setuid và setgid , không có quyền nói đúng.)

Các hệ thống unix hiện đại có thể hỗ trợ các hình thức cấp phép khác. Hầu hết các hệ thống unix hiện đại (Solaris, Linux, * BSD) đều hỗ trợ danh sách kiểm soát truy cập cho phép gán quyền đọc / ghi / thực thi cho nhiều người dùng và nhiều nhóm cho mỗi tệp. Hệ thống tập tin phải có chỗ để lưu trữ thông tin bổ sung này và kernel phải bao gồm mã để tra cứu và sử dụng thông tin này. Ext2, reiserfs, btrfs, zfs và hầu hết các định dạng hệ thống tập tin unix hiện đại khác xác định một nơi để lưu trữ các ACL đó. Mac OS X hỗ trợ một bộ ACL khác , bao gồm các quyền không truyền thống, ví dụ như phụ bản của Cameron và phụ tạo ra thư mục con; định dạng hệ thống tập tin HFS + hỗ trợ chúng. Nếu bạn gắn một khối HFS + trên Linux, các ACL này sẽ không được thực thi do nhân Linux không hỗ trợ chúng.

Ngược lại, có các hệ điều hành và hệ thống tập tin không hỗ trợ kiểm soát truy cập. Ví dụ, FAT và các biến thể được thiết kế cho các hệ điều hành người dùng đơn và phương tiện lưu động và các quyền của nó bị giới hạn ở khả năng đọc / đọc và ghi / ẩn. Đây là những quyền được thi hành bởi DOS . Nếu bạn gắn hệ thống tập tin ext2 trên DOS, nó sẽ không thực thi các quyền ext2. Ngược lại, nếu bạn truy cập hệ thống tệp FAT trên Linux, tất cả các tệp sẽ có cùng quyền.

Các phiên bản kế tiếp của Windows đã thêm hỗ trợ cho nhiều loại quyền hơn. Hệ thống tập tin NTFS được mở rộng để lưu trữ các quyền bổ sung đó. Nếu bạn truy cập hệ thống tệp với các quyền mới hơn trên hệ điều hành cũ hơn, HĐH sẽ không biết về các quyền mới hơn này và vì vậy sẽ không thực thi chúng. Ngược lại, nếu bạn truy cập một hệ thống tập tin cũ hơn với hệ điều hành mới hơn, nó sẽ không chứa các quyền mới và tùy thuộc vào HĐH để cung cấp các dự phòng hợp lý.


"Công việc của kernel là diễn giải các bit này là các quyền, đặc biệt, khi một quá trình thử một thao tác trên một tệp, kernel phải xác định [...]" Điều đó không có nghĩa là về lý thuyết có thể thay đổi kernel bỏ qua tất cả và đọc dữ liệu nào? (Một loại truy cập đĩa trực tiếp) Hoặc có điều gì khác ngăn chặn điều đó?
Overmind

@Overmind Tất nhiên rồi. Mã hạt nhân có quyền truy cập vào tất cả mọi thứ. Đĩa không biết gì về quy trình, người dùng hoặc quyền. Hạt nhân nói với đĩa cứng cho tôi khối 232876 và đĩa trả lời với nội dung của khối. Xác định quá trình nào có thể truy cập vào khối nào (hoặc phần nào của khối) là công việc của hạt nhân.
Gilles 'SO- ngừng trở nên xấu xa'

4

Để người dùng có quyền nhất định cả kernel hệ thống tập tin phải hỗ trợ chúng. Nếu hệ thống tệp thậm chí không hỗ trợ các quyền truy cập cơ bản nhất thì mã hệ thống tệp phải giả mạo chúng (ví dụ: với tùy chọn gắn kết umaskcho vfat).


3

Sự hiểu biết của tôi là kernel thực hiện inodes trong VFS. các nút chứa thông tin cấp phép (UNIX và ACL) cùng với các siêu dữ liệu khác và hệ thống tệp có thể mở rộng nút để thêm các tính năng. Nếu bạn quan tâm, hãy đọc Linux VFS - những thứ linh tinh nếu bạn không phải là lập trình viên hệ thống.


1

Theo quy tắc chung, quyền của tệp và thuộc tính tệp được lưu trữ vào tệpistist [cách chính xác phụ thuộc vào hệ thống tệp được đề cập (ext3 / 4, riser, NTFS, v.v.)] nhưng thường được sử dụng bởi kernel, để thực thi một cái gì đó.

Ví dụ: Hạt nhân trong * nix như sistema là "thứ" biết ý nghĩa của UID được liên kết với một tệp / thư mục. Một UID tệp chỉ đơn giản là một số được lưu trữ cùng với một tệp certan bởi hệ thống tệp nhưng việc "dịch" số đó cho một người dùng nhất định (và các quyền tương ứng để làm gì đó hoặc không) được thực hiện bởi kernel.

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.