Quyền trong Linux (chown, chmod, SUID, GUID, bit dính, ACL, umask)

Chào mọi người. Đây là bản dịch của một bài báo từ cuốn sách RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 và EX300.

Đẩy: Tôi hy vọng bài viết sẽ hữu ích không chỉ cho người mới bắt đầu mà còn giúp các quản trị viên có kinh nghiệm hơn hợp lý hóa kiến ​​​​thức của họ.

Vậy hãy đi đi.

Quyền trong Linux (chown, chmod, SUID, GUID, bit dính, ACL, umask)

Để truy cập các tệp trong Linux, quyền được sử dụng. Các quyền này được gán cho ba đối tượng: chủ sở hữu tệp, chủ sở hữu nhóm và một đối tượng khác (nghĩa là mọi người khác). Trong bài viết này, bạn sẽ tìm hiểu cách áp dụng các quyền.

Bài viết này bắt đầu với tổng quan về các khái niệm cơ bản, tiếp theo là phần thảo luận về Quyền đặc biệt và Danh sách kiểm soát truy cập (ACL). Ở cuối bài viết này, chúng tôi đề cập đến việc thiết lập các quyền mặc định thông qua ô, cũng như quản lý các thuộc tính người dùng mở rộng.

Quản lý quyền sở hữu tập tin

Trước khi thảo luận về quyền, bạn nên biết vai trò của chủ sở hữu tệp và thư mục. Quyền sở hữu các tệp và thư mục là rất quan trọng để xử lý các quyền. Trong phần này, trước tiên bạn sẽ tìm hiểu cách xem chủ sở hữu. Sau đó, bạn sẽ học cách thay đổi chủ sở hữu nhóm và người dùng cho các tệp và thư mục.

Hiển thị chủ sở hữu của một tập tin hoặc thư mục

Trong Linux, mọi tệp và mọi thư mục đều có hai chủ sở hữu: người dùng và chủ sở hữu nhóm.

Những chủ sở hữu này được đặt khi một tệp hoặc thư mục được tạo. Người dùng tạo tệp sẽ trở thành chủ sở hữu của tệp đó và nhóm chính mà người dùng đó thuộc về cũng trở thành chủ sở hữu của tệp đó. Để xác định xem bạn, với tư cách là người dùng, có quyền truy cập vào một tệp hoặc thư mục hay không, shell sẽ kiểm tra quyền sở hữu.

Điều này xảy ra theo thứ tự sau:

  1. Shell kiểm tra xem bạn có phải là chủ sở hữu của tệp bạn muốn truy cập hay không. Nếu bạn là chủ sở hữu, bạn sẽ có quyền và hệ vỏ ngừng kiểm tra.
  2. Nếu bạn không phải là chủ sở hữu của tệp, shell sẽ kiểm tra xem bạn có phải là thành viên của một nhóm có quyền đối với tệp hay không. Nếu bạn là thành viên của nhóm này, bạn sẽ truy cập tệp với các quyền mà nhóm đã đặt và trình bao sẽ ngừng kiểm tra.
  3. Nếu bạn không phải là người dùng cũng không phải là chủ sở hữu của một nhóm, bạn sẽ được cấp quyền của những người dùng khác (Khác).

Để xem các chỉ định của chủ sở hữu hiện tại, bạn có thể sử dụng lệnh ls-l. Lệnh này hiển thị người dùng và chủ sở hữu của nhóm. Bên dưới, bạn có thể thấy cài đặt chủ sở hữu cho các thư mục trong thư mục /home.

[root@server1 home]# ls -l
total 8
drwx------. 3  bob            bob            74     Feb   6   10:13 bob
drwx------. 3  caroline       caroline       74     Feb   6   10:13 caroline
drwx------. 3  fozia          fozia          74     Feb   6   10:13 fozia
drwx------. 3  lara           lara           74     Feb   6   10:13 lara
drwx------. 5  lisa           lisa           4096   Feb   6   10:12 lisa
drwx------. 14 user           user           4096   Feb   5   10:35 user

Với lệnh ls bạn có thể hiển thị chủ sở hữu của các tệp trong một thư mục nhất định. Đôi khi, có thể hữu ích khi lấy danh sách tất cả các tệp trên hệ thống có người dùng hoặc nhóm nhất định làm chủ sở hữu. Đối với điều này, bạn có thể sử dụng tìm. Lý lẽ Tìm người dùng có thể được sử dụng cho mục đích này. Ví dụ: lệnh sau liệt kê tất cả các tệp thuộc sở hữu của người dùng linda:

find / -user linda

Bạn cũng có thể dùng tìm để tìm kiếm các tệp có một nhóm nhất định là chủ sở hữu của chúng.

Ví dụ: lệnh sau tìm kiếm tất cả các tệp thuộc nhóm Người sử dụng:

find / -group users

thay đổi chủ sở hữu

Để áp dụng các quyền thích hợp, điều đầu tiên cần xem xét là quyền sở hữu. Có một lệnh cho việc này chown. Cú pháp của lệnh này rất dễ hiểu:

chown кто что

Ví dụ: lệnh sau thay đổi chủ sở hữu của thư mục /home/account thành người dùng linda:

chown linda /home/account

Đội chown có một số tùy chọn, một trong số đó đặc biệt hữu ích: -R. Bạn có thể đoán nó làm gì vì tùy chọn này cũng có sẵn cho nhiều lệnh khác. Điều này cho phép bạn đặt chủ sở hữu theo cách đệ quy, cho phép bạn đặt chủ sở hữu của thư mục hiện tại và mọi thứ bên dưới. Lệnh sau thay đổi quyền sở hữu thư mục /home và mọi thứ bên dưới nó cho người dùng linda:

Bây giờ các chủ sở hữu trông như thế này:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 account account 62 Sep 25 21:41 account
drwx------. 2 lisa    lisa    62 Sep 25 21:42 lisa

Chúng ta hãy làm:

[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#

Bây giờ người dùng lisa đã trở thành chủ sở hữu của thư mục tài khoản:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 lisa account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa    62 Sep 25 21:42 lisa

Thay đổi chủ sở hữu của một nhóm

Có hai cách để thay đổi quyền sở hữu của một nhóm. Bạn có thể làm điều này bằng cách sử dụng chown, nhưng có một lệnh đặc biệt có tên chgrpđó làm công việc. Nếu bạn muốn sử dụng lệnh chown, sử dụng . hoặc : trước tên nhóm.

Lệnh sau thay đổi bất kỳ chủ sở hữu nào của nhóm /home/account thành nhóm tài khoản:

chown .account /home/account

bạn có thể dùng chown để thay đổi chủ sở hữu của người dùng và/hoặc nhóm theo nhiều cách. Dưới đây là một số ví dụ:

  • chown lisa myfile1 đặt người dùng lisa làm chủ sở hữu của myfile1.
  • chown lisa.sale myfile đặt người dùng lisa làm chủ sở hữu của tệp myfile và cũng đặt nhóm bán hàng làm chủ sở hữu của cùng một tệp.
  • chown lisa: myfile bán hàng giống như lệnh trước đó.
  • chown .sale myfile đặt nhóm bán hàng làm chủ sở hữu của myfile mà không thay đổi chủ sở hữu của người dùng.
  • chown : tập tin bán hàng của tôi giống như lệnh trước đó.

Bạn có thể sử dụng lệnh chgrpđể thay đổi chủ sở hữu của nhóm. Xem xét ví dụ sau, nơi bạn có thể sử dụng chgrp đặt chủ sở hữu của thư mục tài khoản thành nhóm bán hàng:

chgrp .sales /home/account

Như với chown, bạn có thể sử dụng tùy chọn -R с chgrp, cũng như thay đổi đệ quy chủ sở hữu của nhóm.

Hiểu về chủ sở hữu mặc định

Bạn có thể nhận thấy rằng khi người dùng tạo tệp, quyền sở hữu mặc định sẽ được áp dụng.
Người dùng tạo tệp tự động trở thành chủ sở hữu của tệp đó và nhóm chính của người dùng đó tự động trở thành chủ sở hữu của tệp đó. Đây thường là nhóm được liệt kê trong tệp /etc/passwd dưới dạng nhóm chính của người dùng. Tuy nhiên, nếu người dùng là thành viên của nhiều nhóm, người dùng có thể thay đổi nhóm chính có hiệu lực.

Để hiển thị nhóm chính hiệu quả hiện tại, người dùng có thể sử dụng lệnh các nhóm:

[root@server1 ~]# groups lisa
lisa : lisa account sales

Nếu người dùng linda hiện tại muốn thay đổi nhóm chính hiệu quả, anh ta sẽ sử dụng lệnh newgrptheo sau là tên của nhóm mà anh ấy muốn đặt làm nhóm chính hiệu quả mới. Sau khi sử dụng lệnh newgrp nhóm chính sẽ hoạt động cho đến khi người dùng nhập lệnh ra hoặc không đăng xuất.

Phần sau đây cho thấy cách người dùng linda sử dụng lệnh này, với doanh số bán hàng là nhóm chính:

lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1

Sau khi thay đổi nhóm chính có hiệu lực, tất cả các tệp mới do người dùng tạo sẽ có nhóm đó làm chủ sở hữu nhóm. Để hoàn nguyên về cài đặt nhóm chính ban đầu, hãy sử dụng ra.

Để có thể sử dụng lệnh newgrp, người dùng phải là thành viên của nhóm mà họ muốn sử dụng làm nhóm chính. Ngoài ra, mật khẩu nhóm có thể được sử dụng cho một nhóm bằng cách sử dụng lệnh gpasswd. Nếu người dùng sử dụng lệnh newgrpnhưng không phải là thành viên của nhóm mục tiêu, trình bao sẽ nhắc nhập mật khẩu của nhóm. Sau khi bạn nhập đúng mật khẩu nhóm, một nhóm chính mới có hiệu lực sẽ được thiết lập.

Quản lý quyền cơ bản

Hệ thống cấp phép Linux được phát minh vào những năm 1970. Vì nhu cầu máy tính bị hạn chế trong những năm đó nên hệ thống cấp phép cơ bản khá hạn chế. Hệ thống cấp phép này sử dụng ba quyền có thể được áp dụng cho các tệp và thư mục. Trong phần này, bạn sẽ học cách sử dụng và thay đổi các quyền này.

Hiểu các quyền Đọc, Viết và Thực thi

Ba quyền cơ bản cho phép bạn đọc, ghi và thực thi tệp. Tác dụng của các quyền này khác nhau khi được áp dụng cho các tệp hoặc thư mục. Đối với một tệp, quyền đọc cho phép bạn mở tệp để đọc. Do đó, bạn có thể đọc nội dung của nó, nhưng điều đó có nghĩa là máy tính của bạn có thể mở tệp để làm gì đó với nó.

Ví dụ, một tệp chương trình cần quyền truy cập vào thư viện phải có quyền truy cập đọc vào thư viện đó. Theo đó, quyền đọc là quyền cơ bản nhất mà bạn cần để làm việc với tệp.

Khi được áp dụng cho một thư mục, chức năng đọc cho phép bạn hiển thị nội dung của thư mục đó. Bạn nên biết rằng quyền này không cho phép bạn đọc các tệp trong thư mục. Hệ thống quyền của Linux không biết tính kế thừa và cách duy nhất để đọc tệp là sử dụng quyền đọc trên tệp đó.

Như bạn có thể đoán, quyền ghi, nếu được áp dụng cho một tệp, sẽ cho phép ghi vào tệp. Nói cách khác, nó cho phép bạn thay đổi nội dung của các tệp hiện có. Tuy nhiên, nó không cho phép bạn tạo hoặc xóa tệp mới hoặc thay đổi quyền của tệp. Để thực hiện việc này, bạn cần cấp quyền ghi cho thư mục mà bạn muốn tạo tệp. Trong các thư mục, quyền này cũng cho phép bạn tạo và xóa các thư mục con mới.

Quyền thực thi là những gì bạn cần để thực thi tệp. Nó sẽ không bao giờ được cài đặt theo mặc định, điều này khiến Linux gần như hoàn toàn miễn nhiễm với virus. Chỉ ai đó có quyền ghi trên thư mục mới có thể áp dụng quyền thực thi.

Sau đây tóm tắt việc sử dụng các quyền cơ bản:

Quyền trong Linux (chown, chmod, SUID, GUID, bit dính, ACL, umask)

Sử dụng chmod

Lệnh được sử dụng để quản lý quyền. chmod. sử dụng chmod bạn có thể đặt quyền cho người dùng (user), nhóm (group) và những người khác (other). Bạn có thể sử dụng lệnh này ở hai chế độ: chế độ tương đối và chế độ tuyệt đối. Ở chế độ tuyệt đối, ba chữ số được sử dụng để đặt các quyền cơ bản.

Quyền trong Linux (chown, chmod, SUID, GUID, bit dính, ACL, umask)

Khi đặt quyền, hãy tính toán giá trị bạn cần. Nếu bạn muốn thiết lập read/write/execute cho user, read/execute cho group và read/execute cho người khác trong /somefile thì bạn sử dụng lệnh sau chmod:

chmod 755 /somefile

Khi bạn sử dụng chmod theo cách này, tất cả các quyền hiện tại được thay thế bằng các quyền bạn đã đặt.

Nếu bạn muốn thay đổi các quyền liên quan đến các quyền hiện tại, bạn có thể sử dụng chmod ở chế độ tương đối. sử dụng chmod ở chế độ tương đối, bạn làm việc với ba chỉ báo để cho biết bạn muốn làm gì:

  1. Trước tiên, bạn chỉ định người mà bạn muốn thay đổi quyền. Để làm điều này, bạn có thể chọn giữa người dùng (u), nhóm (g) và những người khác (o).
  2. Sau đó, bạn sử dụng một câu lệnh để thêm hoặc xóa các quyền khỏi chế độ hiện tại hoặc đặt chúng hoàn toàn.
  3. Cuối cùng, bạn sử dụng r, w и xđể chỉ định những quyền bạn muốn đặt.

Khi thay đổi quyền ở chế độ tương đối, bạn có thể bỏ qua phần "đến" để thêm hoặc xóa quyền đối với tất cả các đối tượng. Ví dụ: lệnh này thêm quyền thực thi cho tất cả người dùng:

chmod +x somefile

Khi làm việc ở chế độ tương đối, bạn cũng có thể sử dụng các lệnh phức tạp hơn. Ví dụ: lệnh này thêm quyền ghi vào một nhóm và xóa quyền đọc đối với những người khác:

chmod g+w,o-r somefile

Khi sử dụng chmod -R o+rx /dữ liệu bạn đặt quyền thực thi cho tất cả các thư mục cũng như các tệp trong thư mục/data. Để chỉ đặt quyền thực thi cho các thư mục chứ không phải cho các tệp, hãy sử dụng chmod -R o+ rX /dữ liệu.

Chữ hoa X đảm bảo rằng các tệp không có quyền thực thi trừ khi tệp đã đặt quyền thực thi cho một số đối tượng. Điều này làm cho X trở thành một cách thông minh hơn để xử lý các quyền thực thi; điều này sẽ tránh đặt quyền này trên các tệp không bắt buộc.

Quyền mở rộng

Ngoài các quyền cơ bản mà bạn vừa đọc, Linux còn có một tập hợp các quyền nâng cao. Đây không phải là những quyền bạn đặt theo mặc định, nhưng đôi khi chúng cung cấp một phần bổ sung hữu ích. Trong phần này, bạn sẽ tìm hiểu chúng là gì và cách thiết lập chúng.

Hiểu SUID, GUID và các quyền mở rộng của Sticky Bit

Có ba quyền nâng cao. Đầu tiên trong số này là quyền đặt mã định danh người dùng (SUID). Trong một số trường hợp đặc biệt, bạn có thể áp dụng quyền này cho các tệp thực thi. Theo mặc định, người dùng chạy tệp thực thi sẽ chạy tệp đó với quyền của riêng họ.

Đối với người dùng thông thường, điều này thường có nghĩa là việc sử dụng chương trình bị hạn chế. Tuy nhiên, trong một số trường hợp, người dùng cần có quyền đặc biệt, chỉ để thực hiện một tác vụ cụ thể.

Ví dụ, hãy xem xét một tình huống mà người dùng cần thay đổi mật khẩu của họ. Để thực hiện việc này, người dùng phải ghi mật khẩu mới của họ vào tệp /etc/shadow. Tuy nhiên, tệp này không thể ghi được bởi người dùng không root:

root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow

Quyền SUID đưa ra giải pháp cho vấn đề này. Theo mặc định, tiện ích /usr/bin/passwd sử dụng quyền này. Điều này có nghĩa là khi thay đổi mật khẩu, người dùng tạm thời trở thành người chủ, cho phép anh ta ghi vào tệp /etc/shadow. Bạn có thể thấy quyền SUID với ls-l như s ở một vị trí mà bạn thường mong đợi để nhìn thấy x cho quyền tùy chỉnh:

[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd

Quyền SUID có thể trông hữu ích (và trong một số trường hợp là như vậy), nhưng đồng thời nó cũng tiềm ẩn nguy hiểm. Nếu không áp dụng đúng cách, bạn có thể vô tình cấp quyền root. Do đó, tôi khuyên bạn chỉ nên sử dụng nó với sự cẩn thận tối đa.

Hầu hết các quản trị viên sẽ không bao giờ cần sử dụng nó; bạn sẽ chỉ thấy nó trong một số tệp mà hệ điều hành sẽ đặt nó theo mặc định.

Quyền đặc biệt thứ hai là định danh nhóm (SGID). Sự cho phép này có hai tác dụng. Khi được áp dụng cho một tệp thi hành, nó cung cấp cho người dùng thực thi tệp các quyền của chủ sở hữu nhóm của tệp. Vì vậy, SGID có thể làm ít nhiều giống như SUID. Tuy nhiên, SGID thực tế không được sử dụng cho mục đích này.

Cũng như quyền SUID, SGID được áp dụng cho một số tệp hệ thống dưới dạng cài đặt mặc định.

Khi được áp dụng cho một thư mục, SGID có thể hữu ích vì bạn có thể sử dụng nó để đặt chủ sở hữu nhóm mặc định cho các tệp và thư mục con được tạo trong thư mục đó. Theo mặc định, khi người dùng tạo tệp, nhóm chính hiệu quả của họ được đặt làm chủ sở hữu nhóm cho tệp đó.

Điều này không phải lúc nào cũng hữu ích, đặc biệt là khi người dùng Red Hat/CentOS có nhóm chính được đặt thành một nhóm có cùng tên với người dùng và trong đó người dùng là thành viên duy nhất. Do đó, theo mặc định, các tệp mà người dùng tạo sẽ được chia sẻ hàng loạt.

Hãy tưởng tượng một tình huống mà người dùng linda và lori làm việc trong lĩnh vực kế toán và là thành viên của một nhóm Tài khoản. Theo mặc định, những người dùng này là thành viên của một nhóm riêng tư mà họ là thành viên duy nhất. Tuy nhiên, cả hai người dùng đều là thành viên của nhóm tài khoản, nhưng cũng là một tham số nhóm phụ.

Tình huống mặc định là khi bất kỳ người dùng nào trong số này tạo tệp, nhóm chính sẽ trở thành chủ sở hữu. Do đó, theo mặc định, linda không thể truy cập các tệp do lori tạo và ngược lại. Tuy nhiên, nếu bạn tạo một thư mục nhóm dùng chung (giả sử /groups/account) và đảm bảo rằng quyền SGID được áp dụng cho thư mục đó và tài khoản nhóm được đặt làm chủ sở hữu nhóm cho thư mục đó, thì tất cả các tệp được tạo trong thư mục đó và tất cả của các thư mục con của nó , cũng có tài khoản nhóm làm chủ sở hữu nhóm theo mặc định.

Vì lý do này, quyền SGID là quyền rất hữu ích để đặt trên các thư mục nhóm công khai.

Quyền SGID được hiển thị trong đầu ra ls-l như s tại vị trí mà bạn thường tìm thấy quyền thực hiện một nhóm:

[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account

Thứ ba của các quyền đặc biệt là bit dính. Quyền này rất hữu ích để bảo vệ tệp khỏi bị xóa do vô tình trong môi trường có nhiều người dùng có quyền ghi vào cùng một thư mục. Nếu một bit dính được sử dụng, người dùng chỉ có thể xóa tệp nếu họ là chủ sở hữu người dùng của tệp hoặc thư mục chứa tệp. Vì lý do này, nó được sử dụng làm quyền mặc định cho thư mục /tmp và cũng có thể hữu ích cho các thư mục nhóm công khai.

Nếu không có bit dính, nếu người dùng có thể tạo tệp trong một thư mục, họ cũng có thể xóa tệp khỏi thư mục đó. Trong môi trường nhóm công khai, điều này có thể gây khó chịu. Hãy tưởng tượng người dùng linda và lori, cả hai đều có quyền ghi vào thư mục /data/account và nhận các quyền đó bằng cách là thành viên của nhóm tài khoản. Do đó, linda có thể xóa các tệp được tạo bởi lori và ngược lại.

Khi bạn áp dụng bit dính, người dùng chỉ có thể xóa tệp nếu một trong các điều kiện sau là đúng:

  • Người dùng là chủ sở hữu của tệp;
  • Người dùng là chủ sở hữu của thư mục chứa tệp.

Khi sử dụng ls-l, bạn có thể thấy bit dính như t ở vị trí mà bạn thường thấy quyền thực thi cho người khác:

[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/

Áp dụng các quyền mở rộng

Để áp dụng SUID, SGID và bit dính, bạn cũng có thể sử dụng chmod. SUID có giá trị số là 4, SGID có giá trị số là 2 và bit dính có giá trị số là 1.

Nếu bạn muốn áp dụng các quyền này, bạn cần thêm đối số có bốn chữ số vào chmod, có chữ số đầu tiên đề cập đến các quyền đặc biệt. Ví dụ: dòng sau sẽ thêm quyền SGID vào thư mục và đặt rwx cho người dùng và rx cho nhóm và những người khác:

chmod 2755 /somedir

Điều này khá không thực tế nếu bạn cần xem các quyền hiện tại được đặt trước khi làm việc với chmod ở chế độ tuyệt đối. (Bạn có nguy cơ ghi đè quyền nếu không.) Vì vậy, tôi khuyên bạn nên chạy ở chế độ tương đối nếu bạn cần áp dụng bất kỳ quyền đặc biệt nào:

  1. Để sử dụng SUID chmod u + s.
  2. Để sử dụng SGID chmod g + s.
  3. Để sử dụng bit dính chmod + t, theo sau là tên của tệp hoặc thư mục mà bạn muốn đặt quyền.

Bảng tóm tắt mọi thứ bạn cần biết về việc quản lý các quyền đặc biệt.

Quyền trong Linux (chown, chmod, SUID, GUID, bit dính, ACL, umask)

Ví dụ về làm việc với các quyền đặc biệt

Trong ví dụ này, bạn sử dụng các quyền đặc biệt để giúp các thành viên nhóm chia sẻ tệp dễ dàng hơn trong thư mục nhóm dùng chung. Bạn chỉ định bit ID cho ID nhóm đã đặt cũng như bit cố định và bạn thấy rằng sau khi chúng được đặt, các tính năng sẽ được thêm vào để giúp các thành viên trong nhóm làm việc cùng nhau dễ dàng hơn.

  1. Mở một thiết bị đầu cuối nơi bạn là người dùng linda. Bạn có thể tạo người dùng bằng lệnh người dùng linda, thêm mật khẩu mật khẩu Linda.
  2. Tạo thư mục /data trong thư mục gốc và thư mục con /data/sales bằng lệnh mkdir -p/dữ liệu/bán hàng. Hoàn thành cd/dữ liệu/bán hàngđể đi đến thư mục bán hàng. Hoàn thành chạm vào linda1 и chạm vào linda2để tạo hai tệp trống do linda sở hữu.
  3. Hành hình su-lisa để chuyển người dùng hiện tại sang người dùng lisa, người này cũng là thành viên của nhóm bán hàng.
  4. Hành hình cd/dữ liệu/bán hàng và từ thư mục đó thực thi ls-l. Bạn sẽ thấy hai tệp được tạo bởi người dùng linda và thuộc về nhóm linda. Hoàn thành rm -f Linda*. Điều này sẽ loại bỏ cả hai tập tin.
  5. Hành hình chạm vào lisa1 и chạm vào lisa2để tạo hai tệp thuộc sở hữu của người dùng lisa.
  6. Hành hình su- để nâng cao đặc quyền của bạn lên root.
  7. Hành hình chmod g+s,o+t /data/saleđể đặt bit định danh nhóm (GUID) cũng như bit dính trong thư mục nhóm dùng chung.
  8. Hành hình su-linh. sau đó làm chạm vào linda3 и chạm vào linda4. Bây giờ bạn sẽ thấy rằng hai tệp bạn đã tạo thuộc sở hữu của nhóm bán hàng, là chủ sở hữu nhóm của thư mục /data/sales.
  9. Hành hình rm -rf lisa*. Bit cố định ngăn các tệp này bị xóa thay mặt cho người dùng linda, vì bạn không phải là chủ sở hữu của các tệp này. Lưu ý rằng nếu người dùng linda là chủ sở hữu của thư mục /data/sales, thì họ vẫn có thể xóa các tệp này!

Quản lý ACL (setfacl, getfacl) trong Linux

Mặc dù các quyền mở rộng được thảo luận ở trên bổ sung chức năng hữu ích cho cách Linux xử lý các quyền, nhưng nó không cho phép bạn cấp quyền cho nhiều người dùng hoặc nhóm trong cùng một tệp.

Danh sách kiểm soát truy cập cung cấp tính năng này. Ngoài ra, chúng cho phép quản trị viên đặt quyền mặc định theo cách phức tạp, trong đó quyền được đặt có thể khác nhau giữa các thư mục.

Hiểu ACL

Mặc dù hệ thống con ACL bổ sung chức năng tuyệt vời cho máy chủ của bạn, nhưng nó có một nhược điểm: không phải tất cả các tiện ích đều hỗ trợ nó. Do đó, bạn có thể mất cài đặt ACL khi sao chép hoặc di chuyển tệp và phần mềm sao lưu của bạn có thể không sao lưu cài đặt ACL của bạn.

Tiện ích tar không hỗ trợ ACL. Để đảm bảo cài đặt ACL không bị mất khi bạn tạo bản sao lưu, hãy sử dụng ngôi sao thay vì hắc ín. ngôi sao hoạt động với các tùy chọn giống như tar; nó chỉ thêm hỗ trợ cho cài đặt ACL.

Bạn cũng có thể sao lưu ACL với getfacl, có thể được khôi phục bằng lệnh setfacl. Để tạo bản sao lưu, hãy sử dụng getfacl -R /thư mục > file.acls. Để khôi phục cài đặt từ tệp sao lưu, hãy sử dụng setfacl --restore=file.acl.

Thiếu sự hỗ trợ của một số công cụ không phải là một vấn đề. ACL thường được áp dụng cho các thư mục như một thước đo cấu trúc hơn là cho các tệp riêng lẻ.
Do đó, sẽ không có nhiều trong số chúng, mà chỉ có một số ít, được áp dụng ở những nơi thông minh trong hệ thống tệp. Do đó, việc khôi phục các ACL ban đầu mà bạn đã làm việc tương đối dễ dàng, ngay cả khi phần mềm sao lưu của bạn không hỗ trợ chúng.

Chuẩn bị hệ thống tệp cho ACL

Trước khi bắt đầu làm việc với ACL, bạn có thể cần chuẩn bị hệ thống tệp của mình để hỗ trợ ACL. Do siêu dữ liệu hệ thống tệp cần được mở rộng nên không phải lúc nào cũng có hỗ trợ mặc định cho ACL trong hệ thống tệp. Nếu bạn nhận được thông báo "thao tác không được hỗ trợ" khi thiết lập ACL cho hệ thống tệp, hệ thống tệp của bạn có thể không hỗ trợ ACL.

Để khắc phục điều này, bạn cần thêm tùy chọn gắn acl trong /etc/fstab để hệ thống tệp được cài đặt với hỗ trợ ACL theo mặc định.

Thay đổi và xem cài đặt ACL bằng setfacl và getfacl

Để đặt ACL, bạn cần lệnh thiết lập. Để xem cài đặt ACL hiện tại, bạn cần getfacl. Đội ls-l không hiển thị bất kỳ ACL hiện có nào; nó chỉ hiển thị dấu + sau danh sách quyền, cho biết rằng ACL cũng áp dụng cho tệp.

Trước khi thiết lập ACL, bạn nên hiển thị cài đặt ACL hiện tại với getfacl. Trong ví dụ bên dưới, bạn có thể xem các quyền hiện tại, như được hiển thị với ls-l, và cũng như được hiển thị với getfacl. Nếu quan sát kỹ, bạn sẽ thấy thông tin hiển thị hoàn toàn giống nhau.

[root@server1 /]# ls -ld /dir
drwxr-xr-x. 2 root root 6 Feb 6 11:28 /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

Là kết quả của việc thực hiện lệnh getfacl bên dưới, bạn có thể thấy rằng các quyền được hiển thị cho ba đối tượng khác nhau: người dùng, nhóm và những đối tượng khác. Bây giờ, hãy thêm một ACL để cấp quyền đọc và thực thi cho nhóm bán hàng. lệnh cho điều này setfacl -mg:doanh số:rx /dir. trong đội này -m cho biết rằng các cài đặt ACL hiện tại cần được thay đổi. Sau đó g:doanh số:rx ra lệnh thiết lập ACL đọc-thực thi (rx) cho nhóm (g) việc bán hàng. Bên dưới, bạn có thể thấy lệnh trông như thế nào, cũng như đầu ra của lệnh getfacl sau khi thay đổi cài đặt ACL hiện tại.

[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x

Bây giờ bạn đã hiểu cách thiết lập ACL nhóm, thật dễ dàng để hiểu ACL cho người dùng và những người dùng khác. Ví dụ, lệnh setfacl -mu:linda:rwx /data cấp quyền cho người dùng linda trong thư mục /data mà không biến anh ta thành chủ sở hữu hoặc thay đổi sự phân công của chủ sở hữu hiện tại.

Đội thiết lập có nhiều tính năng và tùy chọn. Một tùy chọn đặc biệt quan trọng, tham số -R. Nếu được sử dụng, tùy chọn này sẽ đặt ACL cho tất cả các tệp và thư mục con hiện đang tồn tại trong thư mục mà bạn đặt ACL. Bạn nên luôn sử dụng tùy chọn này khi thay đổi ACL cho các thư mục hiện có.

Làm việc với ACL mặc định

Một trong những lợi ích của việc sử dụng ACL là bạn có thể cấp quyền cho nhiều người dùng hoặc nhóm trong một thư mục. Một lợi ích khác là bạn có thể kích hoạt tính kế thừa bằng cách làm việc với các ACL mặc định.

Bằng cách đặt ACL mặc định, bạn xác định các quyền sẽ được đặt cho tất cả các mục mới được tạo trong thư mục. Xin lưu ý rằng ACL mặc định không thay đổi quyền đối với các tệp và thư mục con hiện có. Để thay đổi chúng, bạn cũng cần thêm một ACL bình thường!

Điều này là quan trọng để biết. Nếu bạn muốn sử dụng ACL để định cấu hình nhiều người dùng hoặc nhóm truy cập vào cùng một thư mục, bạn phải đặt ACL hai lần. Lần dùng đầu tiên setfacl -R -mđể thay đổi ACL cho các tệp hiện tại. Sau đó sử dụng setfacl-md:để chăm sóc tất cả các yếu tố mới cũng sẽ được tạo ra.

Để đặt ACL mặc định, bạn chỉ cần thêm tùy chọn d sau tùy chọn -m (thứ tự quan trọng!). Vì vậy, sử dụng setfacl -md:g:sales:rx /datanếu bạn muốn bán hàng theo nhóm đọc và thực thi bất kỳ thứ gì đã từng được tạo trong thư mục/data.

Khi sử dụng ACL mặc định, cũng có thể hữu ích khi đặt ACL cho những người khác. Điều này thường không có nhiều ý nghĩa vì bạn cũng có thể thay đổi quyền cho người khác bằng cách sử dụng chmod. Tuy nhiên, những gì bạn không thể làm với chmod, là chỉ định các quyền phải được cấp cho người dùng khác đối với mọi tệp mới được tạo. Nếu bạn muốn ngăn người khác nhận bất kỳ quyền nào đối với bất kỳ thứ gì được tạo trong/dữ liệu chẳng hạn, hãy sử dụng setfacl -md:o::- /data.

ACL và các quyền bình thường không phải lúc nào cũng được tích hợp tốt. Các vấn đề có thể phát sinh nếu bạn áp dụng ACL mặc định cho một thư mục, sau đó các mục được thêm vào thư mục đó, rồi cố gắng thay đổi các quyền thông thường. Những thay đổi áp dụng cho quyền thông thường sẽ không được phản ánh rõ ràng trong tổng quan về ACL. Để tránh sự cố, trước tiên hãy đặt các quyền thông thường, sau đó đặt ACL mặc định (và cố gắng không thay đổi lại chúng sau đó).

Ví dụ về quản lý quyền nâng cao bằng ACL

Trong ví dụ này, bạn sẽ tiếp tục với các thư mục /data/account và /data/sales mà bạn đã tạo trước đó. Trong các ví dụ trước, bạn đã đảm bảo rằng nhóm bán hàng có quyền đối với /data/sales và nhóm tài khoản có quyền đối với /data/account.

Trước tiên, hãy đảm bảo rằng nhóm tài khoản có quyền đọc trên thư mục /data/sales và nhóm bán hàng có quyền đọc trên thư mục /data/account.

Sau đó, bạn đặt ACL mặc định để đảm bảo tất cả các tệp mới có quyền chính xác được đặt cho tất cả các mục mới.

  1. Mở một thiết bị đầu cuối.
  2. Hành hình setfacl -mg:account:rx /data/sales и setfacl -mg:sales:rx /data/account.
  3. Hành hình getfaclđể đảm bảo các quyền được đặt theo cách bạn muốn.
  4. Hành hình setfacl -md:g:account:rwx,g:sales:rx /data/salesđể đặt ACL mặc định cho thư mục bán hàng.
  5. Thêm ACL mặc định cho thư mục/data/account bằng cách sử dụng setfacl -md:g:sales:rwx,g:account:rx /data/account.
  6. Xác minh rằng cài đặt ACL có hiệu lực bằng cách thêm tệp mới vào /data/sales. Hoàn thành chạm/dữ liệu/bán hàng/tệp mới và thực hiện getfacl/dữ liệu/bán hàng/tệp mới để kiểm tra các quyền hiện tại.

Đặt quyền mặc định với umask

Ở trên, bạn đã học cách làm việc với ACL mặc định. Nếu bạn không sử dụng ACL, có một tùy chọn trình bao xác định các quyền mặc định mà bạn sẽ nhận được: cái ô (mặt nạ ngược). Trong phần này, bạn sẽ học cách thay đổi các quyền mặc định với cái ô.

Bạn có thể nhận thấy rằng khi bạn tạo một tệp mới, một số quyền mặc định sẽ được đặt. Các quyền này được xác định bởi cài đặt cái ô. Cài đặt shell này áp dụng cho tất cả người dùng khi đăng nhập. trong tham số cái ô một giá trị số được sử dụng, được trừ khỏi các quyền tối đa có thể được đặt tự động cho tệp; cài đặt tối đa cho tệp là 666 và cho thư mục là 777.

Tuy nhiên, một số trường hợp ngoại lệ áp dụng cho quy tắc này. Bạn có thể tìm thấy tổng quan đầy đủ về cài đặt cái ô trong bảng dưới đây.

Trong số các số được sử dụng trong cái ô, như trong trường hợp đối số số cho lệnh chmod, chữ số đầu tiên đề cập đến quyền của người dùng, chữ số thứ hai đề cập đến quyền của nhóm và chữ số cuối cùng đề cập đến quyền mặc định được đặt cho những người khác. Nghĩa cái ô 022 mặc định cung cấp 644 cho tất cả các tệp mới và 755 cho tất cả các thư mục mới được tạo trên máy chủ của bạn.

Tổng quan đầy đủ về tất cả các giá trị số cái ô và kết quả của chúng trong bảng dưới đây.

Quyền trong Linux (chown, chmod, SUID, GUID, bit dính, ACL, umask)

Một cách dễ dàng để xem cách cài đặt ô hoạt động như sau: bắt đầu với quyền mặc định của tệp được đặt thành 666 và trừ đi ô để có được các quyền hiệu quả. Làm tương tự cho thư mục và quyền mặc định của nó là 777.

Có hai cách để thay đổi cài đặt ô: cho tất cả người dùng và cho từng người dùng. Nếu bạn muốn đặt ô cho tất cả người dùng, bạn phải đảm bảo rằng cài đặt ô được tính đến khi khởi động các tệp môi trường trình bao, như được chỉ định trong /etc/profile. Cách tiếp cận đúng là tạo tập lệnh shell có tên là umask.sh trong thư mục /etc/profile.d và chỉ định ô bạn muốn sử dụng trong tập lệnh shell đó. Nếu ô được thay đổi trong tệp này, nó sẽ được áp dụng cho tất cả người dùng sau khi đăng nhập vào máy chủ.

Một cách khác để cài đặt ô thông qua /etc/profile và các tệp liên quan, áp dụng cho tất cả người dùng đăng nhập, là thay đổi cài đặt ô trong một tệp có tên .profile được tạo trong thư mục chính của mỗi người dùng.

Các cài đặt được áp dụng trong tệp này chỉ áp dụng cho từng người dùng; do đó đây là một phương pháp tốt nếu bạn cần thêm chi tiết. Cá nhân tôi thích tính năng này để thay đổi ô mặc định cho người dùng root thành 027 trong khi người dùng bình thường đang chạy với ô mặc định là 022.

Làm việc với các thuộc tính người dùng mở rộng

Đây là phần cuối cùng về quyền Linux.

Khi làm việc với các quyền, luôn có mối quan hệ giữa đối tượng người dùng hoặc nhóm và các quyền mà đối tượng người dùng hoặc nhóm có trên một tệp hoặc thư mục. Một phương pháp khác để bảo vệ các tệp trên máy chủ Linux là làm việc với các thuộc tính.
Các thuộc tính thực hiện công việc của chúng bất kể người dùng truy cập tệp.

Như với ACL, các thuộc tính tệp có thể cần bao gồm tùy chọn gắn kết.

Đây là một lựa chọn user_xattr. Nếu bạn nhận được thông báo "thao tác không được hỗ trợ" khi làm việc với các thuộc tính người dùng mở rộng, hãy nhớ đặt tham số gắn kết trong /etc/fstab.

Nhiều thuộc tính được ghi lại. Một số thuộc tính có sẵn nhưng chưa được triển khai. Đừng sử dụng chúng; họ sẽ không mang lại cho bạn bất cứ điều gì.

Dưới đây là các thuộc tính hữu ích nhất mà bạn có thể áp dụng:

A Thuộc tính này đảm bảo rằng thời gian truy cập tệp của tập tin không thay đổi.
Thông thường, mỗi khi tệp được mở, thời gian truy cập của tệp phải được ghi lại trong siêu dữ liệu của tệp. Điều này tác động tiêu cực đến hiệu suất; vì vậy đối với các tệp được truy cập thường xuyên, thuộc tính A có thể được sử dụng để vô hiệu hóa tính năng này.

a Thuộc tính này cho phép bạn thêm nhưng không xóa tệp.

c Nếu bạn đang sử dụng hệ thống tệp hỗ trợ nén ở mức âm lượng, thì thuộc tính tệp này đảm bảo rằng tệp được nén trong lần đầu tiên cơ chế nén được bật.

D Thuộc tính này đảm bảo rằng các thay đổi đối với tệp được ghi vào đĩa ngay lập tức thay vì được lưu vào bộ đệm trước. Đây là một thuộc tính hữu ích trên các tệp cơ sở dữ liệu quan trọng để đảm bảo chúng không bị lạc giữa bộ nhớ cache của tệp và ổ cứng.

d Thuộc tính này đảm bảo rằng tệp sẽ không được lưu trong các bản sao lưu nơi tiện ích kết xuất được sử dụng.

I Thuộc tính này cho phép lập chỉ mục cho thư mục mà nó được kích hoạt. Điều này cung cấp khả năng truy cập tệp nhanh hơn cho các hệ thống tệp nguyên thủy như Ext3 không sử dụng cơ sở dữ liệu cây B để truy cập tệp nhanh.

i Thuộc tính này làm cho tệp không thay đổi. Do đó, không thể thực hiện thay đổi nào đối với tệp, điều này hữu ích cho các tệp cần được bảo vệ bổ sung.

j Thuộc tính này đảm bảo rằng, trên hệ thống tệp ext3, tệp đầu tiên được ghi vào nhật ký và sau đó vào các khối dữ liệu trên đĩa cứng.

s Ghi đè lên các khối mà tệp đã được lưu thành 0 sau khi xóa tệp. Điều này đảm bảo rằng tệp không thể được khôi phục sau khi tệp đã bị xóa.

u Thuộc tính này lưu trữ thông tin về việc xóa. Điều này cho phép bạn phát triển một tiện ích hoạt động với thông tin này để cứu các tệp đã bị xóa.

Nếu bạn muốn áp dụng các thuộc tính, bạn có thể sử dụng lệnh nói nhảm. Ví dụ, sử dụng chattr +s vài tập tinđể áp dụng các thuộc tính cho somefile. Cần loại bỏ một thuộc tính? Sau đó sử dụng chattr -s somefilevà nó sẽ được gỡ bỏ. Để có cái nhìn tổng quan về tất cả các thuộc tính hiện đang được áp dụng, hãy sử dụng lệnh lsattr.

Tóm tắt thông tin

Trong bài viết này, bạn đã học cách làm việc với các quyền. Bạn đọc về ba quyền cơ bản, quyền nâng cao và cách áp dụng ACL trên hệ thống tệp. Bạn cũng đã học cách sử dụng tùy chọn ô để áp dụng các quyền mặc định. Ở cuối bài viết này, bạn đã học cách sử dụng các thuộc tính do người dùng mở rộng để áp dụng một lớp bảo mật hệ thống tệp bổ sung.

Nếu bạn thích bản dịch này, xin vui lòng viết về nó trong phần bình luận. Sẽ có thêm động lực để thực hiện những bản dịch hữu ích.

Sửa một số lỗi chính tả và lỗi ngữ pháp trong bài viết. Giảm một số đoạn văn cồng kềnh thành những đoạn văn nhỏ hơn để dễ đọc hơn.

Thay vì "Chỉ người có quyền quản trị đối với thư mục mới có thể áp dụng quyền thực thi." đã sửa thành "Chỉ người có quyền ghi trên thư mục mới có thể áp dụng quyền thực thi.", Điều này sẽ đúng hơn.

Cảm ơn vì những bình luận berez.

thay thế:
Nếu bạn không phải là chủ sở hữu của người dùng, trình bao sẽ kiểm tra xem bạn có phải là thành viên của một nhóm hay không, còn được gọi là nhóm của tệp.

Trên:
Nếu bạn không phải là chủ sở hữu của tệp, shell sẽ kiểm tra xem bạn có phải là thành viên của một nhóm có quyền đối với tệp hay không. Nếu bạn là thành viên của nhóm này, bạn sẽ truy cập tệp với các quyền mà nhóm đã đặt và trình bao sẽ ngừng kiểm tra.

Cảm ơn bình luận của bạn Cướp biển tiền điện tử

Nguồn: www.habr.com

Thêm một lời nhận xét