Linux

Lệnh Chmod Trong Linux: Phân Quyền File Và Thư Mục Chuẩn Nhất Cho Người Mới

phongdhphongdh
17 phút đọc
Chia sẻ:
Zalo
Lệnh Chmod Trong Linux: Phân Quyền File Và Thư Mục Chuẩn Nhất Cho Người Mới

Thông báo Permission denied có lẽ là lỗi mà người mới quản trị Linux gặp nhiều nhất: file cấu hình không sửa được, script tải lên VPS nhưng chạy không nổi, website báo lỗi không ghi được dữ liệu. Tất cả đều xoay quanh một cơ chế duy nhất là phân quyền, và lệnh chmod trong Linux là công cụ trung tâm để kiểm soát cơ chế đó. Bài viết này hướng dẫn lệnh chmod trong Linux từ cách đọc quyền trên file, hai cách đặt quyền bằng số và bằng chữ, đến lệnh chown đổi chủ sở hữu và khái niệm umask, tất cả đều có ảnh chạy lệnh thật để bạn đối chiếu.

1. Phân quyền trong Linux là gì: user, group, other

Linux là hệ điều hành nhiều người dùng, nên mỗi file và thư mục đều thuộc về một chủ sở hữu (user) và một nhóm (group). Quyền truy cập được chia cho ba đối tượng: chủ sở hữu của file, các thành viên thuộc nhóm của file, và tất cả những người còn lại (other). Nhờ cách chia này, một file có thể cho phép chủ của nó sửa thoải mái, cho nhóm cùng xem, và khóa hoàn toàn với người lạ.

Với mỗi đối tượng, Linux quản lý ba quyền cơ bản: đọc (read, ký hiệu r), ghi (write, ký hiệu w) và thực thi (execute, ký hiệu x). Trên file, quyền đọc cho phép xem nội dung, quyền ghi cho phép sửa và xóa nội dung, quyền thực thi cho phép chạy file như một chương trình. Bộ ba quyền này kết hợp với ba đối tượng tạo thành chín ô quyền mà lệnh chmod trong Linux sẽ thay đổi.

Trên thư mục, ý nghĩa hơi khác một chút và rất quan trọng: quyền đọc cho phép liệt kê tên các mục bên trong, quyền ghi cho phép tạo và xóa mục trong thư mục, còn quyền thực thi cho phép đi xuyên vào thư mục đó bằng lệnh cd. Một thư mục thiếu quyền x với người dùng thì dù có quyền đọc, bạn cũng không mở được file bên trong nó.

Hiểu rõ ba đối tượng user, group, other là tiền đề để mọi thao tác phân quyền trong Linux trở nên có chủ đích thay vì mò mẫm.

2. Cách đọc quyền rwx từ lệnh ls -l

Trước khi thay đổi quyền, bạn phải đọc được quyền hiện tại. Lệnh ls -l hiển thị cột đầu tiên gồm mười ký tự chính là bản đồ phân quyền của từng file. Ký tự đầu tiên cho biết loại: dấu gạch ngang là file thường, chữ d là thư mục. Chín ký tự còn lại chia thành ba nhóm ba ký tự, lần lượt là quyền của user, group và other, mỗi nhóm theo đúng thứ tự r, w, x.

Đọc quyền rwx của file và thư mục từ cột đầu tiên trong kết quả lệnh ls -l trên Ubuntu

Nhìn vào ảnh: file backup.sh có quyền -rw-r--r--, nghĩa là chủ sở hữu được đọc và ghi (rw-), nhóm và người khác chỉ được đọc (r–). File bao-cao.txt có quyền tương tự. Dấu gạch ngang trong nhóm quyền nghĩa là quyền đó chưa được cấp. Sau cột quyền là tên chủ sở hữu và nhóm, trong ảnh đều là phong, rồi mới đến dung lượng và thời gian sửa đổi.

Cách đọc quyền rwx thành thạo là kỹ năng bắt buộc trước khi dùng lệnh chmod trong Linux, vì chmod chỉ là thao tác viết lại chín ký tự này. Mỗi khi gặp lỗi Permission denied, phản xạ đầu tiên của quản trị viên là chạy ls -l để xem file thuộc về ai và đang cấp quyền cho những ai, thay vì đoán mò rồi sửa bừa.

Sau tất cả, lệnh chmod trong Linux chỉ có một mục tiêu xuyên suốt: đúng người, đúng quyền, đúng file.

