Làm thế nào là quyền tập tin được áp dụng cho các tập tin mới được tạo ra?


12

Tôi có một thư mục có các quyền sau:

drwxr-s---. user group folder

Trên máy tính để bàn, tôi truy cập thư mục này và nhấp chuột phải để tạo một cuộc gọi tệp mới foo.txt. Sau đó, sử dụng thiết bị đầu cuối, tôi tạo một tệp khác bằng lệnh $ touch bar.txt.

Khi tôi kiểm tra quyền cho các tệp này, tôi có:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

Tôi đã mong đợi -rw-r-----. user group. Làm thế nào mà quyền viết thêm cho nhóm và đọc quyền cho người khác xuất hiện?

Câu trả lời:


16

ngụy biện

Có 2 lực lượng ở đây tại nơi làm việc. Đầu tiên là bit setgid được kích hoạt trên thư mục , folder.

drwxr-s---. user group folder

Đó là strong gói các nhân vật ở đầu dòng này. Họ được nhóm lại như vậy:

d - directory
rwx - read/write/execute bits for user
r-s - read/execute/setuid bits for group
--- - nothing for other users

r-snghĩa là bất kỳ tệp hoặc thư mục nào được tạo trong thư mục này sẽ có nhóm tự động được đặt thành nhóm group.

Đó là những gì gây ra các tập tin foo.txtbar.txtđược tạo ra như vậy:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

quyền và ô

Các quyền bạn đang thấy là một vấn đề khác. Chúng được điều chỉnh bởi các cài đặt cho của bạn umask. Bạn có thể thấy những gì bạn umaskđược thiết lập với lệnh umask:

$ umask
0002

LƯU Ý: các bit này còn được gọi là bit "chế độ".

Đó là một mặt nạ để nó sẽ vô hiệu hóa bất kỳ bit nào liên quan đến quyền được kích hoạt. Trong ví dụ này, bit duy nhất tôi muốn tắt là quyền ghi cho người khác.

0 - skipping for this conversation
0 - value of user bits
0 - value of group bits
2 - value of other bits

Việc biểu diễn các "bit" trong lệnh này ở dạng thập phân. Vì vậy, 2 tương đương với 010 ở dạng nhị phân, đó là bit ghi. 4 (100) có nghĩa là bạn muốn đọc bị vô hiệu hóa. 7 (111) có nghĩa là bạn muốn đọc / ghi / thực thi tất cả bị vô hiệu hóa. Xây dựng nó từ đây:

$ umask 007

Sẽ vô hiệu hóa các bit đọc / ghi / thực thi cho người dùng khác.

Vì vậy, những gì về các tập tin của bạn?

Vâng, umaskđiều chỉnh các quyền sẽ được thiết lập khi một tệp mới được tạo. Vì vậy, nếu chúng ta có bộ sau umask:

$ umask 007

Và bắt đầu chạm vào các tệp mới, chúng tôi sẽ thấy chúng được tạo như vậy:

$ touch newfile1.txt newfile2.txt
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile2.txt

Nếu chúng ta thay đổi nó thành một cái gì đó khác, hãy nói điều này:

$ umask 037
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

Nó sẽ không có bất kỳ tác động nào đối với các tệp mà chúng tôi đã tạo. Xem tại đây:

$ umask
0037
$ touch newfile1.txt newfile2.txt
$ ls -l | grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

Vậy thì chuyện gì đang xảy ra với trình duyệt tập tin?

Đây umasklà cái mà tôi gọi là cài đặt "mềm". Nó hoàn toàn không phải là tuyệt đối và có thể được thông qua khá dễ dàng trong Unix theo một số cách. Nhiều công cụ có các công tắc cho phép bạn chỉ định các quyền như là một phần của hoạt động của chúng.

Lấy mkdirví dụ:

$ umask
0037

$ mkdir -m 777 somedir1
$

$ ls -ld somedir1
drwxrwxrwx 2 saml saml 4096 Nov  3 22:44 somedir1

Với công -mtắc chúng ta có thể ghi đè umask. Các touchlệnh không có thiết bị này, do đó bạn có để có được sáng tạo. Xem phần Hỏi & Đáp về U & L này có tiêu đề: Các tệp có thể được tạo với quyền được đặt trên dòng lệnh không? chỉ cho các phương pháp như vậy.

Những cách khác? Chỉ cần ghi đè umask. Trình duyệt tệp rất có thể đang làm điều này hoặc hoàn toàn bỏ qua umaskvà đặt tệp xuống bằng bất kỳ quyền nào được cấu hình để thực hiện.


Tôi nghĩ umask là để loại bỏ đặc quyền, không thêm. Hay tôi đang thiếu một cái gì đó?
Câu hỏi tràn

@QuestionOverflow - bạn che dấu kiểm soát những quyền nào được phép khi tệp và thư mục được tạo. Do đó tên của nó. Nó che dấu các bit khỏi được sử dụng trong quá trình tạo.
slm

Ô của tôi đọc 0002. Nếu umask không đặt quyền thay vì xóa quyền, thì bit thực thi sẽ được đặt cho cả người dùng và nhóm khi tôi thực hiện touch, nhưng thực tế thì không.
Câu hỏi tràn

@QuestionOverflow - đó là một hạn chế của touchlệnh. Xem liên kết tôi có trong A. Liên kết này: unix.stackexchange.com/questions/47178/ dọa
slm

Chỉ cần làm rõ một vài điểm dựa trên các nhận xét: 1) quyền của tệp mới luôn được xác định bởi umask + chương trình được sử dụng để tạo tệp, 2) quyền không bao giờ được kế thừa từ thư mục mẹ.
Câu hỏi tràn
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.