Quyền sở hữu file là một thành phần quan trọng của Unix mà cung cấp phương thức bảo mật để lưu giữ file. Mọi file trong Unix có các thuộc tính sau để thể hiện quyền hạn truy cập tới nó (File Permission):
Trong khi sử dụng lệnh ls -l, nó hiển thị các thông tin đa dạng liên quan đến quyền hạn truy cập trên file như sau:
$ls -l /home/amrood
-rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile
drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir
Tại đây, cột đầu tiên đại diện cho các chế độ truy cập khác nhau, ví dụ như quyền hạn truy cập liên kết với một file hoặc thư mục.
Các quyền hạn truy cập được chia thành ba nhóm, mà mỗi vị trí trong nhóm biểu hiện một quyền hạn truy cập cụ thể, theo thứ tự: đọc (r), ghi (w) và thực thi (x):
Quyền hạn truy cập của một file là dòng đầu tiên của sự bảo vệ trong hệ thống Unix. Các khối xây dựng cơ bản trong quyền hạn truy cập Unix là các quyền hạn truy cập đọc, ghi và thực thi được miêu tả dưới đây:
Các chế độ truy cập vào thư mục được liệt kê và tổ chức trong cùng một cách như trong bất kỳ một file nào. Có một vài điểm khác nhau mà bạn cần chú ý:
Truy cập vào một thư mục với nghĩa là người sử dụng có thể đọc các nội dung. Người sử dụng có thể xem tên các file bên trong một thư mục.
Cho phép người sử dụng có thể thêm hoặc xóa file nội dung của thư mục.
Chạy một thư mục không thực sự mang nhiều ý nghĩa, vì thế bạn chỉ coi đó là giấy phép để ngang qua.
Một người sử dụng phải có quyền truy cập thực thi tới thư mục bin để chạy lệnh ls hoặc cd chẳng hạn.
Để thay đổi quyền hạn truy cập của file hoặc thư mục, bạn sử dụng lệnh chmod (viết tắt của change mode). Có hai cách để sử dụng chmod là: chế độ tượng trưng (Symbolic Mode) và chế độ tuyệt đối (Absolute Mode).
Cách dễ nhất cho người mới bắt đầu để chỉnh sửa quyền hạn truy cập file hoặc thư mục là sử dụng chế độ tượng trưng. Với chế độ này bạn có thể thêm, xóa hoặc xác định tập hợp các cho phép mà bạn muốn bằng cách sử dụng các toán tử sau:
Toán tử chmod | Miêu tả |
---|---|
+ | Thêm quyền hạn truy cập được chỉ định tới một file hoặc tệp |
- | Gỡ bỏ quyền hạn truy cập đã được chỉ định từ một file hoặc thư mục |
= | Thiết lập các quyền hạn truy cập được chỉ định. |
Dưới đây là một ví dụ bằng cách sử dụng lệnh testfile. Chạy ls -1 trên testfile chỉ rằng quyền hạn truy cập của file là như sau:
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
Sau đó mỗi ví dụ lệnh chmod từ bảng trước được chạy trên testfile, theo sau bởi ls -l vì thế bạn có thể quan sát các thay đổi của quyền hạn truy cập.
$chmod o+wx testfile
$ls -l testfile
-rwxrwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod u-x testfile
$ls -l testfile
-rw-rwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod g=rx testfile
$ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
Tại đây là cách bạn có thể kết nối những lệnh này trên một dòng đơn:
$chmod o+wx,u-x,g=rx testfile
$ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
Cách thứ hai để chỉnh sửa quyền hạn truy cập với lệnh chmod là sử dụng số để xác định các quyền hạn truy cập cho file.
Mỗi quyền hạn truy cập được ấn định bằng một giá trị, như trong bảng dưới, và tổng của mỗi quyền hạn truy cập cung cấp một số cho tập hợp thiết lập đó.
Số | Đại diện cho quyền hạn truy cập trong hệ cơ số 8 | Tham chiếu |
---|---|---|
0 | Không cho phép | --- |
1 | Cho phép thực thi | --x |
2 | Cho phép ghi | -w- |
3 | Cho phép thực thi và ghi: 1 (thực thi) + 2 (ghi) = 3 | -wx |
4 | Cho phép đọc | r-- |
5 | Cho phép đọc và thực thi: 4(đọc) + 1 (thực thi) = 5 | r-x |
6 | Cho phép đọc và ghi: 4 (đọc) + 2 (ghi) = 6 | rw- |
7 | Cho phép tất cả: 4 (đọc) + 2 (ghi) + 1 (thực thi) = 7 | rwx |
Tại đây là một ví dụ sử dụng testfile. Chạy ls -1 trên testfile chỉ rằng các quyền hạn truy cập của file là như sau:
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
Mỗi ví dụ lệnh chmod từ bảng trước được chạy trên testfile, theo sau bởi ls -l vì thế bạn có thể quan sát các thay đổi của quyền hạn truy cập:
$ chmod 755 testfile
$ls -l testfile
-rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile
$chmod 743 testfile
$ls -l testfile
-rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod 043 testfile
$ls -l testfile
----r---wx 1 amrood users 1024 Nov 2 00:10 testfile
Trong khi tạo một tài khoản trên Unix, nó gán một ID người sở hữu và một ID sở hữu nhóm cho mỗi người sử dụng. Tất cả các quyền hạn truy cập đề cập ở trên là cũng được gán dựa trên người sử hữu và nhóm.
Hai lệnh có sẵn để thay đổi sở hữu cá nhân và sở hữu nhóm của file là:
Lệnh chown thay đổi quyền sở hữu của một file. Cú pháp cơ bản là:
$ chown user filelist
Giá trị của user có thể là tên hoặc ID của người sử dụng trên hệ thống. Ví dụ:
Ví dụ:
$ chown amrood testfile
$
Thay đổi người sở hữu của file đã cho tới người sở hữu amrood.
Ghi chú: Người sở hữu gốc có quyền không bị hạn chế để thay đổi quyền sở hữu của bất kỳ file nào nhưng người sở hữu thông thường chỉ có thể thay đổi quyền sở hữu của những file mà họ sở hữu.
Lệnh <v>chrgp</v>
thay đổi sở hữu nhóm của file. Cú pháp đơn giản là:
$ chgrp group filelist
Giá trị của group có thể là tên hoặc ID của nhóm trên hệ thống. Ví dụ:
Ví dụ:
$ chgrp special testfile
$
Thay đổi sở hữu nhóm đã chọn tới nhóm special.
Thông thường khi một lệnh được chạy, nó sẽ phải chạy cùng với các đặc quyền đặc biệt để thực hiện nhiệm vụ của nó.
Như một ví dụ, khi bạn thay đổi mật khẩu với lệnh passwd, mật khẩu mới được giữ trong tệp /etc/shadow.
Khi là một người sử dụng thường, bạn không có được quyền truy cập để đọc hoặc ghi tới File này do các lý do bảo mật, nhưng khi bạn thay đổi mật khẩu, bạn cần có quyền ghi tới File này. Điều này có nghĩa là chương trình passwd phải cung cấp cho bạn các quyền thêm để bạn có thể ghi etc/shadow.
Các quyền thêm vào được cung cấp tới chương trình thông qua một kỹ thuật được biết đến là Thiết lập ID người sử dụng (Set User ID – SUID bit) và Thiết lập ID nhóm (Set Group ID – SGID bit).
Khi bạn chạy một chương trình mà có quyền hạn truy cập SUID, bạn sử dụng nó để thay đổi sở hữu của chương trình đó. Các chương trình mà không thiết lập SUID thì đang chạy với quyền hạn truy cập của người sử dụng mà khởi động chương trình.
Điều này là đúng với SGID. Các chương trình thông thường chạy với quyền hạn truy cập nhóm, nhưng thay vào đó, nó chỉ thay đổi sở hữu nhóm cho chương trình đang chạy chứ không thay đổi cho chương trình khác của nhóm.
Các bit SUID bit và SGID bit sẽ xuất hiện bằng ký tự "s" nếu quyền hạn truy cập là có sẵn. SUID "s" bit sẽ được đặt trong các permission bit, nơi mà người sở hữu thực thi sẽ có thẩm quyền. Ví dụ, lệnh sau:
$ ls -l /usr/bin/passwd
-r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd*
$
Điều này chỉ rằng SUID bit được thiết lập và lệnh được sở hữu bởi sở hữu gốc. Ký tự viết hoa S trong vị trí thực thi thay cho chữ thường s chỉ rằng bit của thực thi không được thiết lập.
Nếu sticky bit được cho phép trên thư mục, các file chỉ có thể được gỡ bỏ nếu bạn là một trong những người sử dụng sau:
Để thiết lập các SUID bit và SGID bit cho bất kỳ thư mục, bạn thử cú pháp sau:
$ chmod ug+s dirname
$ ls -l
drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname
$
Unpublished comment
Viết câu trả lời