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.
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.
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.
Để cài đặt trên CentOS, hãy sử dụng lệnh sau:
Để cài đặt trên Fedora, hãy sử dụng lệnh sau:
Để cài đặt trên Arch, hãy sử dụng lệnh sau:
Ví dụ:
Getcap cũng có thể tìm kiếm đệ quy với cờ -r. Ví dụ:
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:
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:
Để xóa các khả năng khỏi một tệp, hãy sử dụng cờ -r:
Sau đây là một số ví dụ bổ sung:
Để cài đặt trên CentOS:
Để cài đặt trên Fedora:
Để cài đặt trên Arch:
Để tìm kiếm một thư mục theo cách đệ quy, hãy sử dụng:
Để 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:
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:
Để thiết lập khả năng trên một tệp, hãy sử dụng cú pháp:
Ví dụ:
Để xóa khả năng, hãy sử dụng cú pháp này:
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:
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.
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
Mã:
yum install libcap
Mã:
dnf install libcap
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

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

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
Mã:
setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep file1
Mã:
setcap -r filename

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
Mã:
yum install libcap-ng-utils
Mã:
dnf install libcap-ng-utils
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.
Mã:
filecap /full/path/to/file
Mã:
filecap /full/path/to/dir
Mã:
filecap /filecap -a

Để 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
Mã:
filecap /usr/bin/tac dac_override
Mã:
filecap /full/path/to/file none
