Máy Tính Chmod

Tính phân quyền tệp trên Linux theo cả hai chiều. Tick đọc, ghi và chạy cho chủ sở hữu, nhóm và những người khác để có chế độ bát phân và lệnh cần chạy — hoặc dán 755, rwxr-xr-x, u+x hay cả một dòng ls -l để thấy chính xác nó nghĩa là gì.

Tính ngay trong trình duyệt của bạn · không có gì được gửi đi · theo hành vi của POSIX và GNU coreutils
Tệp
Thư mục

Gõ 755, dán rwxr-xr-x hoặc cả một dòng ls -l, hoặc đổi chế độ bằng u+x hay go-w.

Loại
Đọc4Ghi2Chạy1Chữ số
Chủ sở hữu4+2+1=7
Nhóm4+1=5
Những người khác4+1=5
Đặc biệtkhông có=0

Nói đơn giản

  • Chủ sở hữu có thể đọc nó, sửa nó và chạy nó.
  • Nhóm và những người khác có thể đọc nó và chạy nó.
  • Tệp này chạy được.

Tính ngay trong trình duyệt của bạn. Không có gì được gửi đi đâu cả.

chmod làm gì?

chmod đặt ai được đọc, ghi và chạy một tệp. Một chế độ gồm mười hai bit, thường viết thành ba hoặc bốn chữ số bát phân: 755, 644, 2775.

Mỗi chữ số trong ba chữ số thuộc về một lớp — chủ sở hữu của tệp, nhóm của tệp và những người khác — và mỗi chữ số là tổng của ba con số: đọc là 4, ghi là 2, chạy là 1. Vậy 7 là đọc, ghi và chạy; 5 là đọc và chạy; 6 là đọc và ghi; 4 là chỉ đọc. Toàn bộ hệ thống chỉ có vậy. chmod 755 script.sh nghĩa là: chủ sở hữu 7, nhóm 5, những người khác 5.

Chữ số thứ tư, khi có, mang ba bit đặc biệt — setuid 4, setgid 2 và bit sticky 1 — và được bỏ đi khi không bit nào được đặt. Máy tính ở trên hiển thị cả bốn chữ số cùng lúc và phép cộng đằng sau từng số, để bạn không phải tra cứu các con số nữa.

Một chế độ gồm mười hai bitchmod 755 script.sh
Trướcscript.sh
Đặc biệts4s2t10
Chủ sở hữur4w2x16
Nhómr4w2x14
Những người khácr4w2x14
-rw-r--r--0644
Sauscript.sh
Đặc biệts4s2t10
Chủ sở hữur4w2x17
Nhómr4w2x15
Những người khácr4w2x15
-rwxr-xr-x0755
chmod 755 đặt mọi bit của chế độ cùng lúc: từ 644, nó bật ba bit chạy, mỗi lớp một bit. Ba bit của mỗi lớp cộng lại thành một chữ số bát phân.
Máy tính chmod hiển thị chế độ 755 dưới dạng lưới phân quyền, các chữ số bát phân, dạng chữ và lệnh chmodMáy tính chmod hiển thị chế độ 755 dưới dạng lưới phân quyền, các chữ số bát phân, dạng chữ và lệnh chmodTick hoặc gõLưới quyền và các ô nhập là một: đổi cái này thì cái kia theo ngay.Từng chữ số4 + 2 + 1 cho mỗi lớp, nên bạn không còn phải học thuộc các con số.Dán gì cũng được755, rwxr-xr-x, u+x hay cả một dòng ls -l — nó đọc được cả bốn.LệnhTạo từ chế độ bạn chọn, với số chữ số đúng và dạng đệ quy không làm phẳng các tệp của bạn.Ý nghĩaMột câu đơn giản, cùng các cảnh báo mà chế độ đó đáng nhận.
Chế độ 755 được tách ra: lưới quyền, phép cộng đằng sau từng chữ số, dạng chữ và lệnh cần chạy. Chọn một con số để xem từng phần cho thấy gì.

Phân quyền tệp trên Linux hoạt động thế nào

Mỗi tệp có một chủ sở hữu, một nhóm và một chế độ. Chế độ cấp ba quyền cho mỗi lớp trong ba lớp — chín bit — và ngay sau ký tự chỉ loại tệp, ls -l in đúng chín ký tự đó.