Thành thạo cách đọc quyền rwx từ kết quả ls -l giúp bạn chẩn đoán lỗi quyền trong vài giây trước khi nghĩ đến chuyện sửa.

3. Lệnh chmod trong Linux với ký hiệu số: 755, 644, 600

Cách dùng phổ biến nhất của lệnh chmod trong Linux là ký hiệu số gồm ba chữ số, mỗi chữ số đại diện cho một đối tượng user, group, other. Mỗi chữ số là tổng của các quyền được cấp: đọc bằng 4, ghi bằng 2, thực thi bằng 1. Cộng các số của quyền muốn cấp lại với nhau, bạn ra đúng chữ số cần dùng cho đối tượng đó.

Ví dụ quyền 644 nghĩa là user được 4 + 2 = 6 (đọc và ghi), group được 4 (chỉ đọc), other được 4 (chỉ đọc). Quyền 755 nghĩa là user có đủ 4 + 2 + 1 = 7, còn group và other đều được 5 tức đọc và thực thi. Đây là hai mức quyền mặc định kinh điển: file thường dùng 644, thư mục và file thực thi dùng 755.

Đặt quyền 600 cho file bằng lệnh chmod dạng số và kiểm tra lại bằng ls -l

Trong ảnh thực hành, lệnh chmod 600 bao-cao.txt thu hồi toàn bộ quyền của group và other, chỉ chủ sở hữu mới đọc và ghi được file. Kết quả ls -l xác nhận quyền đã thành -rw-------. Mức 600 rất hợp cho các file nhạy cảm như file chứa mật khẩu, khóa riêng SSH hay file cấu hình chứa thông tin kết nối cơ sở dữ liệu.

Dù dùng dạng số hay dạng chữ, lệnh chmod trong Linux luôn là công cụ đầu tiên cần nghĩ tới khi một file đang có quyền chưa đúng.

4. Bảng quy đổi quyền rwx sang số

Bảng dưới đây liệt kê mọi tổ hợp quyền có thể có của một đối tượng. Học thuộc bảng quy đổi nhỏ này, bạn sẽ đọc và đặt bất kỳ mức quyền nào trong vài giây mà không cần tra cứu lại.

SốKý hiệuQuyền được cấp
0—Không có quyền nào
1–xChỉ thực thi
2-w-Chỉ ghi
3-wxGhi và thực thi
4r–Chỉ đọc
5r-xĐọc và thực thi
6rw-Đọc và ghi
7rwxĐọc, ghi và thực thi

Áp dụng bảng vào thực tế: quyền 750 trên một thư mục nghĩa là chủ sở hữu toàn quyền (7), nhóm được đọc và đi vào (5), người lạ không có quyền gì (0). Đây là mức quyền ưa thích cho các thư mục chứa dữ liệu nội bộ chỉ một nhóm người dùng được phép xem. Ngược lại, quyền 777 (mọi đối tượng đều rwx) bị coi là mức nguy hiểm và phần cuối bài sẽ phân tích lý do.

Một mẹo ghi nhớ nhanh: số chẵn luôn thiếu quyền thực thi, số lẻ luôn có quyền thực thi, số từ 4 trở lên luôn có quyền đọc. Chỉ với ba quy tắc này, bạn đã suy luận được phần lớn các mức quyền thường gặp mà không cần học thuộc lòng toàn bộ bảng.

Và khi quyền đã đúng mà vẫn bị từ chối truy cập, hãy nhớ tới lệnh chown trong Linux trước khi nghĩ đến việc mở toang quyền 777.

Bảng quy đổi này là hành trang gọn nhất để bạn tự tin dùng lệnh chmod trong Linux mà không cần mở tài liệu tra cứu mỗi lần.

5. Lệnh chmod trong Linux với ký hiệu chữ: u+x, g-w, o+r

Ngoài dạng số, lệnh chmod trong Linux còn nhận ký hiệu chữ, phù hợp khi bạn chỉ muốn thay đổi một quyền cụ thể mà không chạm vào phần còn lại. Cú pháp gồm ba phần: đối tượng (u cho user, g cho group, o cho other, a cho tất cả), toán tử (+ thêm quyền, – bỏ quyền, = đặt đúng bằng) và quyền muốn thay đổi (r, w, x).

Chạy script bị Permission denied, cấp quyền thực thi bằng chmod u+x rồi chạy thành công

