Các cách khác nhau để đặt quyền truy cập tệp vv trên gnu / linux là gì


19

Trên Unix, một thời gian dài trở lại, tôi đã tìm hiểu về chmod: cách truyền thống để đặt quyền, trên Unix (và cho phép các chương trình đạt được các đặc quyền, sử dụng setuid, setgid).

Gần đây tôi đã phát hiện ra một số lệnh mới hơn, trên GNU / Linux:

  • setfaclmở rộng các ugo:rwxbit truyền thống và tbit của chmod.
  • setcapcho phép kiểm soát hạt mịn nhiều hơn ug:sbit của chmod.
  • chattr Cho phép một số điều khiển khác (một chút hỗn hợp) của tệp.

Có ai khác không?


xem thêm unix.stackexchange.com/q/183994/4778 để biết thêm chi tiết vềchmod
ctrl-alt-delor

xem thêm unix.stackexchange.com/q/246606/4778 để biết các ACL mở rộng (richACLs).
ctrl-alt-delor

Câu trả lời:


28

chmod: thay đổi bit chế độ tập tin

Cách sử dụng (chế độ bát phân):

    chmod <octal-mode> files...

Cách sử dụng (chế độ tượng trưng):

    chmod <references><operator><modes> files..

referenceslà sự kết hợp của các chữ cái ugoa, xác định quyền truy cập của người dùng nào filessẽ được sửa đổi:

  • u người dùng sở hữu nó
  • gnhững người dùng khác trong filenhóm của
  • o những người dùng khác không thuộc nhóm
  • a tất cả người dùng

    Nếu bỏ qua, nó mặc định cho tất cả người dùng, nhưng chỉ các quyền được phép bởi người umaskđược sửa đổi.

    operatorlà một trong những nhân vật +-=:

    • + thêm các bit chế độ tệp được chỉ định vào các bit chế độ tệp hiện có của từng bit file
    • - xóa các bit chế độ tệp được chỉ định thành các bit chế độ tệp hiện có của từng bit file
    • =thêm các bit được chỉ định và loại bỏ các bit không xác định, ngoại trừ các bit setuidsetgidbit được đặt cho các thư mục, trừ khi được chỉ định rõ ràng.

    modebao gồm sự kết hợp của các chữ cái rwxXst, xác định bit quyền nào sẽ được sửa đổi:

    • r đọc
    • w viết
    • x thực thi (hoặc tìm kiếm thư mục)
    • X chỉ thực hiện / tìm kiếm nếu tệp là một thư mục hoặc đã thiết lập bit thực thi cho một số người dùng
    • ssetuid hoặc setgid (tùy theo chỉ định references)
    • t cờ xóa hạn chế hoặc bit dính

    Ngoài ra, modecó thể bao gồm một trong các chữ cái ugo, trong trường hợp đó, chế độ tương ứng với các quyền hiện được cấp cho chủ sở hữu ( u), thành viên của filenhóm ( g) hoặc quyền của người dùng trong cả hai loại trước ( o).