-rw-r--r-- là một tệp (-) mà chủ sở hữu được đọc và ghi, còn nhóm và những người khác chỉ được đọc: chế độ 644. drwxr-xr-x là một thư mục (d) ở chế độ 755. Ký tự đầu là loại: - là tệp, d là thư mục, l là liên kết tượng trưng, còn b, c, p hoặc s là các loại đặc biệt. Dán bất kỳ dòng nào như vậy vào máy tính, nó sẽ đọc ra chế độ và loại.

Trên một thư mục, ba quyền mang nghĩa khác với trên một tệp. Đọc cho bạn liệt kê các tên bên trong. Chạy cho bạn vào trong và đến được những tệp mà bạn đã biết tên. Ghi, cùng với chạy, cho bạn tạo và xóa các mục — vì vậy việc xóa một tệp phụ thuộc vào quyền của thư mục chứa nó, không phải quyền của tệp. Một thư mục có đọc mà không có chạy là thư mục bạn liệt kê được nhưng không mở được.

Điều ls -l in ra đầu tiênls -l notes.txt
QuyềnTrên một tệpTrên một thư mục
r4Đọc nội dung của nóLiệt kê các tên bên trong
w2Thay đổi nội dung của nóTạo, đổi tên và xóa các mục
x1Chạy nó như một chương trìnhVào trong và mở những gì bên trong

Các ký tự đầu khác: d là thư mục, l là liên kết tượng trưng, còn b, c, p hoặc s là các loại đặc biệt.

chmod 755 nghĩa là gì?

755 nghĩa là chủ sở hữu được đọc, ghi và chạy tệp, còn mọi người khác được đọc và chạy nhưng không được sửa. Đây là chế độ thông thường của một thư mục và của một chương trình.

Từng chữ số: 7 = 4 + 2 + 1, nên chủ sở hữu đọc, ghi và chạy. 5 = 4 + 1 cho nhóm và lại 5 cho những người khác, nên cả hai đều đọc và chạy. Viết đầy đủ là rwxr-xr-x, và dưới dạng lệnh chữ là chmod u=rwx,g=rx,o=rx.

Hãy dùng nó cho các thư mục mà bạn muốn mọi người vào được, và cho các script và tệp nhị phân mà bạn muốn họ chạy được. Đừng dùng cho bất cứ thứ gì bí mật: số 5 cuối cùng nghĩa là mọi tài khoản trên máy đều đọc được tệp. Với tệp của máy chủ web, tài liệu của chính WordPress khuyến nghị 755 hoặc 750 cho thư mục và 644 hoặc 640 cho tệp.

755, từng chữ sốchmod 755
7=r4w2x14+2+1rwxChủ sở hữu
5=r4-2x14+1r-xNhóm
5=r4-2x14+1r-xNhững người khác
Dùng cho
  • Thư mục mà mọi người cần vào
  • Script và chương trình
Không dùng cho
  • Bất cứ thứ gì bí mật: ai cũng đọc được

Tài liệu của chính WordPress: thư mục 755 hoặc 750, tệp 644 hoặc 640.

chmod 644 hay 755: tôi cần cái nào?

644 cho tệp, 755 cho thư mục và cho mọi thứ cần chạy. Khác biệt duy nhất là bit chạy.

644 là rw-r--r--: chủ sở hữu sửa được, mọi người đọc được, không ai chạy được. Đúng cho HTML, CSS, ảnh, tệp cấu hình và mã nguồn. 755 là rwxr-xr-x: giống vậy, thêm bit chạy cho cả ba lớp. Thư mục cần nó, nếu không sẽ không ai vào được thư mục, và một script cần nó, nếu không shell sẽ từ chối chạy.

Sai lầm cần tránh là chmod -R 755 lên cả một website, khiến mọi ảnh và mọi tệp .php đều thành tệp chạy được. Hai lệnh find mà máy tính viết ra đặt chế độ khác nhau cho thư mục và tệp chỉ trong một lượt, với đúng các chế độ bạn đã chọn thay vì một cặp lấy từ một bài blog.

Khác biệt duy nhất là bit chạy644 · 755
644
ĐọcGhiChạy
Chủrw-6
Nhómr--4
Khácr--4

Tệp: HTML, CSS, ảnh, cấu hình, mã nguồn

755
ĐọcGhiChạy
Chủrwx7
Nhómr-x5
Khácr-x5

