Làm thế nào để cấp phép tập tin cho người dùng gốc Root


28

Tôi có tập tin sau:

---------- 1 Steve Steve 341 2017-12-21 01:51 myFile.txt

Tôi đã chuyển người dùng sang rootthiết bị đầu cuối và tôi đã nhận thấy các hành vi sau:

  • Tôi có thể đọc tập tin này và viết cho nó.

  • Tôi không thể thực hiện tập tin này.

  • Nếu tôi đặt xbit trong quyền người dùng ( ---x------) hoặc quyền nhóm ( ------x---) hoặc quyền khác ( ---------x) của tệp, thì tôi có thể thực thi tệp này.

Bất cứ ai có thể giải thích cho tôi hoặc chỉ cho tôi một hướng dẫn giải thích tất cả các quy tắc áp dụng khi rootngười dùng đang xử lý các tệp và thư mục?

Câu trả lời:


38

Quyền truy cập đặc quyền vào các tập tin và thư mục thực sự được xác định bởi các khả năng, không chỉ bởi việc có roothay không. Trong thực tế, rootthường có tất cả các khả năng có thể, nhưng có những tình huống mà tất cả / nhiều trong số chúng có thể bị loại bỏ, hoặc một số được cung cấp cho người dùng khác (quy trình của họ).

Tóm lại, bạn đã mô tả cách kiểm tra kiểm soát truy cập hoạt động cho một quy trình đặc quyền. Đây là cách các khả năng khác nhau thực sự ảnh hưởng đến nó:

Khả năngCAP_DAC_OVERRIDE chính ở đây là , một quá trình có thể "bỏ qua việc đọc, ghi và thực hiện kiểm tra quyền". Điều đó bao gồm đọc và ghi vào bất kỳ tệp nào, cũng như đọc, viết và truy cập các thư mục.

Nó không thực sự áp dụng để thực thi các tệp không được đánh dấu là có thể thực thi được. Các bình luận tronggeneric_permission ( fs/namei.c), trước khi kiểm tra quyền truy cập cho các tập tin, nói rằng

Đọc / ghi DAC luôn luôn quá mức. Các bộ xử lý có thể thực thi được quá mức khi có ít nhất một bộ bit thực thi.

Và mã kiểm tra rằng có ít nhất một xbit được đặt nếu bạn đang cố thực thi tệp. Tôi nghi ngờ đó chỉ là một tính năng tiện lợi, để ngăn việc vô tình chạy các tệp dữ liệu ngẫu nhiên và gặp lỗi hoặc kết quả kỳ lạ.

Dù sao, nếu bạn có thể ghi đè quyền, bạn có thể tạo một bản sao thực thi và chạy nó. (Mặc dù nó có thể tạo sự khác biệt về mặt lý thuyết cho các tập tin setuid của một quá trình có khả năng trọng quyền tập tin ( CAP_DAC_OVERRIDE), nhưng không có khả năng liên quan khác ( CAP_FSETID/ CAP_FOWNER/ CAP_SETUID). Nhưng có CAP_DAC_OVERRIDEcho phép chỉnh sửa /etc/shadowvà các công cụ như vậy, do đó, nó xấp xỉ bằng để chỉ có quyền truy cập root đầy đủ.)

Ngoài ra còn có CAP_DAC_READ_SEARCHkhả năng cho phép đọc bất kỳ tệp nào và truy cập bất kỳ thư mục nào, nhưng không thực hiện hoặc ghi vào chúng; và CAP_FOWNERđiều đó cho phép một quy trình thực hiện những thứ thường chỉ dành riêng cho chủ sở hữu tệp, như thay đổi các bit quyền và nhóm tệp.

Ghi đè bit dính trên các thư mục chỉ được đề cập bên dưới CAP_FOWNER, vì vậy dường như CAP_DAC_OVERRIDEsẽ không đủ để bỏ qua điều đó. (Nó sẽ cung cấp cho bạn quyền viết, nhưng thông thường trong các thư mục dính dù sao bạn cũng có và +thạn chế nó.)

(Tôi nghĩ rằng các thiết bị đặc biệt được tính là "tệp" ở đây. Ít nhất generic_permission()chỉ có loại kiểm tra thư mục, nhưng tôi đã không kiểm tra bên ngoài đó.)


Tất nhiên, vẫn có những tình huống mà ngay cả các khả năng sẽ không giúp bạn sửa đổi các tệp:

  • một số tệp trong /proc/sys, vì chúng không thực sự là tệp
  • SELinux và các mô-đun bảo mật khác có thể giới hạn root
  • chattrkhông thay đổi +ivà chỉ gắn +acờ trên ext2 / ext3 / ext4, cả hai đều dừng ngay cả root và ngăn chặn cả việc đổi tên tập tin, v.v.
  • hệ thống tập tin mạng, nơi máy chủ có thể thực hiện kiểm soát truy cập của riêng mình, ví dụ: root_squashtrong NFS ánh xạ gốc tới không ai
  • FUSE, mà tôi cho rằng có thể làm bất cứ điều gì
  • gắn kết chỉ đọc
  • thiết bị chỉ đọc

