Khi nào chmod thất bại?


8

Trong hoàn cảnh nào sẽ chmodthất bại?

Tôi đã xem trang người đàn ông nhưng nó chỉ xác định cách sử dụng và không đi sâu vào chi tiết về những tình huống mà nó sẽ không hoạt động.

Tôi cho rằng chmodsẽ hoạt động nếu:

  • bạn đã root
  • bạn sở hữu tệp mục tiêu (và đang thiết lập bit chế độ trần tục, tức là không dính bit, các tệp khác)

Người dùng có thể sử dụng chmodđể thay đổi quyền trên một tệp mà họ có quyền truy cập nhóm không? Có liên quan đến truy cập đọc / ghi?


2
Nó sẽ thất bại nếu inode không thể được sửa đổi, ví dụ như hệ thống tập tin chỉ được đọc.
jordanm

Câu trả lời:


3

Chỉ chủ sở hữu của tệp hoặc người dùng root mới có thể thay đổi quyền của tệp. Các quyền hiện tại trên tệp hoặc trên thư mục mẹ của nó là không liên quan¹. Điều này được chỉ định trong POSIX :

Ứng dụng phải đảm bảo rằng ID người dùng hiệu quả của quy trình khớp với chủ sở hữu của tệp hoặc quy trình có các đặc quyền phù hợp để thực hiện việc này.

Trên hầu hết các thông báo, các đặc quyền thích hợp của Viking có nghĩa là chạy bằng root. Nếu các điều kiện này không được đáp ứng, chmodthường không thành công EPERM, mặc dù các hành vi khác như hủy bỏ chương trình do vi phạm an ninh được cho phép.

Ngoài ra, một số biến thể unix có các cách cho phép hoặc cấm theo hệ thống cụ thể chmod. Ví dụ: Linux có một khả năng ( CAP_FOWNER) cho phép các quy trình thay đổi quyền của tệp và siêu dữ liệu khác bất kể chủ sở hữu của nó.

Có những lý do khác chmodcó thể thất bại ngay cả khi tệp tồn tại, có thể truy cập và có chủ sở hữu phù hợp. Những cái phổ biến bao gồm hệ thống tệp chỉ đọc hoặc hệ thống tệp không hỗ trợ các quyền như FAT. Những cái ít phổ biến hơn bao gồm các hạn chế dành riêng cho hệ thống, chẳng hạn như thuộc tính bất biến trên hệ thống tập tin ext2 của Linux và các công cụ tiếp theo.

¹ Ngoại trừ khi anh ta xử lý đang chạy chmodphải có thể truy cập tệp, do đó, nó phải có quyền thực thi trên thư mục chứa tệp và bất kỳ thư mục nào khác mà nó đi qua để làm như vậy.


2

Các chi tiết bạn muốn có trong trang hướng dẫn cho cuộc gọi hệ thống chmod (). Thay vì man chmodsử dụng man 2 chmod. man chattrman 2 setxattrsẽ quan tâm bạn là tốt; các thuộc tính tệp mà chattr / setxattr () thiết lập làm tăng hành vi của các quyền Unix truyền thống được đặt bởi chmod.


Tôi sẽ thử điều này khi tôi ra khỏi công việc.
Wug

1

Theo tiêu chuẩn UNIX, "ID người dùng hiệu quả của quy trình phải phù hợp với chủ sở hữu của tệp hoặc quy trình phải có các đặc quyền phù hợp để thực hiện việc này."

Các bit về đặc quyền thích hợp cần một số lời giải thích. Trên các hệ thống truyền thống, chmod được phép trên tất cả các tệp khi UID hiệu quả (trên Linux hệ thống tệp UID, nhưng xem bên dưới) của quy trình là 0 [tức là root].

Linux có một hệ thống gọi là các khả năngCAP_FOWNERbit điều khiển khả năng sử dụng chmodtrên tất cả các tệp. Theo mặc định, tất cả các khả năng được cấp khi execve()cuộc gọi tạo quy trình gốc (bằng cách thực hiện nhị phân setuid hoặc khi UID thực bằng 0) hoặc khi UID hiệu quả được đặt thành 0 (và bị xóa khi được đặt thành giá trị khác không) và một tập hợp các khả năng bao gồm CAP_FOWNERđược bật khi UID hệ thống tập tin được đặt thành 0 (và bị tắt khi được đặt thành giá trị khác không). Đọc trang hướng dẫn để biết thêm chi tiết.

Bạn đã đề cập đến bit dính, nhưng bỏ qua thực tế là người dùng cũng không thể đặt bit setgid trên tệp khi chúng không nằm trong nhóm được gán cho tệp. Bit setuid hoặc setgid cũng có thể bị bỏ qua trong các trường hợp được xác định thực hiện bổ sung.


0

Người dùng có thể sử dụng chmod để thay đổi quyền trên tệp mà họ có quyền truy cập nhóm không?

Tại sao bạn không thử và xem?

$ touch foo
$ sudo install -o root -g $(id -gn) -m660 foo bar
$ ls -la bar
-rw-rw----  1 root  staff  0 Oct 21 21:33 bar
$ chmod g-w bar
chmod: bar: Operation not permitted
$ chmod g+x bar
chmod: bar: Operation not permitted

Tôi đã chọc vào nó, nhưng đây là liên quan đến bảo mật và tôi không muốn vô tình bỏ lỡ một trường hợp cạnh.
Wug

Nếu bạn lo lắng về trường hợp cạnh, bạn có thể (ít nhất là để giảm thiểu rủi ro) chmod, và sau đó kiểm tra các quyền trên nó. Nếu bạn cảm thấy hoang tưởng, hãy làm fsynctrước khi kiểm tra.
nanofarad
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.