Chmod là gì? Tìm hiểu cách sử dụng lệnh Chmod trong Linux

Bạn đã bao giờ cố gắng chỉnh sửa một tệp tin trên máy chủ Linux và nhận được thông báo lỗi “Permission denied” (Từ chối truy cập) chưa? Đây là một trải nghiệm khá phổ biến, đặc biệt với những ai mới làm quen với việc quản trị hệ thống. Vấn đề này xảy ra khi bạn không có đủ quyền hạn để thực hiện hành động mong muốn trên tệp tin hoặc thư mục đó. Việc không hiểu rõ về quyền truy cập có thể dẫn đến nhiều rắc rối, từ việc không thể cập nhật website cho đến các lỗ hổng bảo mật nghiêm trọng. May mắn thay, Linux cung cấp một công cụ mạnh mẽ để giải quyết triệt để vấn đề này, đó chính là lệnh chmod. Lệnh này cho phép bạn kiểm soát chính xác ai có thể đọc, ghi và thực thi các tệp tin của mình. Trong bài viết này, Bùi Mạnh Đức sẽ cùng bạn tìm hiểu sâu hơn về chmod: từ định nghĩa, cách sử dụng, giải thích chi tiết các loại quyền, các ví dụ thực tế, tầm quan trọng trong bảo mật và những lưu ý để sử dụng lệnh này một cách hiệu quả và an toàn nhất.

Định nghĩa lệnh Chmod trong Linux

Chmod là gì?

Chmod là viết tắt của “change mode” (thay đổi chế độ), một trong những lệnh cơ bản và quan trọng nhất trong các hệ điều hành tương tự Unix như Unix là gì và Linux. Về cơ bản, chmod là công cụ dòng lệnh cho phép người dùng thay đổi quyền truy cập (permissions) của các tệp tin và thư mục. Mỗi tệp tin và thư mục trên hệ thống Linux đều được gắn với một bộ quy tắc, xác định ai có thể truy cập và họ có thể làm gì với nó. Vai trò chính của chmod là điều chỉnh các quy tắc này. Bằng cách sử dụng chmod, bạn có thể cấp hoặc thu hồi quyền đọc, quyền ghi và quyền thực thi từ ba nhóm đối tượng khác nhau: người sở hữu (user), nhóm sở hữu (group), và những người dùng khác (others). Việc nắm vững lệnh chmod là kỹ năng thiết yếu đối với bất kỳ ai làm việc với Linux, từ các nhà phát triển web, quản trị viên hệ thống cho đến người dùng thông thường.

Hình minh họa

Tính năng chính của lệnh Chmod

Tính năng cốt lõi của lệnh chmod là khả năng thay đổi ba loại quyền truy cập cơ bản: quyền đọc (read – r), quyền ghi (write – w), và quyền thực thi (execute – x). Quyền đọc cho phép xem nội dung của tệp hoặc liệt kê các tệp trong thư mục. Quyền ghi cho phép sửa đổi, xóa, hoặc thêm mới tệp tin. Quyền thực thi cho phép chạy một tệp (ví dụ như một kịch bản shell) hoặc truy cập vào một thư mục. chmod cho phép bạn áp dụng các quyền này một cách linh hoạt cho ba đối tượng: chủ sở hữu, nhóm và những người khác. Điều này tạo ra một hệ thống phân quyền chi tiết, giúp bảo vệ dữ liệu một cách hiệu quả. Trong quản trị hệ thống, chmod được sử dụng hàng ngày để đảm bảo rằng các tệp cấu hình nhạy cảm chỉ có thể được đọc bởi quản trị viên, các tệp ứng dụng chỉ có thể được thực thi bởi người dùng được phép, và các thư mục tải lên của người dùng không thể chứa các tệp thực thi độc hại. Đây là công cụ nền tảng cho việc thiết lập một môi trường máy chủ an toàn và ổn định.

Cách sử dụng lệnh Chmod để thay đổi quyền truy cập

Cách sử dụng cơ bản của lệnh Chmod

