Cách quản lý khả năng tập tin Linux

theanh

Administrator
Nhân viên
Theo truyền thống, một tiến trình Linux có thể được cấp đặc quyền (chạy dưới dạng root) hoặc không được cấp đặc quyền. Các tiến trình được cấp đặc quyền không phải chịu sự kiểm tra quyền của hạt nhân và do đó có toàn quyền đối với hệ thống. Một khả năng là một đặc quyền riêng biệt và độc lập có thể được một tiến trình sử dụng để bỏ qua một số kiểm tra quyền nhất định. Các khả năng lần đầu tiên được giới thiệu trong Linux 2.2 và một số khả năng khác đã được thêm vào trong các phiên bản sau. Chúng thường được thiết lập trên các tệp thực thi và được tự động cấp cho tiến trình khi một tệp có khả năng được thực thi. Khả năng về cơ bản chia quyền của người dùng gốc thành các đặc quyền riêng biệt, giúp cải thiện bảo mật bằng cách hạn chế quyền truy cập mà kẻ tấn công có thể đạt được bằng cách khai thác hoặc lạm dụng dịch vụ.

Hướng dẫn này sẽ giới thiệu một số khả năng thường dùng và trình bày cách xem và sửa đổi chúng.

Khả năng chung​

Nhân Linux triển khai nhiều khả năng. Một số khả năng trong số đó là:
  • CAP_SYS_ADMIN: Cho phép nhiều loại hoạt động. Khả năng này nên tránh để ủng hộ các khả năng cụ thể hơn.
  • CAP_CHOWN: Thực hiện thay đổi cho ID người dùng và ID nhóm của tệp
  • CAP_DAC_READ_SEARCH: Bỏ qua các lần kiểm tra đọc tệp và đọc/thực thi thư mục. Một chương trình có khả năng này có thể được sử dụng để đọc bất kỳ tệp nào trên hệ thống.
  • CAP_DAC_OVERRIDE: Ghi đè DAC (Kiểm soát truy cập tùy ý) tức là bỏ qua các lần kiểm tra quyền đọc/ghi/thực thi. Khả năng này cấp cho một tệp thực thi khả năng truy cập và sửa đổi bất kỳ tệp nào trên hệ thống tệp.
  • CAP_NET_BIND_SERVICE: Cho phép liên kết với số cổng thấp hơn 1024.
  • CAP_KILL: Bỏ qua các kiểm tra quyền để gửi tín hiệu đến các quy trình như SIGHUP và SIGKILL.
  • CAP_SYS_NICE: Sửa đổi giá trị niceness và ưu tiên lập lịch của các quy trình trong số những thứ khác.
  • CAP_SYS_RESOURCE: Cho phép ghi đè nhiều giới hạn khác nhau đối với tài nguyên hệ thống, chẳng hạn như hạn ngạch đĩa, giới hạn thời gian CPU, v.v.
Danh sách đầy đủ có sẵn trong trang hướng dẫn khả năng(7).

Các tệp có thể được chỉ định khả năng trong 3 tập hợp khác nhau: được phép, có thể kế thừa và có hiệu lực. Luồng có 2 tập bổ sung: ambient và bounding. Mỗi tập có thể chứa không hoặc nhiều khả năng, ngoại trừ tập effective cho tệp, thực tế là một bit duy nhất. Các tập này định nghĩa các hành vi phức tạp của hạt nhân nằm ngoài phạm vi của hướng dẫn này. Khi gán khả năng cho tệp, trong hầu hết các trường hợp, chúng ta sẽ sử dụng các tập permitted và effective.

LƯU Ý: SELinux có thể can thiệp vào các khả năng. Trên các hệ thống có SELinux ở chế độ thực thi, nó có thể ngăn các quy trình tận dụng các khả năng của chúng.

Công cụ bắt buộc​

Có hai gói khác nhau để quản lý khả năng: libcap và libcap-ng. Gói sau được thiết kế để dễ sử dụng hơn gói trước. Cả hai đều được đề cập trong hướng dẫn này.