Thư mục, script và chương trình

Đặt ngược lại
  • 755Một tệp ở 755 chạy được, và mọi ảnh cùng tệp .php dưới một chmod -R 755 cũng vậy.
  • 644Một thư mục ở 644 hiện các tên bên trong, nhưng không ai vào được hay mở được thứ gì bên trong.

chmod 777 làm gì, và có an toàn không?

777 cho mọi tài khoản trên máy đọc, sửa và chạy tệp. Gần như không bao giờ là câu trả lời đúng, và tài liệu của chính WordPress nói không thư mục nào nên được đặt 777.

Ghi được với mọi người nghĩa là bất kỳ ai đăng nhập được — hay bất cứ thứ gì chạy dưới tư cách một người dùng nào, kể cả một tiến trình đã bị xâm nhập — đều thay được nội dung tệp. Nếu tệp đó là một script mà máy chủ web chạy, bạn đã trao cả máy chủ đi. Trang về phân quyền của WordPress khuyến nghị 755 hoặc 750 cho thư mục và 644 hoặc 640 cho tệp, và nói không thư mục nào nên là 777, kể cả thư mục tải lên.

Khi một ứng dụng web không ghi được vào một thư mục, cách sửa nằm ở chủ sở hữu hoặc nhóm, không phải ở chế độ: dùng chown để giao thư mục cho người dùng mà máy chủ web chạy dưới tên đó, hoặc thêm người dùng đó vào một nhóm dùng chung và dùng 775. Máy tính cảnh báo mỗi khi một chế độ cho mọi người ghi: với tệp thì luôn luôn, còn với thư mục thì trừ khi bit sticky ngăn người ta xóa tệp của nhau.

Ai ghi được ở 777chmod 777
777Ai cũng sửa được
ĐọcGhiChạy
Chủrwx7
Nhómrwx7
Khácrwx7
  1. 1Bất kỳ tài khoản nào, hay tiến trình chạy dưới tên một tài khoản
  2. 2thay script
  3. 3và máy chủ web chạy nó
Điều tài liệu yêu cầu

WordPress · Thư mục 755 hoặc 750, tệp 644 hoặc 640.

“Không thư mục nào nên được đặt 777, kể cả thư mục tải lên.”

Cách sửa nằm ở chủ sở hữu hoặc nhóm, không phải chế độ: dùng chown giao nó cho người dùng của máy chủ web, hoặc dùng chung một nhóm và đặt 775.

Vì sao SSH báo quyền khóa của tôi quá rộng?

OpenSSH từ chối dùng một khóa riêng mà ai ngoài chủ sở hữu cũng đọc được. Đặt khóa thành 600 và thư mục .ssh thành 700.

Thông báo chính xác là Permissions 0644 for '<path>' are too open., tiếp theo là It is required that your private key files are NOT accessible by others. Phép thử đằng sau rất thẳng thừng: nếu bạn sở hữu tệp và bất kỳ bit nào của nhóm hoặc của những người khác được đặt, khóa bị từ chối. Vì vậy 640 cũng thất bại, và 600 là câu trả lời chứ không phải “thấp hơn 644 một chút”.

chmod 600 ~/.ssh/id_ed25519 và chmod 700 ~/.ssh sẽ sửa được. Khóa công khai thì ai đọc cũng được — ở đây chỉ khóa riêng và thư mục là quan trọng. Chọn Khóa SSH trong các chế độ thường dùng ở trên và máy tính sẽ viết sẵn cả hai lệnh cho bạn.

Điều ssh in ra
$ssh you@server.example
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/home/you/.ssh/id_ed25519' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
OpenSSH kiểm tra gì
Các tệp, và những chế độ được chấp nhận
  • ~/.ssh/700drwx------Thư mục
  • id_ed25519600-rw-------Khóa riêng của bạn
  • id_ed25519.pub644-rw-r--r--Khóa công khai: ai đọc cũng được
  • config600-rw-------Không ai khác được ghi
Phép thử, từng bit
  • 644rw-r--r--Bị từ chối
  • 640rw-r-----Bị từ chối
  • 600rw-------Được dùng
  • 400r--------Được dùng

Nhóm và những người khác: tất cả phải tắt

Chế độ dạng chữ: u, g, o, a với +, - và =