Các bit khác nhau của chmodgiải thích:

  • Kiểm soát truy cập (xem thêm setfacl)
    • rwx - đọc (r), ghi (w) và thực thi / chéo (x) quyền.
      • Đọc (r) ảnh hưởng nếu một tập tin có thể được đọc, hoặc nếu một thư mục có thể được liệt kê.
      • Write (w) ảnh hưởng đến nếu một tập tin có thể được ghi vào hoặc nếu một thư mục có thể được chỉnh sửa (các tập tin được thêm, xóa, đổi tên).
      • Thực thi (x) ảnh hưởng nếu một tệp có thể được chạy, sử dụng cho các tập lệnh (xem #!) và các tệp thực thi khác.
      • Cross (x) ảnh hưởng nếu một thư mục có thể được duyệt qua.
    • st- bit dính (t) và setgid (s) trên các thư mục
      • Các bit dính chỉ ảnh hưởng đến thư mục. Sẽ ngăn bất kỳ ai ngoại trừ chủ sở hữu tệp và root, xóa các tệp trong thư mục.
      • bit setgid trên các thư mục, sẽ khiến các tệp và thư mục mới có nhóm được đặt thành cùng một nhóm và các thư mục mới có tập bit setgid (xem thêm mặc định trong setfacl).
    • s - setuid, setgid, trên các tập tin thực thi.
      • Điều này có thể ảnh hưởng đến bảo mật theo cách xấu, nếu bạn không biết những gì bạn đang làm.
      • Khi một tệp thực thi được chạy, nếu một trong các bit này được đặt, thì người dùng / nhóm hiệu quả của tệp thực thi sẽ trở thành tệp thực thi. Do đó chương trình chạy như người dùng đó. xem setcapcho một cách hiện đại hơn để làm điều này.

chown chgrp:


chattr: thay đổi thuộc tính tệp

Sử dụng:

    chattr <operator><attribute> files...

operatorlà một trong các ký tự +-=: * +thêm các thuộc tính được chọn vào hiện tại attributescủa files * -loại bỏ attributes * đã chọn * =ghi đè lên tập thuộc tính hiện tại mà các tệp có với chỉ định attributes.

attributelà sự kết hợp của các chữ cái acdeijstuADST, tương ứng với các thuộc tính:

  • a chỉ thêm
  • c nén
  • d không đổ
  • e định dạng phạm vi
  • i bất biến
  • j nhật ký dữ liệu
  • s xóa an toàn
  • t không hợp nhất đuôi
  • u không thể xóa được
  • Akhông atimecập nhật
  • D cập nhật thư mục đồng bộ
  • S cập nhật đồng bộ
  • T đầu phân cấp thư mục

setfattr: thay đổi thuộc tính tệp mở rộng

Cách sử dụng (đặt thuộc tính):

    setfattr -n <name> -v <value> files...

Cách sử dụng (loại bỏ):

    setfattr -x <name> files...

name là tên của thuộc tính mở rộng để đặt hoặc xóa

value là giá trị mới của thuộc tính mở rộng


setfacl: thay đổi danh sách kiểm soát truy cập tập tin

Sử dụng:

    setfacl <option> [default:][<target>:][<param>][:<perms>] files...

option phải bao gồm một trong những điều sau đây:

  • --set đặt ACL của tệp hoặc thư mục, thay thế ACL trước đó
  • -m| --modifysửa đổi ACL của một tập tin hoặc thư mục
  • -x| --remove xóa các mục ACL của một tập tin hoặc thư mục

    targetlà một trong những chữ cái ugmo(hoặc dạng dài hơn hiển thị bên dưới):

  • u, sự userscho phép của người dùng được đặt tên được xác định bởi param, mặc định cho chủ sở hữu tệp uidnếu bị bỏ qua

  • g, sự groupcho phép của một nhóm được đặt tên được xác định bởi param, mặc định cho nhóm sở hữu uidnếu bị bỏ qua
  • m, maskmặt nạ quyền hiệu quả
  • o, otherquyền của người khác

    permslà sự kết hợp của các chữ cái rwxX, tương ứng với các quyền:

  • r đọc

  • w viết
  • x thi hành
  • X chỉ thực hiện nếu tệp là một thư mục hoặc đã có quyền thực thi đối với một số người dùng

    Ngoài ra, permscó thể là một chữ số bát phân ( 0- 7) cho biết bộ quyền.


setcap: thay đổi khả năng tập tin

Sử dụng:

    setcap <capability-clause> file 

A capability-clausebao gồm một danh sách các tên khả năng được phân tách bằng dấu phẩy, theo sau là danh sách các cặp cờ toán tử.

Các toán tử có sẵn là =, +-. Các cờ có sẵn là e, iptương ứng với các bộ khả năng hiệu quả , có thể thừa kế và được phép .

Các =nhà khai thác sẽ nâng cao khả năng tập hợp cụ thể và thiết lập lại những người khác. Nếu không có cờ nào được đưa ra cùng với =toán tử, tất cả các bộ khả năng sẽ được đặt lại. Các toán tử +-sẽ tăng hoặc giảm một hoặc nhiều bộ khả năng được chỉ định tương ứng.


chcon: thay đổi tập tin bối cảnh bảo mật SELinux

Sử dụng:

    chcon [-u <user>] [-r <role>] [-t <type>] files...

người dùngngười dùng SELinux, chẳng hạn như user_u, system_uhoặc root.

vai tròvai trò TỰ TIN (luôn luôn object_rcho các tệp)

loại là loại chủ đề SELinux


chsmack: thay đổi thuộc tính mở rộng SMACK

Sử dụng:

    chsmack -a <value> file

valuelà nhãn SMACK được đặt cho SMACK64thuộc tính tệp mở rộng


setrichacl : thay đổi danh sách kiểm soát truy cập phong phú.

richacl s là một tính năng sẽ thêm các ACL tiên tiến hơn.

Hiện tại công việc đang được tiến hành, vì vậy tôi không thể nói cho bạn biết nhiều về họ. Tôi đã không sử dụng chúng.

Xem thêm câu hỏi này Có ACL hệ thống tập tin nâng cao hơn ngoài 'rwx' và POSIX ACL truyền thống không? trang nam


5
+1 Nếu bạn đã thêm các ví dụ về cách sử dụng của mỗi cmd, câu trả lời này sẽ cực kỳ hữu ích, như một câu trả lời chính tắc, chúng ta có thể tham khảo trên đường!
slm

1
@slm Cảm ơn bạn đã gợi ý. Tôi đã thêm một lời giải thích sử dụng ngắn gọn cho mỗi lệnh.
Thomas Nyman

Một cảnh báo cho bất kỳ ai muốn có khả năng hơn nữa được hiển thị ở đây. Tôi đã sử dụng khả năng như được phác thảo ở đây. Tuy nhiên, cố gắng kế thừa chúng (một cách hữu ích) qua ngã ba và thực thi dường như là không thể. Tôi nghĩ rằng có một lỗi, hãy xem unix.stackexchange.com/questions/196483/NH
ctrl-alt-delor

Lỗi tôi đã đề cập trong lần trước, đó là lỗi thiết kế và đã được sửa trong kernel 4.3 với việc bổ sung các khả năng xung quanh, xem man7.org/linux/man-pages/man7/capabilities.7.html
ctrl-alt-delor

1
Tôi muốn thấy các ví dụ về tất cả điều này sẽ trở thành một câu trả lời kinh điển!
statquant

1

từ cấp độ cao:

  • các quyền hệ thống tệp cơ bản được hỗ trợ bởi tất cả linuxtất cả các hệ thống tệp được -rwxrwxrwxxử lý bởi chmod, cùng với các định danh chủ sở hữu và nhóm được gắn với mọi tệp hoặc thư mục trên hệ thống tệp được xử lý bởi chownchgrp; tất cả mọi người về cơ bản biết phần này.
  • Thuộc tính tệp mở rộng được viết tắt hoặc được biết bởi xattr . Chúng là các tính năng hệ thống tệp cho phép người dùng liên kết các tệp máy tính với siêu dữ liệu không được hệ thống tệp giải thích, trong khi các thuộc tính thông thường có mục đích được xác định nghiêm ngặt bởi hệ thống tệp; các thuộc tính là các cặp tên: giá trị được liên kết vĩnh viễn với các tệp và thư mục, tương tự như các chuỗi môi trường được liên kết với một quy trình. Có các lệnh linux cụ thể liên quan đến việc chỉ cần đặt siêu dữ liệu này vào các tệp / thư mục khác nhau.
  • SELINUX được gọi là linux an toàn . Bạn có thể tìm kiếm trên web lịch sử trên đó. Cũng biết rằng có những lựa chọn thay thế cho SELINUX như AppArmor, và có thể có những cái khác. Tại thời điểm này, đây là các mô-đun hạt nhân cung cấp chức năng và cơ chế để thực hiện MAC (kiểm soát truy cập bắt buộc) bằng cách sử dụng xattr; selinux lưu trữ nhãn bảo mật tệp trong xattrs . Và có các lệnh liên quan đến selinux cụ thể.

những điểm chính khác:

  • thời đại và phiên bản của gnu / linux liên quan đến xattr và selinux cho những gì có sẵn và những gì có chức năng.
  • Nó được báo cáo không phải tất cả các hệ thống tập tin hỗ trợ xattr; tốt nhất để nghiên cứu cá nhân dựa trên phân phối và phiên bản linux đang được sử dụng (rrc / suse / debian, irix, solaris, aix, unix từ những năm 1960)
  • nó thực sự chỉ là các quyền tệp / thư mục cơ bản vốn có với uid's / gid cộng với xattr giúp mọi thứ đều có thể; SELinux sử dụng xattr để lưu trữ nhãn bảo mật tệp / thư mục ... với selinux, tất cả các công việc ở mức độ thấp được thực hiện / xác định trong xattr để bạn sử dụng. Vì vậy, nếu hệ thống tệp cổ của bạn không hỗ trợ xattr, bạn sẽ không sử dụng selinux.
  • bạn có thể bật hoặc tắt selinux (hoặc apparmor hoặc bất kỳ mô-đun hạt nhân nào khác)
  • tùy thuộc vào phiên bản linux của bạn, có thể bật hoặc tắt xattr cho một hệ thống tệp được gắn kết nhất định; Tôi nhớ trong SLES 11 tùy chọn gắn kết fstab user_xattrvà tôi có thể chọn không có sẵn xattr trên hệ thống tệp gốc khi cài đặt; Tôi nghĩ bây giờ với RHEL / CentOS 7 rằng xattr ở đó theo mặc định và bạn không thể có nó.
  • khi làm một lsnếu bạn thấy -rwxrwxrwx+rằng +chỉ một thuộc tính tập tin mở rộng hiện diện trên mà đối tượng .
  • Danh sách điều khiển truy cập (ACL): là danh sách các quyền được đính kèm với một đối tượng. ACL chỉ định người dùng hoặc quy trình hệ thống nào được cấp quyền truy cập vào các đối tượng, cũng như những hoạt động nào được phép trên các đối tượng nhất định.
  • từ centos wiki selinux: selinux là một cơ chế bảo mật MAC được triển khai trong kernel; không có SELinux chỉ kích hoạt các phương thức kiểm soát truy cập tùy ý (DAC) truyền thống như quyền truy cập tệp hoặc danh sách kiểm soát truy cập (ACL) được sử dụng để kiểm soát quyền truy cập tệp của người dùng; Người dùng và các chương trình đều được phép cấp quyền tệp không an toàn cho người khác hoặc ngược lại, để có quyền truy cập vào các phần của hệ thống mà không cần thiết cho hoạt động bình thường; Về cơ bản theo mô hình DAC truyền thống, có hai cấp đặc quyền, gốc và người dùng và không có cách nào dễ dàng để thực thi một mô hình đặc quyền tối thiểu. Nhiều quy trình được khởi chạy bởi root sau đó bỏ quyền của họ để chạy như một người dùng bị hạn chế
  • đáng để đọc để sử dụng xattr's và ACL trong phối cảnh, bởi vì linux [kernel] coi mọi thứ là một tệp (chặn thiết bị hoặc cổng mạng), bạn có thể gắn thẻ hầu hết mọi thứ với xattr và thực thi một số loại điều khiển truy cập thông qua selinux, đó là không chỉ tập tin / thư mục. https://wiki.centos.org/HowTos/SELinux
  • xattr có thể gây ra vấn đề với việc di chuyển dữ liệu giữa các hệ thống và hệ thống tệp và NFS, trong đó một hệ thống [mới hơn] có sự hỗ trợ đầy đủ hơn của xattr so với các hệ thống cũ có thể không nhận ra tất cả các thuộc tính mở rộng này [nếu có]. Hãy chú ý sử dụng tartrên các công cụ với xattr, nếu nó vẫn ở trên hệ thống đó thì không vấn đề gì nhưng nếu nó đi nơi khác có thể có vấn đề nếu xattr là quan trọng (ví dụ: samba và sao chép giữa win10 ntfs và linux ext3 / 4, btrfs, xfs; hoặc quay lại và giữa các thiết bị lưu trữ gắn liền với mạng)
  • nếu không có selinux hoặc cơ chế khác thực thi ACL theo những gì được định nghĩa trong xattrs, thì xattrvề mặt lý thuyết có thể không có nghĩa gì và bị bỏ hoặc tước vì tại thời điểm đó, nó chỉ là hành lý bổ sung.
  • hãy cẩn thận vô hiệu hóa selinux ngay bây giờ trong rrc / centos 7 vì nếu lab lab của hệ thống qua xattr bị mất, nó sẽ gây ra vấn đề khi thay đổi selinux trở lại bắt buộc hoặc cho phép ; một lần nữa, nó phụ thuộc vào phiên bản linux của bạn và cách sử dụng xattr thông qua selinux.

Chia sẻ Samba cơ bản không hoạt động trong RHEL / CentOS 7 ... vì mặc định selinux được đặt thành bắt buộc; selinux từ chối tất cả mọi thứ cho đến khi bạn cho phép nó vô hiệu hóa selinux (xấu) hoặc đặt thành cho phép. Nếu bạn để selinux là bắt buộc, thì bạn phải gắn nhãn thư mục bạn muốn samba chia sẻ với một thuộc tính mở rộng, vì vậy selinux sẽ nhận ra và cho phép chia sẻ. Vì vậy, nếu bạn để selinux thi hành thì với tất cả các lệnh selinux (sau đó sẽ đặt xattrs cần thiết ):

# from centos 7.6 /etc/samba/smb.conf.example

# Turn the samba_domain_controller Boolean on to allow a Samba PDC to use the useradd and groupadd family of binaries.
# Run the following command as the root user to turn this Boolean on:

# this is an selinux command, not 
setsebool -P samba_domain_controller on

# If you create a new directory, such as a new top-level directory, label it with      samba_share_t
# so that SELinux allows Samba to read and write to it.
# Do not label system directories, such as /etc/ and /home/ with samba_share_t, as such directories should already have an SELinux label.


# the xattr having the name "samba_share_t" is labelled onto "/mydatashare"
# this xattr of syntax "samba_share_t" is recognized by an existing rule in selinux
# if the folder does not have the xattr "samba_share_t" then the  rule in selinux (when enforced) will prevent access via samba to the folder.

chcon -t samba_share_t /mydatashare

bạn tiếp tục sử dụng selinux, trên hệ thống linux có chia sẻ samba này, để thực thi các hạn chế đối với các tệp / thư mục theo chia sẻ samba này (sử dụng bất kỳ thuộc tính mở rộng nào). Vì các tệp / thư mục này được chia sẻ, người dùng sao chép hợp pháp một số vào máy tính win10 của họ sau đó sao chép lại, mất thuộc tính mở rộng. Bây giờ sau bản sao qua lại đó, trên hệ thống linux đó, selinux sẽ hạn chế quyền truy cập vào các tệp đã nói vì xattr cần thiết không còn nữa và người dùng / quản trị viên đập vào đó tự hỏi tại sao mọi thứ chỉ hoạt động bây giờ nó không ... đặt selinux để cho phép và nhận ra vấn đề mất xattrs hiển thị trong nhật ký kiểm toán nhưng nó sẽ không trực tiếp chỉ ra rằng đó là kết quả của bản sao qua lại bị mất xattr. Cũng xem xét sao lưu và phục hồi dữ liệu, và công việc tiềm năng cần nhớxattrNgoài uid / gid nếu bạn muốn thực thi bảo mật dựa trên xattrs chính xác .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.