Để sử dụng chmod, bạn cần mở terminal và làm theo cú pháp chung. Cú pháp của lệnh chmod khá đơn giản: chmod [quyền] [tên_tệp_hoặc_thư_mục]. Có hai cách chính để xác định quyền: sử dụng ký hiệu (symbolic method) và sử dụng mã số tám phân (octal/numeric method). Với phương pháp ký hiệu, bạn sử dụng các chữ cái để thể hiện quyền. Các ký hiệu bao gồm u (user), g (group), o (others), và a (all – tất cả). Các toán tử bao gồm + (thêm quyền), - (bỏ quyền), và = (gán quyền chính xác). Các quyền là r (read), w (write), và x (execute). Ví dụ, để thêm quyền ghi cho nhóm sở hữu (group) của tệp config.php, bạn dùng lệnh: chmod g+w config.php. Để loại bỏ quyền đọc và ghi cho những người dùng khác (others) trên tệp private.txt, bạn dùng lệnh: chmod o-rw private.txt. Phương pháp này rất trực quan và dễ nhớ, phù hợp cho những thay đổi đơn lẻ và cụ thể.

Hình minh họa

Sử dụng mã số tám phân để thiết lập quyền

Phương pháp mã số tám phân (octal) là cách sử dụng phổ biến và nhanh chóng hơn để thiết lập quyền, đặc biệt khi bạn muốn gán toàn bộ quyền cho một tệp trong một lần. Cách này sử dụng các con số để đại diện cho các quyền:

Quyền đọc (r) = 4

Quyền ghi (w) = 2

Quyền thực thi (x) = 1

Không có quyền = 0

Để thiết lập quyền cho một đối tượng (user, group, hoặc others), bạn chỉ cần cộng các số tương ứng lại. Ví dụ, quyền đọc và ghi (r+w) sẽ là 4 + 2 = 6. Quyền đọc, ghi và thực thi (r+w+x) sẽ là 4 + 2 + 1 = 7. Một bộ quyền hoàn chỉnh bao gồm ba chữ số, đại diện lần lượt cho user, group, và others. Ví dụ, chmod 755 a_script.sh có nghĩa là:

User: 7 (4+2+1) = đọc, ghi, và thực thi.

Group: 5 (4+0+1) = đọc và thực thi.

Others: 5 (4+0+1) = đọc và thực thi.

Một ví dụ phổ biến khác là chmod 644 index.html, thường dùng cho các tệp web. Điều này có nghĩa là chủ sở hữu có thể đọc và ghi (6), trong khi nhóm và những người khác chỉ có thể đọc (4). Việc hiểu cách hoạt động của mã số tám phân giúp bạn đọc và thiết lập quyền hạn một cách cực kỳ nhanh chóng và chính xác.

Giải thích các quyền truy cập và cách biểu diễn

Các quyền cơ bản: đọc (r), ghi (w), thực thi (x)

Trong Linux, mọi tương tác với tệp tin và thư mục đều được kiểm soát bởi ba quyền cơ bản: đọc, ghi và thực thi. Ý nghĩa của chúng hơi khác nhau tùy thuộc vào đối tượng là tệp tin hay thư mục.

Đối với tệp tin:

– Đọc (r – read): Cho phép xem nội dung của tệp. Ví dụ, bạn có thể dùng lệnh cat hoặc mở tệp bằng một trình soạn thảo văn bản.

– Ghi (w – write): Cho phép thay đổi, chỉnh sửa nội dung của tệp. Bạn có thể ghi đè, thêm hoặc xóa nội dung bên trong.

– Thực thi (x – execute): Cho phép chạy tệp như một chương trình hoặc một kịch bản (script). Quyền này cần thiết cho các tệp chương trình và các file script (như .sh, .py).

Đối với thư mục:

– Đọc (r – read): Cho phép liệt kê danh sách các tệp tin và thư mục con bên trong. Bạn có thể dùng lệnh ls để xem nội dung của thư mục.

– Ghi (w – write): Cho phép tạo, xóa, đổi tên các tệp tin và thư mục con bên trong thư mục đó, bất kể quyền của các tệp con đó là gì.

– Thực thi (x – execute): Cho phép truy cập (đi vào) thư mục. Ví dụ, bạn cần quyền này để dùng lệnh cd để chuyển vào thư mục đó, hoặc truy cập các tệp tin bên trong nó.

Các quyền này được áp dụng cho ba lớp đối tượng: user (u) – chủ sở hữu của tệp, group (g) – nhóm sở hữu tệp, và others (o) – tất cả những người dùng khác không thuộc hai nhóm trên.

Hình minh họa

Biểu diễn quyền bằng ký hiệu và mã số tám phân

Khi bạn chạy lệnh ls -l trong terminal, bạn sẽ thấy một chuỗi ký tự lạ ở cột đầu tiên, ví dụ như -rwxr-xr--. Đây chính là cách biểu diễn quyền truy cập bằng ký hiệu. Chuỗi này có 10 ký tự, được đọc như sau:

– Ký tự đầu tiên: Cho biết loại đối tượng. - là tệp tin thông thường, d là thư mục.

– 9 ký tự tiếp theo: Được chia thành 3 cụm, mỗi cụm 3 ký tự, lần lượt đại diện cho quyền của user, group, và others.

– Trong mỗi cụm, r là quyền đọc, w là quyền ghi, x là quyền thực thi. Dấu - có nghĩa là không có quyền đó.

Ví dụ, chuỗi -rwxr-xr-- được phân tích như sau:

-: Đây là một tệp tin.

rwx: Chủ sở hữu (user) có quyền đọc, ghi, và thực thi.

r-x: Nhóm (group) có quyền đọc và thực thi, nhưng không có quyền ghi.

r--: Những người khác (others) chỉ có quyền đọc.

Sự tương quan giữa ký hiệu và mã số tám phân rất rõ ràng. Mỗi cụm 3 ký tự (ví dụ rwx) có thể được chuyển đổi thành một số.

rwx = 4+2+1 = 7

r-x = 4+0+1 = 5

r-- = 4+0+0 = 4

rw- = 4+2+0 = 6

Vì vậy, -rwxr-xr-- tương đương với mã số 754. Việc hiểu cả hai cách biểu diễn này giúp bạn linh hoạt hơn trong việc quản lý quyền trên hệ thống Linux.

Hình minh họa

Ví dụ minh họa sử dụng lệnh Chmod

Ví dụ thực tế thay đổi quyền tệp tin

Hãy xem một ví dụ cụ thể. Giả sử bạn vừa tạo một file kịch bản shell tên là backup.sh. Bạn muốn mình có thể đọc, ghi, và chạy nó, trong khi những người khác chỉ có thể đọc.

Bước 1: Kiểm tra quyền hiện tại. Sau khi tạo, tệp thường có quyền mặc định là 644.

Chạy lệnh ls -l backup.sh.

Kết quả có thể là: -rw-r--r-- 1 user group 120 Jul 30 10:00 backup.sh

Điều này có nghĩa là bạn (user) có quyền đọc và ghi (rw-), còn group và others chỉ có quyền đọc (r--). Bạn chưa thể chạy file này vì thiếu quyền thực thi (x).

Bước 2: Thêm quyền thực thi cho chủ sở hữu.

Sử dụng phương pháp ký hiệu: chmod u+x backup.sh.

Hoặc bạn có thể dùng mã số tám phân để thiết lập lại toàn bộ quyền thành 744 (đọc+ghi+thực thi cho user, đọc cho group và others): chmod 744 backup.sh.

Bước 3: Kiểm tra lại quyền sau khi thay đổi.

Chạy lại lệnh ls -l backup.sh.

Kết quả bây giờ sẽ là: -rwxr--r-- 1 user group 120 Jul 30 10:01 backup.sh.

Bây giờ, bạn đã thấy quyền x xuất hiện ở cụm đầu tiên. Tệp backup.sh đã sẵn sàng để được thực thi bằng lệnh ./backup.sh.

Hình minh họa

Ví dụ thay đổi quyền thư mục

Việc phân quyền cho thư mục cũng quan trọng không kém. Giả sử bạn có một thư mục public_html chứa các tệp website. Bạn muốn web server (thường chạy dưới một user và group riêng) có thể truy cập vào thư mục này và các tệp bên trong nó. Quyền phổ biến cho thư mục web là 755.

Giả sử bạn có cấu trúc: public_html/ và bên trong có index.html, images/. Quyền hiện tại của public_html700, nghĩa là chỉ mình bạn có thể truy cập.

Bước 1: Thay đổi quyền của thư mục public_html.

Chạy lệnh: chmod 755 public_html.

Lệnh này cấp quyền rwx cho bạn (user), và r-x cho group và others. Quyền x trên thư mục là cần thiết để người khác có thể “đi vào” nó.

Bước 2: Áp dụng quyền cho tất cả các tệp và thư mục con.

Nếu bạn chỉ chạy lệnh trên, các tệp và thư mục con bên trong public_html vẫn giữ nguyên quyền cũ. Để thay đổi quyền cho tất cả mọi thứ bên trong một cách đệ quy, bạn cần dùng thêm tùy chọn -R (recursive).

Tuy nhiên, việc gán 755 cho tất cả các tệp là không tốt, vì các tệp tin như index.html không cần quyền thực thi. Một cách tiếp cận tốt hơn là:

Gán quyền 755 cho tất cả các thư mục con: find public_html -type d -exec chmod 755 {} \;