Đáng ngạc nhiên là nhận xét tệp nguồn dường như không được nhân đôi trong capabilities(7)trang người đàn ông - hãy xem xét việc gửi báo cáo lỗi!
Toby Speight

@ilkkachu Như đã được hiển thị, rootrw-quyền trên (gần như) bất kỳ tệp nào và để có được xquyền, thì xbit phải được đặt trên quyền của người dùng / nhóm / người khác trên tệp. Nhưng những gì về các thư mục, rootrwxquyền trên bất kỳ thư mục nào (ngay cả khi một thư mục không có quyền nào cả ( ----------))?
Giuse

@Joseph, yeah, CAP_DAC_OVERRIDEcho phép ghi đè tất cả các quyền của thư mục, vì vậy bạn có thể đọc, ghi và truy cập các thư mục (tức là liệt kê nội dung, tạo và hủy liên kết tệp). Nhận xét tôi trích dẫn về bit exec là trong ngữ cảnh của các tệp (chỉ).
ilkkachu

11

Đó chính xác như bạn đã nhận thấy cho các quyền mặc định:

  • Đọc và ghi:
    Theo mặc định, người dùng Root có thể truy cập bất kỳ tệp nào trong hệ thống. Bạn có thể xóa quyền truy cập này bằng cách thay đổi các thuộc tính như giải thích ở đây: chattr . Điều này sau đó được liên kết với các khả năng.

  • Thực thi: Người
    dùng root không có quyền thực thi trừ khi ít nhất một trong số các bit thực thi được đặt.


Có thể có các tập tin mà root không thể ghi hoặc xóa. Vì vậy, "Người dùng root có thể truy cập bất kỳ tệp nào trong hệ thống." không chính xác
Lukas Boersma

Bạn có nghĩa là như hệ thống tập tin chỉ đọc? hoặc bạn có một trường hợp khác?
Kevin Lemaire

1
Tôi đang nói về những trường hợp như thế này: những tập tin không thể nhận ra , những tập tin không thể xóa được
Lukas Boersma

5

myFile.txtđược bởi chmod 000 myFile.txt.

0 no permission
1 execute
2 write
3 execute + write
4 read 
5 read + execute
6 read + write
7 all

--------- có nghĩa là không có sự cho phép của người dùng, nhóm và khác.

Người dùng root có khả năng không hạn chế để sửa đổi tệp này. Việc đọc / ghi được cấp. Để thực thi tập tin này, người dùng root cần phải thực hiện nó bằng mọi cách. (chmod 100, 010 hoặc 001)


2

Chế độ thực thi được xử lý một chút khác biệt so với các chế độ khác.

Quyền đọc và ghi được sử dụng để thực thi các chính sách bảo mật. Người rootdùng thường miễn nhiễm với các hạn chế bảo mật (có một số trường hợp ngoại lệ, như các tệp không thay đổi và các tính năng hiện đại như các tính năng đã làm cho điều này trở nên tốt hơn), đó là lý do tại sao một tên khác cho tài khoản này là "siêu người dùng".

Thực thi quyền là nhiều hơn một chế độ tư vấn, phân biệt xem tập tin được dự định để thực thi hay chỉ là dữ liệu. Bởi vì điều này, ngay cả người dùng root cũng tuân theo nó - không có điểm nào trong việc thực thi một tệp dữ liệu. Nếu không có quyền thực thi nào được đặt, root không thể thực thi tệp; nếu bất kỳ trong số họ được thiết lập, anh ta có thể. Tất nhiên, vì root cũng có quyền thay đổi bất kỳ quyền của tệp, tài khoản có thể tạo tệp thực thi nếu muốn (trừ khi hệ thống tệp chỉ đọc).

BTW, kịch bản là một trường hợp thú vị trong việc này. Các tập lệnh là các tệp dữ liệu cho trình thông dịch có liên quan. Nếu tập lệnh có một #!dòng, bạn có thể thực thi nó như một chương trình - trình thông dịch có tên trong shebang được chạy với tên tệp script như là một đối số. Nhưng điều này sẽ chỉ được thực hiện khi quyền thực thi được thiết lập. Mặt khác, bạn chỉ có thể chạy trình thông dịch trực tiếp, vd /bin/bash scriptname. Thông dịch viên chỉ quan tâm nếu họ có thể đọc tệp, họ không kiểm tra quyền thực thi.


1

Hãy để tôi giải thích cho bạn về mặt lý thuyết.

người dùng root là vua của hệ điều hành.

Nếu một tệp hoặc thư mục có bất kỳ quyền nào như X để thực thi nhưng không có gì khác và một số người như Steve đã sở hữu tệp thì root cũng có thể thực thi tệp.

Luôn nhớ rằng, trong Linux root có thể làm bất cứ điều gì, không có hạn chế nào đối với root.


Không phải bất cứ điều gì. Ví dụ, nếu một tệp có thuộc tính bất biến , thì ngay cả root cũng không thể thay đổi nó (trừ khi anh ta loại bỏ rõ ràng thuộc tính đó).
Ruslan

@Ruslan có, nhưng đó là trường hợp quá đặc biệt anh ấy là người mới nên tôi giải thích anh ấy là cơ bản, theo mặc định những loại thuộc tính này không xảy ra.
Hassan Sohail
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.