Ảnh trên là tình huống kinh điển: script backup.sh đã viết xong nhưng khi chạy lại báo Permission denied vì file chưa có quyền thực thi. Lệnh chmod u+x backup.sh chỉ thêm đúng quyền x cho chủ sở hữu, giữ nguyên mọi quyền còn lại. Sau khi cấp quyền, ls -l cho thấy ký tự x đã xuất hiện và script chạy thành công, in ra dòng thông báo sao lưu hoàn tất.

Dạng chữ phát huy sức mạnh khi cần các thay đổi tinh vi, ví dụ chmod g+w file.txt cho nhóm thêm quyền ghi, chmod o-rwx file.txt tước mọi quyền của người lạ, hay chmod a+x script.sh cho mọi người cùng chạy được script. Khi dùng lệnh chmod trong Linux dạng số, bạn phải tính lại cả ba chữ số; dạng chữ thì chỉ mô tả đúng phần thay đổi, dễ đọc và ít sai sót hơn.

Khi lỗi nằm ở chủ sở hữu thay vì quyền truy cập, lệnh chown trong Linux mới là đáp án đúng, và phân biệt được hai trường hợp này tiết kiệm rất nhiều thời gian.

6. Chmod đệ quy với -R cho cả thư mục

Khi cần đặt quyền cho một thư mục cùng toàn bộ nội dung bên trong, thêm tham số -R (recursive) vào lệnh chmod. Ví dụ chmod -R 755 du-lieu áp quyền 755 cho thư mục du-lieu và mọi file, thư mục con nằm trong nó. Đây là thao tác thường gặp sau khi giải nén hoặc sao chép một cây thư mục từ nơi khác sang, khi quyền gốc bị xáo trộn.

Chmod đệ quy bằng chmod -R, kiểm tra quyền thư mục và xem quyền dạng số bằng lệnh stat

Ảnh trên còn giới thiệu lệnh stat -c '%a %n', công cụ in quyền dạng số của nhiều file cùng lúc. Kết quả xác nhận bao-cao.txt là 600, backup.sh là 744 (chủ sở hữu được cộng thêm quyền x từ bước trước) và du-lieu là 755. Khi cần kiểm tra hàng loạt file sau một lần chmod đệ quy, stat cho cái nhìn gọn hơn nhiều so với đọc từng dòng ký tự rwx.

Lưu ý quan trọng: chmod -R đặt cùng một mức quyền cho cả file lẫn thư mục, mà hai loại này vốn cần quyền khác nhau (file 644, thư mục 755). Áp 755 cho mọi file sẽ khiến file dữ liệu thường cũng mang quyền thực thi, điều không cần thiết. Với cây thư mục lớn, quản trị viên thường kết hợp lệnh find để đặt quyền riêng cho từng loại, 644 cho file và 755 cho thư mục.

Umask giải thích vì sao phân quyền trong Linux luôn bắt đầu từ các mức mặc định nhất quán trên mọi máy Ubuntu.

7. Lệnh chown: đổi chủ sở hữu của file

Phân quyền trong Linux không chỉ có chuyện cấp quyền, mà còn là file thuộc về ai. Lệnh chown (change owner) thay đổi chủ sở hữu và nhóm của file theo cú pháp sudo chown user:group file. Thao tác này cần quyền quản trị nên luôn đi kèm sudo. Trường hợp điển hình: file do root tạo ra nằm trong thư mục của người dùng thường, khiến người dùng đó không sửa được file của chính mình.

Xem thông tin user bằng id, đổi chủ sở hữu file bằng sudo chown và kiểm tra kết quả

Trong ảnh, lệnh id nobody hiển thị mã số và nhóm của tài khoản nobody. Sau đó sudo chown nobody:nogroup bao-cao.txt chuyển quyền sở hữu file cho nobody, và ls -l xác nhận cột chủ sở hữu đã đổi. Tài khoản nobody là tài khoản hệ thống không dùng để đăng nhập, thường được các dịch vụ sử dụng khi cần chạy với quyền tối thiểu.

Tình huống thực tế hay gặp nhất của lệnh chown trong Linux là với web server: mã nguồn tải lên bằng tài khoản root hoặc tài khoản cá nhân khiến tiến trình web (thường chạy bằng user www-data trên Ubuntu) không ghi được thư mục upload. Lệnh khắc phục kinh điển là sudo chown -R www-data:www-data /var/www/html, đổi toàn bộ cây mã nguồn về đúng chủ. Hiểu cặp bài trùng chmod và chown, bạn xử lý được hầu hết lỗi quyền trên máy chủ.