chmod u+x script.sh thêm một bit mà không đụng đến phần còn lại. + là thêm, - là bỏ, = đặt một lớp thành đúng những gì bạn liệt kê.

Cú pháp là [who][op][permissions], với dấu phẩy giữa các mệnh đề: u là chủ sở hữu, g là nhóm, o là những người khác, a là cả ba. Vậy go-w lấy quyền ghi khỏi nhóm và những người khác, a=rwx đặt tất cả, và u=rw,go=r là một cách khác để viết 644. Dán bất kỳ biểu thức nào trong số đó vào máy tính ở trên và nó sẽ cho thấy những bit nào thay đổi, trước và sau.

Có hai chỗ trong cú pháp dễ nhầm, và máy tính theo đúng cả hai. X — chữ X viết hoa — chỉ thêm bit chạy cho thư mục, hoặc cho một tệp vốn đã chạy được ở đâu đó, nhờ vậy chmod -R u=rwX,go=rX an toàn trên một cây thư mục lẫn lộn. Và một mệnh đề hoàn toàn không có lớp, như +x, không giống a+x: các bit được đặt trong umask của bạn bị để yên, nên với umask thông thường là 022, chmod +rwx trên một tệp 644 cho ra 755, trong khi chmod a+rwx cho ra 777.

ai · phép toán · quyềnchmod u+x script.sh
  • uchủ sở hữu
  • gnhóm
  • onhững người khác
  • acả ba
  • +thêm
  • -bỏ đi
  • =đặt thành đúng
  • rđọc
  • wghi
  • xchạy
  • Xchạy, chỉ với thư mục và với tệp vốn đã chạy được
  • ssetuid hoặc setgid
  • tsticky
Ví dụ minh họa
Thay đổiTrướcSau
u+x644rw-r--r--744rwxr--r--Quyền chạy cho chủ sở hữu, không đụng đến gì khác.
go-w775rwxrwxr-x755rwxr-xr-xLấy quyền ghi khỏi nhóm và những người khác.
a=r755rwxr-xr-x444r--r--r--Cả ba được đặt thành chỉ đọc, và không gì khác.
u=rw,go=r777rwxrwxrwx644rw-r--r--Ba mệnh đề: một cách khác để viết 644.
+rwx644rw-r--r--755rwxr-xr-xKhông có lớp: các bit trong umask (022) không được đặt, nên nhóm và những người khác không có quyền ghi.
a+rwx644rw-r--r--777rwxrwxrwxVới a, umask không được tính: mọi thứ đều được đặt.
a+Xtrên một thư mục644rw-r--r--755rwxr-xr-xChữ X viết hoa trên một thư mục: thêm quyền chạy, vì đó là một thư mục.
a+Xtrên một tệp644rw-r--r--644rw-r--r--Chữ X viết hoa trên một tệp không ai chạy được: không thêm gì.

Setuid, setgid và bit sticky

Chữ số thứ tư. Trên tệp, setuid và setgid đổi tài khoản mà một chương trình chạy dưới tên. Trên thư mục, setgid quyết định nhóm của tệp mới và bit sticky quyết định ai được xóa chúng.

Setuid (4000) trên một tệp thực thi làm nó chạy với quyền của chủ sở hữu tệp thay vì của bạn — passwd được cài với setuid để nó chạy được với quyền của root khi bạn đổi mật khẩu. Setgid (2000) làm điều tương tự cho nhóm. Trên một thư mục, setgid làm một việc khác và hữu ích hơn nhiều: tệp mới bên trong thừa hưởng nhóm của thư mục thay vì nhóm của người tạo, nhờ vậy thư mục dự án dùng chung luôn được dùng chung. Linux không ghi nhận ý nghĩa nào cho bit setuid trên thư mục; trên macOS và các BSD, nó có thể khiến tệp mới lấy chủ sở hữu của thư mục, nếu hệ thống tệp được gắn (mount) với tùy chọn đó.

