Khi triển khai website hoặc ứng dụng trên VPS, phân quyền file không đúng có thể khiến dịch vụ không đọc được dữ liệu, không ghi được tệp tải lên hoặc vô tình để lộ thông tin nhạy cảm. Hai lệnh thường dùng để xử lý vấn đề này là chmod và chown.
Bài viết giúp bạn hiểu cách đọc quyền truy cập trên Linux, biết khi nào cần thay đổi quyền và cách áp dụng lệnh an toàn cho file, thư mục. Trước khi thao tác trên hệ thống đang chạy, hãy xác định rõ tài khoản nào cần truy cập và chỉ cấp mức quyền thực sự cần thiết.
Quyền truy cập file trên Linux hoạt động thế nào?
Quản trị viên kiểm tra quyền file Linux trên VPS
Linux xác định quyền truy cập dựa trên ba nhóm: chủ sở hữu (user), nhóm sở hữu (group) và những người dùng khác (others). Mỗi nhóm có thể được cấp ba loại quyền:
r (read): đọc nội dung file hoặc xem danh sách bên trong thư mục.
w (write): chỉnh sửa file hoặc tạo, xóa nội dung trong thư mục.
x (execute): chạy file chương trình; với thư mục, quyền này cho phép đi vào hoặc truy cập các mục bên trong khi biết đường dẫn.
Để xem quyền hiện tại, dùng ls -l:
ls -l
Ví dụ kết quả:
-rw-r----- 1 appuser web 2048 Apr 10 09:30 settings.php
Chuỗi -rw-r----- gồm ký tự đầu tiên cho biết loại đối tượng; dấu - thường là file, còn d là thư mục. Chín ký tự tiếp theo chia thành ba nhóm: rw- dành cho chủ sở hữu, r-- dành cho nhóm, và --- dành cho người khác. Trong ví dụ, chủ sở hữu có thể đọc và sửa file, nhóm chỉ đọc được, còn người dùng khác không có quyền.
Với thư mục, quyền có ý nghĩa hơi khác so với file. Quyền r cho phép liệt kê tên mục, w cho phép tạo hoặc xóa mục bên trong, còn x cho phép truy cập vào thư mục. Vì vậy, một thư mục có r nhưng thiếu x có thể hiển thị tên tệp nhưng không cho truy cập nội dung theo cách thông thường. Khi kiểm tra đường dẫn, hãy xem quyền của cả thư mục cha, không chỉ file cuối cùng.
chmod là gì và cách thay đổi quyền file?
Minh họa thay đổi quyền file bằng lệnh chmod
chmod là lệnh thay đổi quyền đọc, ghi và thực thi của file hoặc thư mục. Bạn có thể dùng cách ký hiệu hoặc cách số. Cách ký hiệu dễ hiểu khi chỉ cần thêm hay bỏ một quyền cụ thể; cách số thường gọn hơn khi muốn đặt toàn bộ quyền một lần.
Dùng ký hiệu để thêm hoặc bỏ quyền
Cú pháp cơ bản:
chmod [đối_tượng][phép_thay_đổi][quyền] đường_dẫn
Các đối tượng gồm u (chủ sở hữu), g (nhóm), o (người khác) và a (tất cả). Phép + thêm quyền, - bỏ quyền, còn = đặt chính xác quyền được chỉ định. Ví dụ:
Lệnh đầu cho chủ sở hữu quyền chạy script; lệnh thứ hai bỏ quyền ghi của nhóm; lệnh cuối không cấp quyền nào cho người dùng khác. Nếu cần thay đổi nhiều nhóm cùng lúc, có thể kết hợp biểu thức, chẳng hạn chmod u=rw,g=r,o= file.txt.
Dùng số để đặt quyền chính xác
Mỗi quyền có giá trị: r = 4, w = 2, x = 1. Cộng các giá trị sẽ tạo thành một chữ số cho từng nhóm. Chẳng hạn 7 là rwx, 6 là rw-, 5 là r-x, 4 là r--, còn 0 là không có quyền. Ba chữ số lần lượt đại diện cho chủ sở hữu, nhóm và người khác.
640 cho phép chủ sở hữu đọc, sửa; nhóm chỉ đọc; người khác không có quyền. 750 thường phù hợp với script hoặc thư mục mà chủ sở hữu cần toàn quyền, nhóm được đọc và truy cập, còn người khác bị chặn. 644 cho phép mọi người đọc nhưng chỉ chủ sở hữu được sửa. 600 giới hạn file cho chủ sở hữu, phù hợp với dữ liệu nhạy cảm nếu ứng dụng và cách vận hành cho phép.
Không nên áp dụng một giá trị duy nhất cho toàn bộ dự án theo thói quen. File mã nguồn, thư mục, script và dữ liệu riêng tư có thể cần quyền khác nhau. Đặc biệt, tránh đặt 777 chỉ để xử lý lỗi truy cập: giá trị này cho phép mọi người dùng đọc, sửa và thực thi đối tượng, làm tăng nguy cơ bị thay đổi trái phép.
Áp dụng quyền cho thư mục và nhiều file
Có thể dùng -R để thay đổi quyền đệ quy:
chmod -R 750 /var/www/app
Lệnh này áp dụng cùng quyền cho cả thư mục lẫn file bên trong. Đây có thể là lựa chọn sai vì file thông thường thường không cần quyền thực thi, trong khi thư mục cần quyền x để truy cập. Trước khi dùng -R, hãy kiểm tra phạm vi đường dẫn và cân nhắc đặt quyền riêng cho từng loại đối tượng. Với dự án lớn, dùng find để xử lý file và thư mục riêng biệt sẽ dễ kiểm soát hơn:
find /var/www/app -type d -exec chmod 750 {} \;
find /var/www/app -type f -exec chmod 640 {} \;
Các giá trị trên chỉ là ví dụ; hãy điều chỉnh theo tài khoản chạy ứng dụng và yêu cầu thực tế.
chown Linux dùng để làm gì?
Minh họa thay đổi chủ sở hữu file bằng chown Linux
chown Linux thay đổi chủ sở hữu và có thể thay đổi cả nhóm sở hữu của file hoặc thư mục. Lệnh này khác với chmod: chown xác định ai là chủ sở hữu, còn chmod xác định chủ sở hữu, nhóm và người khác được làm gì.
Cú pháp thường dùng:
sudo chown người_dùng:nhóm đường_dẫn
Ví dụ, chuyển quyền sở hữu một thư mục ứng dụng cho tài khoản chạy dịch vụ:
sudo chown appuser:web /var/www/app
Có thể chỉ đổi chủ sở hữu bằng sudo chown appuser file.txt, hoặc chỉ đổi nhóm bằng sudo chown :web file.txt. Lệnh chown thường cần quyền quản trị khi bạn muốn chuyển file sang một tài khoản khác.
Để áp dụng cho toàn bộ cây thư mục, có thể dùng -R:
sudo chown -R appuser:web /var/www/app
Trước khi chạy, hãy xác nhận chính xác đường dẫn và tài khoản. Thao tác đệ quy trên nhầm thư mục có thể thay đổi chủ sở hữu của nhiều dữ liệu hệ thống hoặc dự án khác. Nếu chỉ cần sửa một số file, hãy nêu rõ đường dẫn thay vì áp dụng đệ quy rộng.
Sau khi đổi chủ sở hữu, kiểm tra lại bằng ls -l hoặc stat file.txt. Nếu quyền của file vẫn chưa phù hợp, điều chỉnh tiếp bằng chmod. Việc đổi chủ sở hữu không tự động cấp quyền đọc, ghi hay thực thi theo nhu cầu của ứng dụng.
Quy trình phân quyền file trên VPS an toàn
Khi ứng dụng gặp lỗi không đọc hoặc ghi được file, đừng vội cấp quyền rộng. Hãy lần lượt kiểm tra nguyên nhân và thay đổi tối thiểu cần thiết:
Xác định đường dẫn gây lỗi. Đọc thông báo của ứng dụng hoặc log để biết file hay thư mục nào đang bị từ chối truy cập.
Kiểm tra quyền và chủ sở hữu. Dùng ls -l /đường/dẫn hoặc stat /đường/dẫn. Kiểm tra cả các thư mục cha trên đường dẫn.
Xác định tài khoản chạy ứng dụng. Dịch vụ web, tiến trình nền hoặc ứng dụng có thể chạy dưới tài khoản riêng. Không mặc định rằng tài khoản đăng nhập VPS cũng là tài khoản của ứng dụng.
Chọn mức quyền nhỏ nhất đáp ứng công việc. Nếu ứng dụng chỉ cần đọc file cấu hình, không cấp quyền ghi cho tất cả. Nếu cần ghi tệp tải lên, chỉ mở quyền ghi ở thư mục dữ liệu phù hợp.
Thay đổi đúng đối tượng. Dùng chown khi chủ sở hữu hoặc nhóm chưa đúng; dùng chmod khi quyền truy cập chưa đúng. Nhiều trường hợp cần xử lý cả hai.
Kiểm tra lại và thử ứng dụng. Xem kết quả bằng ls -l, chạy lại thao tác gây lỗi và theo dõi log. Nếu thay đổi không giải quyết được vấn đề, kiểm tra thêm cấu hình dịch vụ thay vì tiếp tục mở rộng quyền.
Ví dụ, nếu ứng dụng cần ghi file vào thư mục tải lên, trước hết kiểm tra tiến trình chạy dưới tài khoản nào. Sau đó đặt chủ sở hữu hoặc nhóm phù hợp cho đúng thư mục dữ liệu và cấp quyền ghi có giới hạn. Không nên đổi toàn bộ thư mục mã nguồn thành quyền ghi cho mọi người chỉ vì một thư mục con cần lưu dữ liệu.
Với khóa SSH, file cấu hình và thông tin bí mật, cần đặc biệt thận trọng. Quyền quá rộng có thể khiến dịch vụ từ chối sử dụng file hoặc làm lộ nội dung cho tài khoản khác trên máy chủ. Hãy áp dụng quyền theo hướng dẫn của phần mềm và kiểm tra bằng tài khoản thực sự sử dụng file đó.
Lỗi thường gặp khi dùng chmod và chown
Một số vấn đề phổ biến khi phân quyền file trên VPS gồm:
Dùng 777 để chữa mọi lỗi: cách này che khuất nguyên nhân và mở quyền không cần thiết. Hãy tìm đúng tài khoản cần truy cập rồi cấp quyền tối thiểu.
Nhầm quyền file với quyền thư mục: file có thể đọc được nhưng vẫn không truy cập được nếu thiếu quyền x trên một thư mục cha.
Chạy chmod -R hoặc chown -R quá rộng: kiểm tra kỹ đường dẫn trước khi thực hiện, nhất là khi dùng sudo.
Chỉ kiểm tra file cuối cùng: quyền trên các thư mục cha cũng ảnh hưởng đến khả năng đi tới file.
Cho rằng chown tự sửa mọi lỗi: lệnh này đổi chủ sở hữu, không thay thế việc thiết lập quyền bằng chmod.
Nếu thao tác nhầm, hãy khôi phục quyền dựa trên cấu hình đã biết hoặc bản sao lưu, thay vì đoán một giá trị chung cho mọi file. Với hệ thống quan trọng, ghi lại quyền hiện tại trước khi thay đổi giúp việc đối chiếu và khôi phục dễ dàng hơn.
Tổng kết
chmod dùng để thay đổi quyền đọc, ghi, thực thi; chown dùng để đặt chủ sở hữu và nhóm. Nắm được cách đọc ls -l, phân biệt quyền của file với thư mục và xác định tài khoản chạy ứng dụng sẽ giúp bạn xử lý lỗi truy cập mà không cấp quyền quá rộng.
Hãy kiểm tra kỹ phạm vi trước khi dùng lệnh đệ quy, áp dụng nguyên tắc quyền tối thiểu và xác nhận lại sau mỗi thay đổi. Nếu đang triển khai ứng dụng trên VPS, bạn có thể tìm hiểu các gói VPS AMD EPYC Gen 3 của VibeVPS, hiện có gói từ 81.000đ/tháng, để lựa chọn môi trường phù hợp với nhu cầu vận hành.
WebSocket giúp trình duyệt và máy chủ trao đổi dữ liệu hai chiều liên tục. Tìm hiểu cách hoạt động, trường hợp nên sử dụng và những điểm cần cân nhắc khi triển khai trên VPS.
Hướng dẫn cài n8n trên VPS Ubuntu bằng Docker Compose, kết nối tên miền và bật HTTPS. Tự host n8n giúp bạn chủ động dữ liệu, đồng thời dễ dàng xây dựng các quy trình tự động hóa.