libcap cung cấp getcap và setcap để xem và thiết lập khả năng của tệp, trong khi libcap-ng hợp nhất cả hai chức năng trong một công cụ, filecap.

libcap​

Cài đặt​

Trên Debian, Ubuntu và các bản phân phối dựa trên Debian khác, các tiện ích libcap có thể được cài đặt bằng:
Mã:
apt updateapt install libcap2-bin
Để cài đặt trên CentOS, hãy sử dụng lệnh sau:
Mã:
yum install libcap
Để cài đặt trên Fedora, hãy sử dụng lệnh sau:
Mã:
dnf install libcap
Để cài đặt trên Arch, hãy sử dụng lệnh sau:
Mã:
pacman -Sy libcap

Cách sử dụng​

getcap chỉ hiển thị các khả năng được gán cho một tệp, nếu có. Sử dụng cú pháp sau:
Mã:
getcap /path/to/binary
Ví dụ:


Bo27ewU.png





Getcap cũng có thể tìm kiếm đệ quy với cờ -r. Ví dụ:


Ra1S53k.png



LƯU Ý: 2>/dev/null được sử dụng để tránh làm lộn xộn đầu ra với lỗi "Hoạt động không được hỗ trợ", xảy ra khi getcap cố gắng lấy khả năng của các tệp trong /sys, /proc, v.v. Các hệ thống tệp ảo đặc biệt này không hỗ trợ khả năng.

Để đặt khả năng của tệp bằng setcap, hãy sử dụng cú pháp sau:
Mã:
setcap CAP+set filename
Ví dụ: để thêm CAP_CHOWN và CAP_DAC_OVERRIDE vào các tập hợp được phép và có hiệu lực, hãy sử dụng:
Mã:
setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep file1
Để xóa các khả năng khỏi một tệp, hãy sử dụng cờ -r:
Mã:
setcap -r filename
Sau đây là một số ví dụ bổ sung:


ElBEr6Z.png


libcap-ng​

Cài đặt​

Để cài đặt trên Debian, Ubuntu và các bản phân phối dựa trên Debian khác:
Mã:
apt updateapt install libcap-ng-utils
Để cài đặt trên CentOS:
Mã:
yum install libcap-ng-utils
Để cài đặt trên Fedora:
Mã:
dnf install libcap-ng-utils
Để cài đặt trên Arch:
Mã:
pacman -Sy libcap-ng

Cách sử dụng​

  • Chương trình filecap tham chiếu đến các khả năng không có tiền tố "CAP_" (ví dụ: NET_ADMIN thay vì CAP_NET_ADMIN).
  • filecap không hoạt động với đường dẫn tương đối, nó mong đợi đường dẫn đầy đủ khi truyền tệp hoặc thư mục làm đối số.
  • filecap không cho phép bạn chỉ định các tập khả năng, nó luôn sử dụng permitted và effective khi thiết lập các khả năng.
Để xem các khả năng được gán cho một tệp:
Mã:
filecap /full/path/to/file
Để tìm kiếm một thư mục theo cách đệ quy, hãy sử dụng:
Mã:
filecap /full/path/to/dir
Để tìm kiếm toàn bộ hệ thống tệp bằng filecap, hãy sử dụng một của các lệnh sau:
Mã:
filecap /filecap -a
Sau đây là một số ví dụ về việc sử dụng filecap để kiểm tra các tệp và thư mục:


ewmX5kR.png



Để thiết lập khả năng trên một tệp, hãy sử dụng cú pháp:
Mã:
filecap /full/path/to/file cap_name
Ví dụ:
Mã:
filecap /usr/bin/tac dac_override
Để xóa khả năng, hãy sử dụng cú pháp này:
Mã:
filecap /full/path/to/file none
Sau đây là một số ví dụ về việc thiết lập và xóa khả năng bằng cách sử dụng filecap:


TFHWYyDl.png


Kết luận​

Khả năng là một tính năng mạnh mẽ của hạt nhân với các ứng dụng bảo mật rộng rãi. Chúng nên được thay thế cho các đặc quyền đầy đủ và SUID gốc bất cứ khi nào có thể.
 
Back
Bên trên