Quyền file là một trong những cơ chế bảo vệ nền tảng của Linux. Hiểu sai một ký tự trong chuỗi rwx có thể khiến ứng dụng không chạy, người dùng không truy cập được dữ liệu hoặc tệ hơn là mở quyền ghi cho tất cả mọi người.
Bài viết này giải thích mô hình owner-group-others, cách dùng chmod, chown, chgrp, umask và khi nào nên dùng ACL thay vì liên tục thay đổi group.
Đọc quyền file bằng ls -l
ls -l /var/www/example
-rw-r----- 1 deploy www-data 2840 Sep 18 10:30 config.php
Ký tự đầu cho biết loại đối tượng: - là file thường, d là thư mục và l là symbolic link. Chín ký tự tiếp theo chia thành ba nhóm:
rw-: quyền của ownerdeploy.r--: quyền của groupwww-data.---: quyền của những người dùng còn lại.
r, w, x có ý nghĩa khác nhau trên thư mục
| Quyền | Trên file | Trên thư mục |
|---|---|---|
r | Đọc nội dung | Liệt kê tên bên trong |
w | Thay đổi nội dung | Tạo, xóa hoặc đổi tên mục con |
x | Thực thi file | Đi xuyên qua thư mục để truy cập mục con |
Một người dùng có thể biết tên file nhờ quyền đọc thư mục nhưng vẫn không mở được file nếu thiếu quyền x trên đường dẫn.
Dùng chmod dạng ký hiệu
Dạng ký hiệu thường dễ review hơn vì thể hiện rõ đối tượng và thay đổi:
chmod u+x deploy.sh
chmod g-w config.php
chmod o= private.txt
chmod a+r README.md
u, g, o, a lần lượt là owner, group, others và tất cả; + thêm quyền, - bỏ quyền, còn = đặt chính xác quyền mới.
Dùng chmod dạng số
Mỗi quyền có giá trị: đọc là 4, ghi là 2, thực thi là 1. Cộng theo từng nhóm owner-group-others:
640: owner đọc/ghi, group chỉ đọc, others không có quyền.750: owner đầy đủ, group đọc/thực thi, others không có quyền.644: thường dùng cho file công khai chỉ owner được sửa.755: thường dùng cho thư mục hoặc chương trình cần mọi người truy cập/thực thi.
chmod 640 config.php
chmod 750 scripts
Không dùng chmod -R 777 như một cách chữa lỗi quyền. Nó che giấu nguyên nhân và trao quyền ghi/thực thi quá rộng.
Đổi owner và group với chown, chgrp
sudo chown deploy app.log
sudo chown deploy:www-data app.log
sudo chgrp www-data storage
sudo chown -R deploy:www-data /var/www/example
Hãy kiểm tra kỹ đường dẫn trước lệnh đệ quy. Với ứng dụng web, chỉ những thư mục thực sự cần ghi như cache hoặc upload mới nên có quyền ghi cho tiến trình web.
Đặt group kế thừa bằng setgid
Trên thư mục cộng tác, setgid giúp file mới kế thừa group của thư mục:
sudo chgrp developers /srv/project
sudo chmod 2775 /srv/project
Chữ số 2 đầu bật setgid. Đây thường là lựa chọn rõ ràng hơn việc sửa group thủ công sau mỗi lần tạo file.
umask quyết định quyền mặc định
umask
umask 027
umask loại bớt quyền khỏi mức mặc định của file và thư mục. Với 027, file thường có xu hướng thành 640, thư mục thành 750. Cấu hình thực tế còn phụ thuộc shell, service manager và ứng dụng.
Khi nào cần ACL?
Mô hình owner-group-others không tiện khi cần cấp riêng cho một người dùng mà không muốn thay owner hoặc group chính. ACL giải quyết trường hợp này:
getfacl report.csv
setfacl -m u:analyst:r report.csv
setfacl -m d:g:developers:rwx /srv/project
setfacl -x u:analyst report.csv
ACL mặc định trên thư mục có thể truyền quyền cho mục mới. Hãy đọc dòng mask trong getfacl, vì mask giới hạn quyền hiệu lực của named users và groups.
Checklist xử lý lỗi Permission denied
- Dùng
namei -l /duong/dan/fileđể kiểm tra mọi thư mục cha. - Xác nhận user và group của tiến trình bằng
pshoặc cấu hình service. - Kiểm tra quyền cơ bản bằng
ls -ld. - Kiểm tra ACL với
getfacl. - Xem mount có cờ
rohoặcnoexechay không. - Kiểm tra AppArmor/SELinux nếu quyền Unix đã đúng.




Chưa có bình luận. Hãy là người đầu tiên chia sẻ ý kiến.