Gán quyền 644 cho tất cả các tệp tin con: find public_html -type f -exec chmod 644 {} \;

Hai lệnh trên sử dụng find để tìm riêng các thư mục (-type d) hoặc các tệp (-type f) và sau đó thực thi chmod trên chúng. Đây là cách làm chuyên nghiệp và an toàn để phân quyền hàng loạt cho một dự án web.

Hình minh họa

Tầm quan trọng của lệnh Chmod trong bảo mật hệ thống

Lệnh chmod không chỉ là một công cụ quản lý tệp tin đơn thuần, mà nó là một trong những tuyến phòng thủ đầu tiên và quan trọng nhất trong việc bảo mật hệ thống Linux. Việc phân quyền đúng cách giúp bảo vệ dữ liệu nhạy cảm và ngăn chặn các hành vi truy cập trái phép. Nếu quyền được đặt sai, hệ thống của bạn có thể đối mặt với nhiều rủi ro nghiêm trọng. Ví dụ, một tệp cấu hình chứa mật khẩu cơ sở dữ liệu (như wp-config.php trong WordPress) nếu được đặt quyền 644 hoặc 777 sẽ cho phép những người dùng khác trên cùng máy chủ xem được mật khẩu. Điều này tạo ra một lỗ hổng bảo mật khổng lồ. Quyền đúng cho tệp này phải là 600 hoặc 400, chỉ cho phép chủ sở hữu đọc nó. Tương tự, nếu một thư mục cho phép người dùng tải lên tệp (upload) được đặt quyền 777, kẻ tấn công có thể tải lên một kịch bản độc hại (web shell) và thực thi nó, từ đó chiếm toàn quyền kiểm soát trang web của bạn. Bằng cách sử dụng chmod để áp dụng nguyên tắc “đặc quyền tối thiểu” – tức là chỉ cấp quyền vừa đủ cần thiết để một ứng dụng hoạt động – quản trị viên hệ thống có thể giảm thiểu đáng kể bề mặt tấn công. Vì vậy, chmod là một công cụ không thể thiếu, giúp xây dựng một hàng rào bảo mật vững chắc ngay từ cấp độ hệ thống tệp.

Hình minh họa

Lưu ý khi sử dụng lệnh Chmod để tránh lỗi truy cập

Mặc dù chmod rất mạnh mẽ, việc sử dụng sai cách có thể gây ra nhiều vấn đề, từ việc ứng dụng không hoạt động cho đến các lỗ hổng bảo mật. Dưới đây là những lưu ý quan trọng bạn cần ghi nhớ.

Tránh cấp quyền quá rộng

Một trong những sai lầm phổ biến nhất của người mới bắt đầu là sử dụng quyền 777 (rwxrwxrwx) một cách bừa bãi. Khi gặp lỗi “permission denied”, nhiều người có xu hướng chạy ngay lệnh chmod -R 777 . như một giải pháp nhanh chóng. Mặc dù lệnh này có thể làm cho ứng dụng hoạt động trở lại, nó lại mở toang cánh cửa cho các mối đe dọa bảo mật. Quyền 777 có nghĩa là bất kỳ ai trên hệ thống cũng có toàn quyền đọc, ghi và thực thi tệp hoặc thư mục đó. Điều này cực kỳ nguy hiểm. Kẻ xấu có thể chỉnh sửa mã nguồn của bạn, chèn mã độc, xóa dữ liệu hoặc tải lên các tệp nguy hiểm. Hãy luôn tuân thủ nguyên tắc đặc quyền tối thiểu. Thay vì dùng 777, hãy xác định quyền chính xác cần thiết. Đối với các tệp web, quyền 644 là đủ. Đối với các thư mục, 755 là tiêu chuẩn. Các tệp cấu hình nhạy cảm nên được đặt quyền 600. Chỉ sử dụng quyền rộng hơn khi bạn hiểu rõ mình đang làm gì và tại sao nó lại cần thiết.

Hình minh họa

Cảnh báo về quyền thực thi trên tệp tin nhạy cảm