Bit sticky (1000) trên một thư mục ngăn người ta xóa tệp của nhau: chỉ chủ sở hữu của tệp, chủ sở hữu của thư mục hoặc root mới được xóa hay đổi tên một mục. /tmp có chế độ 1777 chính vì lý do đó — ai cũng được ghi vào, không ai được xóa công việc của người khác. Trên một tệp thông thường, macOS và các BSD bỏ qua bit sticky, và sách hướng dẫn của GNU chỉ gán cho nó một ý nghĩa ở đó trên một số hệ thống cũ. Một cái bẫy: chmod 755 somedir — hay chmod 0755 somedir — không xóa bit setgid đã có sẵn trên một thư mục, vì chmod của GNU cố ý giữ chúng với bất kỳ chế độ dạng số nào có ít hơn năm chữ số — POSIX chỉ yêu cầu dạng bát phân xóa chúng trên một tệp thường. Hãy dùng g-s, hoặc dạng năm chữ số chmod 00755, và máy tính sẽ viết dạng năm chữ số cho bạn mỗi khi bạn cần nó.

Setuid4755

Một chương trình chạy với quyền của chủ sở hữu tệp, không phải của bạn.

Linux-rwsr-xr-x root root /usr/bin/passwd

passwd được cài theo cách này, nên nó chạy với quyền của root khi bạn đổi mật khẩu.

Trên một thư mục: Linux không ghi nhận ý nghĩa nào. Trên macOS và các BSD, tệp mới lấy chủ sở hữu của thư mục nếu hệ thống tệp được gắn với tùy chọn đó.

Setgid2775

Trong một thư mục, tệp mới lấy nhóm của thư mục thay vì nhóm của bạn.

Linuxdrwxrwsr-x you devs project/

Một thư mục dự án dùng chung luôn được dùng chung: mọi tệp mới đều thuộc về cả nhóm.

Trên macOS và các BSD, một tệp mới luôn lấy nhóm của thư mục chứa nó, dù có bit này hay không.

Sticky1777

Trong một thư mục, chỉ chủ sở hữu của tệp, chủ sở hữu của thư mục hoặc root mới được xóa hay đổi tên một tệp.

macOSdrwxrwxrwt root wheel /private/tmp

Ai cũng được ghi vào /tmp, và không ai được xóa tệp của người khác.

Trên một tệp, bit sticky bị bỏ qua trên macOS và các BSD.

Cái bẫy của GNU: chmod 755 trên một thư mục vẫn để nguyên bit setgid của nó.

$chmod 755 project → drwxr-sr-xXóa nó bằng năm chữ số hoặc bằng dạng chữ:$chmod 00755 project → drwxr-xr-x$chmod g-s project → drwxr-xr-x

umask: tệp mới nhận quyền gì

Tệp mới bắt đầu từ 666 và thư mục mới từ 777, và mọi bit được đặt trong umask đều bị tắt. Umask thông thường là 022 cho ra 644 và 755.

umask không phải là phép trừ, mà là một mặt nạ: mọi bit được đặt trong umask đều bị tắt trong chế độ mà chương trình yêu cầu. Với umask 077, một tệp mới là 600 và một thư mục mới là 700 — mặc định là riêng tư. Với umask 002 bạn có 664 và 775: nhóm cũng ghi được.

Một umask không bao giờ làm một tệp chạy được, vì chế độ gốc của tệp vốn không có bit chạy nào — chỉ thư mục mới bắt đầu từ 777. Đó là lý do một script bạn vừa tạo không bao giờ chạy được cho đến khi bạn gõ chmod +x. Chuyển sang thẻ umask ở trên để xem một umask bất kỳ cho ra gì, và mở kết quả ngay trong máy tính.

Bị tắt, từng bitumask 022
Tệp mới
Bắt đầu từrw-rw-rw-666
umask····w··w·022
Nhậnrw-r--r--644
Thư mục mới
Bắt đầu từrwxrwxrwx777
umask····w··w·022
Nhậnrwxr-xr-x755
Các giá trị umask thường dùng
umaskTệp mớiThư mục mới
022644 rw-r--r--755 rwxr-xr-x
002664 rw-rw-r--775 rwxrwxr-x
027640 rw-r-----750 rwxr-x---
077600 rw-------700 rwx------

Không umask nào làm một tệp chạy được: một tệp mới bắt đầu mà không có bit chạy nào để giữ lại.

Cách đổi một thư mục và mọi thứ bên trong

chmod -R 755 folder đặt cùng một chế độ cho thư mục và tệp, khiến mọi tệp đều chạy được. Hai lệnh find cho mỗi loại đúng chế độ nó cần.