Áp dụng mức quyền tối thiểu đủ dùng là nguyên tắc xuyên suốt của phân quyền trong Linux trên mọi máy chủ thật.

8. Umask: vì sao file mới tạo luôn là 644, thư mục là 755

Bạn có để ý rằng mọi file mới tạo đều có quyền 644 và thư mục mới đều là 755, dù bạn chưa từng chmod? Đó là nhờ cơ chế umask, một “mặt nạ” trừ bớt quyền khỏi mức tối đa mặc định. Lệnh umask không tham số sẽ in ra giá trị hiện tại, trên Ubuntu thường là 0022.

Xem giá trị umask, tạo file và thư mục mới rồi đối chiếu quyền 644 và 755 mặc định

Cách tính rất đơn giản: file bắt đầu từ mức tối đa 666, thư mục từ 777, sau đó trừ đi umask. Với umask 0022: file được 666 – 022 = 644, thư mục được 777 – 022 = 755, khớp hoàn toàn với kết quả trong ảnh. Hệ thống thiết kế vậy vì file thường không cần quyền thực thi sẵn, còn thư mục thì bắt buộc phải có quyền x mới vào được.

Khi làm việc nhóm trên cùng một máy chủ, quản trị viên đôi khi đặt umask 002 để file mới tạo cho phép cả nhóm cùng ghi (664 thay vì 644). Thay đổi umask chỉ ảnh hưởng các file tạo ra sau đó, không đổi quyền của file đã tồn tại. Đây là chi tiết nhỏ nhưng giải thích được nhiều tình huống “file tự nhiên không sửa chung được” trong thực tế.

Mỗi khi phân vân giữa chmod và chown, hãy tự hỏi file đang sai quyền hay sai chủ, vì câu trả lời quyết định bạn dùng lệnh chmod trong Linux hay lệnh chown trong Linux.

9. Mức quyền chuẩn cho web server và cảnh báo quyền 777

Tổng kết thực chiến cho một website chạy trên VPS: thư mục đặt 755, file mã nguồn đặt 644, file cấu hình chứa mật khẩu cơ sở dữ liệu đặt 600 hoặc 640 với chủ sở hữu phù hợp. Riêng các script cần chạy trực tiếp mới cấp quyền thực thi. Bộ mức quyền này vừa đủ cho web server đọc và chạy mã nguồn, vừa không mở đường cho các tài khoản khác trên cùng máy đọc trộm dữ liệu nhạy cảm.

Quyền 777, tức mọi người đều đọc, ghi và thực thi được, là mức quyền cần tránh tuyệt đối trên máy chủ thật. Nó thường xuất hiện khi ai đó “sửa nhanh” lỗi Permission denied bằng cách mở toang mọi quyền thay vì tìm đúng nguyên nhân. Hậu quả là bất kỳ tài khoản hay tiến trình nào bị xâm nhập cũng sửa được toàn bộ file đó, biến một lỗ hổng nhỏ thành chiếm quyền cả website.

Nguyên tắc vàng của phân quyền trong Linux là cấp quyền tối thiểu đủ dùng (least privilege). Khi gặp lỗi quyền, quy trình đúng là: xem log để biết tiến trình nào bị từ chối, dùng ls -l kiểm tra chủ sở hữu và quyền hiện tại, rồi chỉnh đúng một điểm bằng chmod hoặc chown. Tài liệu tham khảo đầy đủ về cơ chế quyền có trong trang man của lệnh chmod trên man7.org.

10. Lỗi thường gặp khi dùng lệnh chmod

Lỗi thứ nhất là chmod nhầm đối tượng: chạy chmod -R từ thư mục gốc hệ thống hoặc nhầm đường dẫn sang thư mục hệ thống như /etc, khiến hàng loạt file cấu hình sai quyền và dịch vụ ngừng hoạt động. Phòng tránh bằng cách luôn kiểm tra đường dẫn tuyệt đối và thư mục hiện tại trước khi Enter, đặc biệt khi lệnh có -R và chạy bằng sudo.

