Linux File Permissions: đọc rwx, dùng chmod, đừng chữa cháy bằng 777

Linux permission trả lời ba câu hỏi: ai, được làm gì, với file nào.

1
2
ls -l app.log
-rw-r----- 1 hudson developers 1200 Aug 20 app.log

Chuỗi permission chia thành:

  • ký tự đầu: loại file (-, d, l…);
  • ba ký tự cho owner;
  • ba ký tự cho group;
  • ba ký tự cho others.

r, w, x là read, write, execute.

File và directory không giống nhau

Với file:

  • r: đọc nội dung;
  • w: sửa nội dung;
  • x: thực thi.

Với directory:

  • r: liệt kê tên entry;
  • w: tạo/xóa/đổi tên entry;
  • x: traverse và truy cập entry bên trong.

Xóa file phụ thuộc permission của directory cha, không chỉ permission trên file. Đây là chi tiết khiến nhiều người nhìn -rw-r--r-- rồi tranh luận với kernel.

Numeric mode

1
2
3
r = 4
w = 2
x = 1
1
2
chmod 640 app.log # owner rw, group r, others none
chmod 750 bin # owner rwx, group rx, others none

Dùng symbolic mode khi thay đổi có chủ đích rõ hơn:

1
2
chmod u+x deploy.sh
chmod g-w config.yml

Ownership

1
2
chown hudson:developers app.log
chgrp developers app.log

chmod đổi quyền; chown đổi owner/group. Hai command giải quyết hai bài toán khác nhau.

Special bits

  • setuid/setgid trên executable thay đổi effective identity khi chạy.
  • setgid trên directory khiến file mới kế thừa group.
  • sticky bit trên shared directory chỉ cho owner/root xóa entry của mình.
1
2
chmod 1777 /tmp
chmod 2775 shared-directory

Nguyên tắc

  • Cấp quyền tối thiểu.
  • Không dùng chmod -R 777 như nghi lễ gọi server sống lại.
  • Cẩn thận recursive chown/chmod với symlink và system path.
  • Dùng ACL khi owner/group/others không đủ biểu đạt.
1
2
getfacl file
setfacl -m u:alice:r file

Reference