find folder -type d -exec chmod 755 {} + và find folder -type f -exec chmod 644 {} + mỗi lệnh duyệt cây một lần và đặt chế độ riêng cho thư mục và tệp. Máy tính viết cả hai với các chế độ bạn đã chọn, không phải một cặp cố định. Dấu + ở cuối gom các tệp vào càng ít lần chạy chmod càng tốt, điều này quan trọng trên một cây thư mục lớn.

Cách an toàn còn lại là chữ X viết hoa: chmod -R u=rwX,go=rX folder chỉ thêm bit chạy cho thư mục và cho các tệp vốn đã chạy được. Và sau bất kỳ thay đổi đệ quy nào, stat -c '%a %n' folder/* đọc lại mọi thứ ở một cấp bên dưới.

Một thư mục, bốn cách
Thư mụcHiện tại1234
site/755755644755755
index.html644755644644644
app.php644755644644644
deploy.sh755755644644755
img/755755644755755
logo.png644755644644644
  1. 1$chmod -R 755 siteMọi tệp đều chạy được
  2. 2$chmod -R 644 siteKhông thư mục nào vào được
  3. 3$find site -type d -exec chmod 755 {} +$find site -type f -exec chmod 644 {} +Mỗi loại có chế độ riêngMột script cũng mất x của nó
  4. 4$chmod -R u=rwX,go=rX siteMỗi loại có chế độ riêngMột tệp vốn đã chạy được giữ nguyên x của nó

Windows có chmod không?

Không giống nhau. Windows dùng danh sách kiểm soát truy cập (ACL), và icacls là lệnh gần nhất: icacls file /grant Users:(RX).

Quyền NTFS là một danh sách các mục, mỗi mục nêu một người dùng hoặc nhóm và các quyền của họ, nên không có một số ba chữ số duy nhất để tính. Phép dịch gần nhất là theo từng lớp: đọc thành R, đọc và chạy thành RX, ghi thành W, và chỉ chạy một mình thì thành quyền riêng X; một chữ số cần hai quyền thì liệt kê cả hai — 7 là (RX,W). Không chữ số nào ứng với Modify (M), quyền còn cho phép xóa, hay Full control (F), quyền còn cho phép đổi quyền và chiếm quyền sở hữu. Máy tính hiển thị phép ánh xạ đó cạnh chế độ của bạn, và đó là một phép xấp xỉ gần nhất, không phải tương đương.

Bên trong Windows Subsystem for Linux, chmod hoạt động đúng trên hệ thống tệp Linux. Trên một ổ Windows được gắn dưới /mnt/c, nó chỉ hoạt động khi ổ đó được gắn với tùy chọn metadata. Nếu không, chế độ được suy ra từ quyền Windows của bạn, giống nhau cho chủ sở hữu, nhóm và những người khác, và chmod gần như chỉ đặt được thuộc tính chỉ đọc — nên một khóa để bên phía Windows có thể bị coi là quá rộng, và chmod 600 sẽ không sửa được ở đó.

Mỗi chữ số chmod, quyền icacls gần nhất của nóicacls
Chữ sốChữQuyền gần nhất
7rwx(RX,W)Đọc, ghi và chạy
6rw-(R,W)Đọc và ghi
5r-x(RX)Đọc và chạy
4r--(R)Đọc
3-wx(W,X)Ghi và chạy
2-w-(W)Ghi
1--x(X)Chạy
0---—Không có quyền

Một phép xấp xỉ gần nhất, không phải tương đương: Windows giữ một danh sách các mục, mỗi mục nêu ai nhận quyền nào. Không chữ số nào ứng với Modify (M), quyền còn cho phép xóa, hay Full control (F), quyền còn cho phép đổi quyền (WDAC) và chiếm quyền sở hữu (WO). Trên cả hai hệ thống, chủ sở hữu luôn được đổi quyền của một tệp.

Trong WSL
  • /homeTrên hệ thống tệp Linux: chmod hoạt động như trên mọi Linux.
  • /mnt/cTrên /mnt/c không có tùy chọn metadata: các chế độ lấy từ quyền Windows, và chmod gần như không đổi gì.
  • /mnt/c · metadataVới metadata: chmod hoạt động, nhưng không bao giờ vượt quá điều Windows cho phép bạn.

Cách kiểm tra quyền của một tệp

ls -l hiển thị chúng dưới dạng chữ và stat hiển thị dưới dạng số. Dán cái nào vào máy tính cũng được, nó sẽ đọc lại chế độ.

ls -l file in ra -rw-r--r-- 1 you staff 4096 25 Oct 09:26 file, và máy tính nhận cả dòng — bạn không phải tự nhặt chế độ ra. stat -c '%a %n' file in ra 644 file trên Linux; trên macOS cùng việc đó là stat -f '%Lp %N' file. Để xem cả một thư mục cùng lúc, find . -maxdepth 1 -printf '%m %p\n' của GNU liệt kê mọi chế độ dưới dạng số (find của macOS không có -printf).

Một dấu + ở cuối chuỗi quyền nghĩa là có nhiều hơn chín bit: trên Linux đó là một POSIX ACL, mà getfacl hiển thị, và những mục thêm đó hoàn toàn không nằm trong chế độ. Trên macOS, @ nghĩa là thuộc tính mở rộng và + nghĩa là thông tin bảo mật mở rộng. Với ls của GNU, một dấu chấm (.) nghĩa là một ngữ cảnh bảo mật, chẳng hạn của SELinux. Máy tính chấp nhận cả ba dấu hiệu và cho bạn biết chế độ chỉ là một phần của câu chuyện.

Một dòng ls -l, từng trườngls -l notes.txt
-Loạirw-r--r--Quyền+Dấu hiệu1Số liên kếtyouChủ sở hữustaffNhóm4096Kích thước25 Oct 09:26Ngày đổinotes.txtTên
Chế độ dưới dạng số
  • Linux$stat -c '%a %n' notes.txt644 notes.txt
  • macOS$stat -f '%Lp %N' notes.txt644 notes.txt
Ký tự sau chế độ
  • -rw-r--r--+Linux: một POSIX ACL (getfacl liệt kê nó). macOS: thông tin bảo mật mở rộng như một ACL.
  • -rw-r--r--@macOS: thuộc tính mở rộng.
  • -rw-r--r--.ls của GNU: một ngữ cảnh bảo mật, chẳng hạn của SELinux, và không có gì khác.
  • -rw-r--r-- Không có gì thêm: chín bit là toàn bộ câu chuyện.

Máy tính chmod: hỏi và đáp

chmod 755 nghĩa là gì?

Nó cho chủ sở hữu đọc, ghi và chạy, và cho mọi người khác đọc và chạy. Viết đầy đủ là rwxr-xr-x. Các chữ số là tổng: 7 là 4 + 2 + 1 và 5 là 4 + 1. Dùng cho thư mục, vốn cần bit chạy thì mới có ai vào được, và cho script và chương trình. Không bao giờ dùng cho một tệp cần giữ riêng tư.

chmod 644 và 755 khác nhau thế nào?

Một bit cho mỗi lớp: bit chạy. 644 là rw-r--r--, đúng cho tài liệu, ảnh, tệp cấu hình và mã nguồn. 755 là rwxr-xr-x, đúng cho thư mục và cho mọi thứ cần chạy. Cho tệp 755 khiến từng tệp đều chạy được, vì vậy chmod -R 755 đệ quy lên một website là một sai lầm; hãy đặt thư mục và tệp riêng.

chmod 777 làm gì, và có an toàn không?

Nó cho mọi tài khoản trên máy đọc, sửa và chạy tệp. Gần như không bao giờ cần thiết và là một rủi ro thật trên máy chủ dùng chung hoặc nối với internet: bất cứ thứ gì ghi được một script mà máy chủ chạy đều có thể chiếm máy chủ. Tài liệu của chính WordPress yêu cầu 755 hoặc 750 và 644 hoặc 640, và nói không thư mục nào nên là 777. Khi một ứng dụng không ghi được vào đâu đó, hãy đổi chủ sở hữu hoặc nhóm, không phải chế độ.

chmod +x làm gì?

Nó thêm bit chạy để một tệp chạy được. Lưu ý +x không có lớp thì không hẳn là a+x: một mệnh đề không có lớp để yên các bit trong umask của bạn, nên với umask thông thường là 022, chủ sở hữu, nhóm và những người khác đều có quyền chạy, còn một umask chặt hơn như 077 thì chỉ cho chủ sở hữu. Hãy viết chmod a+x hoặc chmod u+x khi bạn muốn chắc chắn là ai.

chmod 600 nghĩa là gì, và vì sao SSH cần nó?

600 là rw-------: chỉ chủ sở hữu đọc hoặc sửa được tệp. OpenSSH từ chối một khóa riêng mà bất kỳ tài khoản nào khác đọc được, với thông báo Permissions 0644 for '<path>' are too open. Phép kiểm tra rất nghiêm: nếu bạn sở hữu tệp và có bất kỳ bit nhóm hoặc bit của những người khác nào được đặt, khóa bị từ chối, nên 640 cũng thất bại. Hãy dùng chmod 600 cho khóa và chmod 700 cho ~/.ssh.

Chữ số thứ tư trong chmod nghĩa là gì?

Nó mang ba bit đặc biệt: setuid 4, setgid 2 và bit sticky 1. chmod 2775 folder đặt setgid để tệp mới bên trong lấy nhóm của thư mục. chmod 1777 folder đặt bit sticky để người ta không xóa được tệp của nhau, đúng như /tmp dùng. Chữ số này được bỏ đi khi không bit nào được đặt.

Vì sao chmod 755 không gỡ bit setgid khỏi thư mục của tôi?

Vì chmod của GNU giữ setuid và setgid trên một thư mục bất cứ khi nào chế độ dạng số có ít hơn năm chữ số — kể cả 0755. Đó là cố ý và tuân thủ chuẩn: POSIX chỉ yêu cầu dạng bát phân xóa các bit đó trên một tệp thường. Hãy dùng dạng chữ chmod g-s folder, hoặc viết thêm các số 0 đứng đầu thành chmod 00755 folder. Máy tính này tự viết dạng năm chữ số khi thay đổi của bạn cần nó.

chmod và chown khác nhau thế nào?

chmod đặt những gì chủ sở hữu, nhóm và những người khác được làm. chown đặt chủ sở hữu và nhóm thực sự là ai. Chúng trả lời hai nửa khác nhau của cùng một câu hỏi, và lỗi “permission denied” trên một máy chủ web thường là vấn đề quyền sở hữu hơn là vấn đề chế độ — các tệp thuộc về sai người dùng, và không chế độ nào ngoài 777 che được điều đó.

Tôi có thể dán một dòng ls -l vào máy tính này không?

Được — cả dòng, không chỉ chế độ. -rw-r--r-- 1 you staff 4096 25 Oct 09:26 notes.txt được đọc là chế độ 644 trên một tệp, và drwxrwsr-x là 2775 trên một thư mục. Dấu ACL +, dấu chấm của ngữ cảnh bảo mật và @ của macOS đều được hiểu. Bạn cũng có thể dán một biểu thức thay đổi như u+x hoặc go-w và xem những bit nào nó đổi.

Dấu + hoặc @ sau các quyền nghĩa là gì?

Chúng cho biết chín bit không phải là toàn bộ câu chuyện. Trên Linux, + nghĩa là tệp có một POSIX ACL với các mục ngoài chủ sở hữu, nhóm và những người khác — getfacl hiển thị chúng, và chúng không thuộc chế độ. Với ls của GNU, một dấu chấm nghĩa là một ngữ cảnh bảo mật, chẳng hạn của SELinux. Trên macOS, @ nghĩa là thuộc tính mở rộng và + nghĩa là thông tin bảo mật mở rộng. Nếu quyền hoạt động lạ dù chế độ hợp lý, hãy xem ở đó.

Windows có lệnh tương đương chmod không?

Windows dùng danh sách kiểm soát truy cập thay vì một chế độ, nên không có phép tương đương chính xác. icacls file /grant Users:(RX) là lệnh gần nhất, và máy tính hiển thị các quyền gần nhất cho chế độ của bạn. Bên trong WSL, chmod hoạt động bình thường trên hệ thống tệp Linux, nhưng trên một ổ Windows dưới /mnt/c nó gần như không có tác dụng trừ khi ổ đó được gắn với tùy chọn metadata.

umask 022 cho tôi gì?

644 cho một tệp mới và 755 cho một thư mục mới. Một tệp mới bắt đầu từ 666 và một thư mục từ 777, và mọi bit được đặt trong umask đều bị tắt. Vì một tệp không bao giờ bắt đầu với bit chạy, không umask nào làm nó chạy được — đó luôn là một chmod +x về sau. Dùng thẻ umask ở trên để thử bất kỳ giá trị nào và mở kết quả trong máy tính.

Còn thiếu điều gì?Đề xuất tính năng hoặc công cụ mới