Công cụ tính quyền chmod

Quyền Unix: ô đánh dấu, số bát phân và rwx, bit đặc biệt, umask và chmod u+x.

Quyền
QuyềnĐọcGhiThực thi
Chủ sở hữu (u)
Nhóm (g)
Người khác (o)
Bit đặc biệt

3 hoặc 4 chữ số, ví dụ 755 hoặc 2775.

Như trong ls -l, ví dụ rwxr-xr-x hoặc -rw-r--r--.

Áp dụng cho

Kết quả

Số bát phân

0755

ls -l hiển thị

-rwxr-xr-x

Lệnh

chmod 755 file
chmod u=rwx,g=rx,o=rx file

Ý nghĩa
  • Chủ sở hữu (u): đọc, sửa, chạy
  • Nhóm (g): đọc, chạy
  • Người khác (o): đọc, chạy

Công cụ này làm gì

Ba thẻ cho quyền tệp Unix:

  • Tính quyền. Đánh dấu đọc, ghi, thực thi cho chủ sở hữu, nhóm và người khác, hoặc gõ số bát phân (755, 2775) hay dạng ký hiệu của ls -l (rwxr-xr-x). Ba dạng luôn khớp nhau; kết quả gồm số bốn chữ số, thứ ls -l sẽ in, lệnh chmod sẵn để sao chép, và mỗi nhóm thật sự làm được gì với tệp hoặc thư mục.
  • umask. Gõ umask như 022 hay 027 để xem quyền của tệp mới và thư mục mới, cùng dạng umask -S.
  • Áp dụng chmod. Bắt đầu từ một quyền, gõ biểu thức như u+x,go-w, a=rX, g=u và xem kết quả sau từng mệnh đề.

Đọc số mà không cần học thuộc

Mỗi chữ số là một nhóm: chủ sở hữu, nhóm, người khác. Trong một chữ số, đọc là 4, ghi là 2, thực thi là 1, cộng lại: 7 = rwx, 6 = rw-, 5 = r-x, 4 = r--, 0 = ---. Vậy 755 là rwx cho chủ và r-x cho mọi người, quyền thường dùng cho chương trình và thư mục; 644 là rw- cho chủ và r-- cho người khác, quyền thường dùng cho tài liệu, trang web. 600 giữ tệp riêng tư, đúng như SSH yêu cầu với khóa bí mật.

Chữ số thứ tư ở đầu chứa bit đặc biệt: setuid là 4, setgid là 2, sticky là 1. 4755 là chương trình setuid như passwd; 1777 là /tmp, ai cũng ghi được nhưng chỉ chủ của tệp mới xóa được; 2775 trên thư mục chung khiến tệp mới thừa hưởng nhóm của thư mục. Trong ls -l, chúng thay chỗ chữ x: s, t khi bit x cũng bật, chữ hoa S, T khi không, thường là dấu hiệu nhầm lẫn.

Tệp và thư mục khác nhau

Với tệp, r là đọc nội dung, w là sửa, x là chạy như chương trình. Với thư mục, r là liệt kê tên, x là đi vào và truy cập theo tên, w là tạo, đổi tên, xóa mục bên trong (cần cả x). Xóa một tệp phụ thuộc quyền của thư mục chứa nó, không phải của tệp.

umask và chmod dạng ký hiệu

Chương trình tạo tệp với 666 và thư mục với 777; umask bớt bit từ đó. umask 022 cho tệp 644 và thư mục 755, 027 cho 640 và 750, 077 giữ mọi thứ riêng tư. umask không bao giờ thêm quyền thực thi cho tệp mới, nên script vừa viết cần chmod +x. Trong biểu thức, X chỉ thêm thực thi cho thư mục và tệp đã có bit x, nên chmod -R a+rX an toàn cho cả cây tài liệu. Toán tử = xóa setuid với u, setgid với g, sticky với o như chmod GNU trên Linux; chmod của macOS và BSD giữ bit sticky khi dùng o=.

Đọc thêm cách đọc số chmod và umask không cần học thuộc, hoặc đổi cơ số khác bằng công cụ đổi hệ cơ số.

Câu hỏi thường gặp

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

755 cho chủ đọc, ghi, thực thi, người khác đọc và thực thi: hợp với chương trình, script, thư mục. 644 cho chủ đọc, ghi, người khác chỉ đọc: hợp với tệp thông thường như tài liệu, ảnh, trang web.

Vì sao chmod 777 là ý tồi?

Nó cho mọi người dùng trên máy, và mọi tiến trình trên máy chủ web, sửa hoặc thay tệp. Thường nó che đi vấn đề thật là sai chủ sở hữu hay nhóm. Hãy sửa bằng chown rồi dùng 755 hoặc 644.

Chữ S hoặc T viết hoa trong ls -l nghĩa là gì?

Bit setuid, setgid hoặc sticky đang bật nhưng bit thực thi bên dưới thì không. Tệp setuid mà không chạy được thì vô dụng, nên chữ hoa thường báo hiệu một sai sót.

Nên dùng umask nào?

022 là mặc định phổ biến: người khác đọc được nhưng không sửa được. 027 bỏ hẳn quyền của người khác, 077 khiến tệp mới chỉ mình bạn truy cập.