Làm thế nào được tính toán trong Linux?


15

Vì vậy, tôi biết umaskcó thể hạn chế người dùng đặc quyền, sử dụng định dạng này umask ugo.

Tôi hiểu rằng read = 4, write = 2 và exec = 1. Tuy nhiên, khi tôi gõ umask, nó trả về 4 chữ số là 0022hoặc 0073. Tôi không hiểu làm thế nào để làm việc này bây giờ vì có thêm một chữ số. Chữ số phụ đó là gì và 0022có nghĩa là gì?

Câu trả lời:


18

Giả sử mặt nạ mặc định là 0666. umask0022 sẽ tạo mặt nạ mới 0644 (0666-0022 = 0644) có nghĩa là nhóm và những người khác có quyền đọc (không ghi hoặc thực thi).

Chữ số "phụ" (số đầu tiên = 0), chỉ định rằng không có chế độ đặc biệt.

Nếu chế độ bắt đầu bằng một chữ số, nó sẽ được hiểu là bát phân nếu không nó có nghĩa là tượng trưng.

0 là một chữ số, như là 1 (đối với bit dính) hoặc 6 (đối với SGID). Một lệnh như chmodcó thể được gọi bằng các phương thức khác, chẳng hạn như chmod ug+rw mydirnơi bạn sẽ thêm quyền đọc và ghi cho người dùng và nhóm. Lưu ý rằng chế độ trong trường hợp này (ug + rw) không bắt đầu bằng một chữ số, do đó sẽ không được hiểu là bát phân mà là biểu tượng.

Xem en.wikipedia.org/wiki/Chmod#Symbolic_examples để biết về biểu tượng cũng như www.lifeaftercoffee.com/2007/03/20/special- allow -mode-in- linux- and- unix / để biết một chút về các chế độ đặc biệt.

Tôi không biết rằng bạn sẽ vạch mặt bit đầu tiên umask, nhưng về mặt kỹ thuật bạn có thể. Nó sẽ giải thích tại sao bạn hầu như luôn xem nó là số không.

Tín dụng cho Pinkfloydx33

Chữ số đầu tiên của mặt nạ xử lý các quyền đặc biệt không phù hợp hoàn toàn với chủ sở hữu / nhóm / mô hình khác. Khi bốn chữ số được cung cấp cho một quyền, tệp đầu tiên đề cập đến các giá trị đặc biệt đó:

4000 = SUID
2000 = SGID
1000 = sticky bit

Bit SUID, viết tắt của ID-user-set, khiến chương trình thực thi chạy với id người dùng hiệu quả (uid) của chủ sở hữu - nói cách khác, bất kể ai thực thi nó, chương trình thực thi với quyền của chủ sở hữu. Điều này thường thấy trong các chương trình làm những việc đòi hỏi quyền root, nhưng được người dùng bình thường điều hành: passwdlà một ví dụ như vậy.

Bit SGID, viết tắt của ID nhóm-nhóm, rất giống nhau, nhưng chạy với id nhóm (gid) hiệu quả của chủ sở hữu.

Các bit dính phức tạp hơn một chút, nếu bạn muốn biết thêm thông tin về điều đó, bạn có thể đọc trang hướng dẫn sticky.

Những bit này cũng có thể được sử dụng với các thư mục, nhưng ý nghĩa của chúng thay đổi.

Tôi không tin rằng bạn thực sự có thể thiết lập umaskđể cho phép bạn bật bất kỳ bit bổ sung nào theo mặc định, nhưng có lẽ bạn sẽ không bao giờ muốn làm điều đó.

Tín dụng cho người dùng470379


1
Trên thực tế, bạn không thể cung cấp một giá trị khác không ngoài 3 chữ số cuối. Theo Posix: "Việc giải thích các giá trị chế độ chỉ định các bit chế độ tệp khác với các bit cho phép tệp là không xác định." Theo man 2 umask(cuộc gọi hệ thống tương ứng) "chỉ các bit cho phép tệp maskđược sử dụng". Trong bash, umask 1000 tạo ra một lỗi: "số bát phân ngoài phạm vi". Vậy tại sao lại có thêm 0? Tôi nghĩ rằng nó chỉ để cho thấy rằng số là trong bát phân.
rici

pastebin không có tài liệu tham khảo nào cho dù, vì vậy tôi không thấy nó liên quan như thế nào. chmod không cho phép ba bit đầu tiên được đặt, nhưng umask không cho phép chúng bị che. (tức là bạn cũng có thể đã viết chmod 6777 dropbox. Và, nhân tiện, cũng vậy chmod ug+s.)
rici

Vâng, bạn nói đúng, không biết tôi đang nghĩ gì.
Braiam

@Braiam: Công thức tính mặt nạ mới của bạn là sai, không phải 0666-0022vậy 0666 & ~0022.
cuonglm

1
Tôi nghĩ rằng sự phản đối không phải là cách các con số được viết, mà là việc sử dụng toán tử trừ (-) thay vì bitwise và (&).
BowlOfRed
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.