Quyền thực thi (x) cần được quản lý một cách cẩn trọng. Việc cấp quyền thực thi cho các tệp không phải là chương trình hoặc kịch bản có thể dẫn đến những hậu quả không lường trước. Đặc biệt, không bao giờ cấp quyền thực thi cho các tệp do người dùng tải lên. Hãy tưởng tượng một trang web cho phép người dùng tải lên ảnh đại diện. Nếu thư mục tải lên và các tệp trong đó có quyền thực thi, kẻ tấn công có thể tải lên một tệp PHP độc hại thay vì một ảnh JPG. Sau đó, họ có thể truy cập trực tiếp vào tệp đó qua trình duyệt để thực thi mã độc trên máy chủ của bạn. Đây là một trong những phương thức tấn công phổ biến nhất. Để phòng tránh, hãy đảm bảo rằng các thư mục chứa nội dung do người dùng tạo ra không bao giờ có quyền thực thi. Ngoài ra, hãy cẩn thận khi cấp quyền thực thi cho các tệp cấu hình hoặc tệp dữ liệu. Nói chung, chỉ những tệp mà bạn thực sự muốn chạy như một chương trình mới nên có quyền x. Việc kiểm tra và loại bỏ các quyền thực thi không cần thiết là một bước quan trọng trong việc củng cố bảo mật hệ thống.

Best Practices

Để sử dụng chmod một cách hiệu quả và an toàn, hãy tuân thủ các thực hành tốt nhất sau đây. Đây là những nguyên tắc được các quản trị viên hệ thống chuyên nghiệp áp dụng để duy trì một môi trường ổn định và bảo mật.

Luôn kiểm tra quyền hiện tại trước khi thay đổi: Trước khi chạy lệnh chmod, hãy dùng ls -l để xem quyền hiện tại của tệp hoặc thư mục. Điều này giúp bạn hiểu rõ trạng thái của hệ thống và tránh những thay đổi không mong muốn.

Sử dụng quyền tối thiểu cần thiết: Đây là nguyên tắc vàng. Đừng cấp quyền rộng hơn mức cần thiết. Hãy tự hỏi: “Ứng dụng này thực sự cần quyền gì để hoạt động?”. Ví dụ, một tệp tin văn bản chỉ cần quyền đọc (644), không cần quyền thực thi.

Không cấp quyền thực thi cho các tệp không cần thiết: Đặc biệt nguy hiểm với các thư mục upload. Hãy đảm bảo chỉ các kịch bản và chương trình thực thi mới có cờ x. Các tệp hình ảnh, tài liệu, HTML không bao giờ nên có quyền này.

Sử dụng chmod kết hợp với quản lý user/group: chmod chỉ là một phần của câu chuyện bảo mật. Hãy kết hợp nó với việc tạo người dùng và nhóm hợp lý. Ví dụ, chạy web server dưới một người dùng riêng (như www-data) và cấp quyền cho người dùng đó, thay vì chạy dưới quyền root.

Thường xuyên audit quyền truy cập trên hệ thống: Định kỳ kiểm tra lại quyền của các tệp và thư mục quan trọng, đặc biệt là sau khi cài đặt phần mềm mới hoặc cập nhật hệ thống. Bạn có thể viết các kịch bản đơn giản để tự động hóa việc này, chẳng hạn như tìm kiếm tất cả các tệp có quyền 777 trên hệ thống.

Hình minh họa

Kết luận

Lệnh chmod là một công cụ nền tảng và cực kỳ mạnh mẽ trong hệ sinh thái Linux. Nó không chỉ giúp bạn giải quyết các lỗi truy cập phiền phức mà còn là một trụ cột cốt lõi trong việc bảo mật hệ thống. Bằng cách nắm vững cách sử dụng chmod qua cả hai phương pháp ký hiệu và mã số tám phân, bạn có thể kiểm soát chính xác ai được phép làm gì với từng tệp tin và thư mục. Việc tuân thủ các nguyên tắc bảo mật như sử dụng quyền tối thiểu cần thiết và tránh xa quyền 777 sẽ giúp bạn xây dựng một môi trường máy chủ vững chắc, an toàn trước các mối đe dọa. Quản lý quyền truy cập là một kỹ năng không thể thiếu đối với bất kỳ ai làm việc nghiêm túc với Linux. Bùi Mạnh Đức hy vọng bài viết này đã cung cấp cho bạn cái nhìn toàn diện và dễ hiểu về chmod. Hãy bắt đầu thực hành ngay hôm nay để củng cố kiến thức và tăng cường bảo mật cho hệ thống của mình. Đừng quên tìm hiểu sâu hơn về quản lý người dùng (useradd, usermod) và nhóm (groupadd) để hoàn thiện kỹ năng quản trị Linux của bạn.

Đánh giá
Tác giả

Mạnh Đức

Có cao nhân từng nói rằng: "Kiến thức trên thế giới này đầy rẫy trên internet. Tôi chỉ là người lao công cần mẫn đem nó tới cho người cần mà thôi !"

Chia sẻ