Cách sử dụng lệnh chmod trên Linux
Kiểm soát ai có thể truy cập tệp, thư mục tìm kiếm và chạy tập lệnh bằng Linux chmod
chỉ huy. Lệnh này sửa đổi quyền đối với tệp Linux, thoạt nhìn có vẻ phức tạp nhưng thực ra khá đơn giản khi bạn biết cách chúng hoạt động.
chmod Sửa đổi Quyền đối với Tệp
Trong Linux, ai có thể làm gì với một tệp hoặc thư mục được kiểm soát thông qua các bộ quyền. Có ba bộ quyền. Một bộ cho chủ sở hữu của tệp, một bộ khác cho các thành viên của nhóm của tệp và một bộ cuối cùng cho những người khác.
Các quyền kiểm soát các hành động có thể được thực hiện trên tệp hoặc thư mục. Chúng cho phép hoặc ngăn không cho một tệp được đọc, sửa đổi hoặc, nếu đó là một tập lệnh hoặc chương trình, được thực thi. Đối với một thư mục, các quyền chi phối ai có thể CD
vào thư mục và ai có thể tạo hoặc sửa đổi các tệp trong thư mục.
Bạn sử dụngchmod
lệnh để thiết lập từng quyền này. Để xem những quyền nào đã được đặt trên một tệp hoặc thư mục, chúng tôi có thể sử dụng ls
.
Xem và hiểu quyền đối với tệp
Chúng ta có thể sử dụng -l
(định dạng dài) tùy chọn để có ls
liệt kê các quyền đối với tệp và thư mục.
ls -l
Trên mỗi dòng, ký tự đầu tiên xác định loại mục nhập đang được liệt kê. Nếu nó là một dấu gạch ngang (-
) nó là một tập tin. Nếu nó là lá thư d
nó là một thư mục.
Chín ký tự tiếp theo đại diện cho cài đặt cho ba bộ quyền.
- Ba ký tự đầu tiên hiển thị các quyền đối với người dùng sở hữu tệp (Quyền Người dùng).
- Ba ký tự ở giữa hiển thị các quyền cho các thành viên của nhóm của tệp (quyền nhóm).
- Ba ký tự cuối cùng hiển thị quyền cho bất kỳ ai không thuộc hai danh mục đầu tiên (các quyền khác).
Có ba ký tự trong mỗi bộ quyền. Các ký tự là chỉ báo cho sự hiện diện hoặc vắng mặt của một trong các quyền. Chúng hoặc là một dấu gạch ngang (-
) hoặc một lá thư. Nếu ký tự là một dấu gạch ngang, điều đó có nghĩa là quyền đó không được cấp. Nếu nhân vật là một r
, w
, hoặc một x
, quyền đó đã được cấp.
Các chữ cái đại diện cho:
- r: Quyền đọc. Có thể mở tệp và xem nội dung của tệp.
- w: Quyền ghi. Tệp có thể được chỉnh sửa, sửa đổi và xóa.
- x: Thực thi quyền. Nếu tệp là một tập lệnh hoặc một chương trình, nó có thể được chạy (thực thi).
Ví dụ:
-
---
có nghĩa là không có quyền nào đã được cấp. -
rwx
có nghĩa là toàn quyền đã được cấp. Tất cả các chỉ báo đọc, ghi và thực thi đều có mặt.
Trong ảnh chụp màn hình của chúng tôi, dòng đầu tiên bắt đầu bằng d
. Dòng này đề cập đến một thư mục được gọi là "kho lưu trữ". Chủ sở hữu của thư mục là "dave" và tên của nhóm mà thư mục đó thuộc về cũng được gọi là "dave."
Ba ký tự tiếp theo là quyền của người dùng cho thư mục này. Những điều này cho thấy rằng chủ sở hữu có đầy đủ quyền. Các r
, w
, và x
các ký tự đều có mặt. Điều này có nghĩa là người dùng dave có quyền đọc, ghi và thực thi cho thư mục đó.
Bộ ba ký tự thứ hai là quyền của nhóm, đây là r-x
. Những điều này cho thấy rằng các thành viên của nhóm dave đã đọc và thực thi các quyền cho thư mục này. Điều đó có nghĩa là họ có thể liệt kê các tệp và nội dung của chúng trong thư mục và họ có thể CD
(thực thi) vào thư mục đó. Họ không có quyền ghi, vì vậy họ không thể tạo, chỉnh sửa hoặc xóa tệp.
Bộ ba ký tự cuối cùng cũng làr-x
. Các quyền này áp dụng cho những người không bị chi phối bởi hai bộ quyền đầu tiên. Những người này (được gọi là "những người khác") đã đọc và thực thi các quyền trên thư mục này.
Vì vậy, tóm lại, các thành viên trong nhóm và những người khác đã đọc và thực thi các quyền. Chủ sở hữu, một người dùng được gọi là dave, cũng có quyền ghi.
Đối với tất cả các tệp khác (ngoại trừ tệp tập lệnh mh.sh), dave và các thành viên của nhóm dave có thuộc tính đọc và ghi trên tệp và những người khác chỉ có quyền đọc.
Đối với trường hợp đặc biệt của tệp script mh.sh, chủ sở hữu dave và các thành viên nhóm có quyền đọc, ghi và thực thi, còn những người khác chỉ có quyền đọc và thực thi.
Hiểu cú pháp quyền
Để sử dụng chmod
để đặt quyền, chúng ta cần cho nó biết:
- WHO: Chúng tôi đang đặt quyền cho ai.
- Gì: Chúng tôi đang thực hiện thay đổi nào? Chúng tôi đang thêm hoặc xóa quyền?
- Cái nào: Chúng tôi đang thiết lập những quyền nào?
Chúng tôi sử dụng các chỉ báo để đại diện cho các giá trị này và hình thành các "tuyên bố quyền" ngắn, chẳng hạn như u + x
, trong đó “u” có nghĩa là “người dùng” (ai), “+” có nghĩa là thêm (cái gì) và “x” có nghĩa là quyền thực thi (cái nào).
Các giá trị “ai” mà chúng ta có thể sử dụng là:
- u: Người dùng, nghĩa là chủ sở hữu của tệp.
- g: Nhóm, nghĩa là các thành viên của nhóm mà tệp thuộc về.
- o: Những người khác, nghĩa là những người không bị chi phối bởi
u
vàg
quyền. - a: Tất cả, nghĩa là tất cả những điều trên.
Nếu không có cái nào trong số này được sử dụng, chmod
cư xử như thể “a
" Đã được sử dụng.
Các giá trị "cái gì" mà chúng tôi có thể sử dụng là:
- –: Dấu trừ. Xóa quyền.
- +: Dấu cộng. Cấp quyền. Quyền được thêm vào các quyền hiện có. Nếu bạn muốn có quyền này và chỉ có quyền này được đặt, hãy sử dụng
=
tùy chọn, được mô tả bên dưới. - =: Dấu bằng. Đặt quyền và xóa những người khác.
Các giá trị "nào" mà chúng tôi có thể sử dụng là:
- r: Quyền đọc.
- w: Quyền ghi.
- x: Quyền thực thi.
Đặt và sửa đổi quyền
Giả sử chúng tôi có một tệp mà mọi người đều có toàn quyền đối với tệp đó.
ls -l new_ file.txt
Chúng tôi muốn người dùng có quyền đọc và ghi và nhóm và những người dùng khác chỉ có quyền đọc. Chúng ta có thể thực hiện bằng lệnh sau:
chmod u = rw, og = r new_file.txt
Sử dụng toán tử “=” có nghĩa là chúng tôi xóa mọi quyền hiện có và sau đó đặt những quyền được chỉ định.
hãy kiểm tra quyền mới trên tệp này:
ls -l new_file.txt
Các quyền hiện có đã bị xóa và các quyền mới đã được đặt, như chúng tôi mong đợi.
Làm thế nào về việc thêm một quyền không có xóa cài đặt quyền hiện có? Chúng tôi cũng có thể làm điều đó một cách dễ dàng.
Giả sử chúng tôi có một tệp tập lệnh mà chúng tôi đã hoàn tất chỉnh sửa. Chúng tôi cần làm cho nó có thể thực thi được cho tất cả người dùng. Các quyền hiện tại của nó trông như thế này:
ls -l new_script.sh
Chúng ta có thể thêm quyền thực thi cho mọi người bằng lệnh sau:
chmod a + x new_script.sh
Nếu chúng ta xem xét các quyền, chúng ta sẽ thấy rằng quyền thực thi hiện đã được cấp cho tất cả mọi người và các quyền hiện có vẫn còn hiệu lực.
ls -l new_script.sh
Chúng tôi có thể đã đạt được điều tương tự nếu không có “a” trong câu lệnh “a + x”. Lệnh sau cũng sẽ hoạt động.
chmod + x new_script.sh
Đặt quyền cho nhiều tệp
Chúng tôi có thể áp dụng quyền cho nhiều tệp cùng một lúc.
Đây là các tệp trong thư mục hiện tại:
ls -l
Giả sử chúng tôi muốn xóa quyền ghi cho những người dùng “khác” khỏi các tệp có phần mở rộng “.page”. Chúng ta có thể thực hiện việc này bằng lệnh sau:
chmod o-r * .page
Hãy kiểm tra xem điều đó đã có tác dụng gì:
ls -l
Như chúng ta có thể thấy, quyền đọc đã bị xóa khỏi tệp “.page” cho danh mục người dùng “khác”. Không có tệp nào khác bị ảnh hưởng.
Nếu chúng tôi muốn bao gồm các tệp trong các thư mục con, chúng tôi có thể đã sử dụng -R
(đệ quy) tùy chọn.
chmod -R o-r * .page
Tốc ký số
Một cách khác để sử dụng chmod
là cung cấp các quyền bạn muốn cấp cho chủ sở hữu, nhóm và những người khác dưới dạng số có ba chữ số. Chữ số ngoài cùng bên trái thể hiện các quyền dành cho chủ sở hữu. Chữ số ở giữa thể hiện quyền cho các thành viên trong nhóm. Chữ số ngoài cùng bên phải thể hiện quyền cho những người khác.
Các chữ số bạn có thể sử dụng và những gì chúng đại diện được liệt kê ở đây:
- 0: (000) Không được phép.
- 1: (001) Thực thi quyền.
- 2: (010) Quyền viết.
- 3: (011) Viết và thực thi quyền.
- 4: (100) Quyền đọc.
- 5: (101) Quyền đọc và thực thi.
- 6: (110) Quyền đọc và ghi.
- 7: (111) Quyền đọc, ghi và thực thi.
Mỗi quyền trong số ba quyền được biểu diễn bằng một trong các bit ở dạng nhị phân tương đương với số thập phân. Vì vậy, 5, là 101 trong nhị phân, có nghĩa là đọc và thực thi. 2, là 010 trong hệ nhị phân, có nghĩa là quyền ghi.
Sử dụng phương pháp này, bạn đặt các quyền mà bạn muốn có; bạn không thêm các quyền này vào các quyền hiện có. Vì vậy, nếu quyền đọc và ghi đã có sẵn, bạn sẽ phải sử dụng 7 (111) để thêm quyền thực thi. Sử dụng 1 (001) sẽ loại bỏ quyền đọc và ghi và thêm quyền thực thi.
Hãy thêm lại quyền đọc trên tệp “.page” cho danh mục người dùng khác. Chúng tôi cũng phải thiết lập các quyền của người dùng và nhóm, vì vậy chúng tôi cần đặt chúng về những gì chúng đã có. Những người dùng này đã có quyền đọc và ghi, là 6 (110). Chúng tôi muốn “những người khác” có quyền đọc và quyền, vì vậy chúng cần được đặt thành 4 (100).
Lệnh sau sẽ thực hiện điều này:
chmod 664 * .trang
Điều này đặt các quyền mà chúng tôi yêu cầu đối với người dùng, thành viên nhóm và những người khác theo những gì chúng tôi yêu cầu. Người dùng và thành viên nhóm được đặt lại quyền của họ về những gì họ đã có và những người khác được khôi phục quyền đọc.
ls -l
Tùy chọn nâng cao
Nếu bạn đọc trang người đàn ông cho chmod
bạn sẽ thấy có một số tùy chọn nâng cao liên quan đến các bit SETUID và SETGID cũng như xóa hạn chế hoặc bit "dính".
Đối với 99% trường hợp bạn sẽ cần chmod
cho, các tùy chọn được mô tả ở đây sẽ giúp bạn bảo hiểm.