Lỗi thứ hai là tưởng chmod giải quyết được mọi lỗi quyền, trong khi nguyên nhân thật nằm ở chủ sở hữu. File thuộc về root thì người dùng thường có chmod thế nào cũng không ghi được nếu group và other không được cấp quyền ghi; lúc này phải dùng chown đổi chủ. Phân biệt đúng “sai quyền” và “sai chủ” giúp bạn khỏi vòng lặp sửa mãi không xong.

Lỗi thứ ba là cấp quyền thực thi cho mọi file sau khi chmod -R 755 cả cây thư mục chứa dữ liệu. Ngoài chuyện không cần thiết, các file dữ liệu có quyền x còn gây khó hiểu khi kiểm toán bảo mật. Hãy nhớ cặp mặc định an toàn: 644 cho file, 755 cho thư mục, và chỉ nâng quyền khi có lý do rõ ràng.

11. Câu hỏi thường gặp về lệnh chmod trong Linux

Chmod 755 và 644 khác nhau thế nào? Số 755 cho chủ sở hữu toàn quyền và cho phép mọi người đọc, thực thi, phù hợp với thư mục và chương trình. Số 644 cho chủ sở hữu quyền đọc ghi, mọi người còn lại chỉ đọc, phù hợp với file dữ liệu và mã nguồn. Khác biệt cốt lõi nằm ở quyền ghi và quyền thực thi.

Vì sao chmod rồi mà vẫn Permission denied? Thường do ba nguyên nhân: file thuộc chủ sở hữu khác và nhóm của bạn không được cấp quyền tương ứng, thư mục cha thiếu quyền x khiến bạn không đi xuyên qua được, hoặc phân vùng đang gắn ở chế độ chỉ đọc. Hãy kiểm tra lần lượt bằng ls -l từ file ngược lên từng thư mục cha.

Có nên dùng chmod 777 để sửa nhanh lỗi quyền không? Không nên, trừ môi trường máy ảo thử nghiệm dùng một lần. Trên máy chủ thật, 777 mở quyền ghi cho mọi tài khoản và tiến trình, rủi ro bảo mật rất lớn. Hãy tìm đúng user đang chạy dịch vụ rồi cấp quyền hoặc đổi chủ sở hữu cho đúng user đó.

Chmod có tác dụng với thư mục chứa nó không? Chmod thay đổi quyền của đúng đối tượng được chỉ định; muốn áp dụng cho toàn bộ nội dung bên trong phải thêm -R. Ngược lại, quyền của thư mục cha quyết định việc bạn có vào được thư mục con hay không, đây là điểm nhiều người bỏ sót khi gỡ lỗi.

12. Lời kết

Bài viết đã hệ thống toàn bộ kiến thức cốt lõi về lệnh chmod trong Linux: cách đọc chín ký tự rwx từ ls -l, đặt quyền bằng số với bảng quy đổi 4-2-1, đặt quyền bằng chữ cho các thay đổi nhỏ, chmod đệ quy, lệnh chown đổi chủ sở hữu và cơ chế umask đứng sau các mức quyền mặc định. Đây là những gì bạn cần để làm chủ phân quyền trong Linux trên bất kỳ máy chủ nào.

Hãy thực hành ngay bằng cách tạo một thư mục thử nghiệm, tạo vài file rồi thay đổi quyền qua lại giữa 600, 644, 755 và quan sát ls -l sau mỗi lần đổi. Sau vài vòng thực hành như vậy, việc đọc và đặt quyền sẽ trở thành phản xạ, và thông báo Permission denied sẽ không còn là nỗi ám ảnh mỗi khi bạn quản trị máy chủ Linux.

Chia sẻ bài viết này:
Zalo
phongdh

phongdh

Tác giả bài viết • Content Creator

Chào mọi người, mình là Phong - hiện đang công tác tại Phòng Kỹ thuật AZDIGI. Trong quá trình làm việc mình có cơ hội được tiếp xúc với khá nhiều các vấn đề liên quan đến Website/Email/Hosting/VPS/Server, do đó mình viết lại các hướng dẫn này nhằm chia sẻ kiến thức, cũng như tạo một môi trường để chúng ta giao lưu và học hỏi lẫn nhau.

Kết nối:

Bài viết liên quan

Những bài viết bạn có thể quan tâm

Thảo luận 0 bình luận Viết bình luận

Email được bảo mật và không hiển thị công khai.

Chưa có bình luận. Hãy là người mở đầu cuộc trò chuyện.

Zalo