Linux permission trả lời ba câu hỏi: ai, được làm gì, với file nào.
1 | ls -l 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 | r = 4 |
1 | chmod 640 app.log # owner rw, group r, others none |
Dùng symbolic mode khi thay đổi có chủ đích rõ hơn:
1 | chmod u+x deploy.sh |
Ownership
1 | chown hudson: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 | chmod 1777 /tmp |
Nguyên tắc
- Cấp quyền tối thiểu.
- Không dùng
chmod -R 777như nghi lễ gọi server sống lại. - Cẩn thận recursive
chown/chmodvới symlink và system path. - Dùng ACL khi owner/group/others không đủ biểu đạt.
1 | getfacl file |