Tôi đang thử nghiệm các khả năng, trên Debian Gnu / Linux.
Tôi đã sao chép / bin / ping vào thư mục làm việc hiện tại của tôi. Như mong đợi, nó không hoạt động, ban đầu nó được cài đặt gốc.
Sau đó, tôi cung cấp cho ping của mình các khả năng tối thiểu (không phải root) bằng cách thực hiện sudo /sbin/setcap cap_net_raw=ep ./ping
và ping của tôi hoạt động, như mong đợi.
Sau đó sudo /sbin/setcap -r ./ping
để thu hồi khả năng đó. Bây giờ nó không hoạt động như mong đợi.
Bây giờ tôi cố gắng để ping làm việc bằng cách sử dụng capsh
.
capsh
không có đặc quyền, vì vậy tôi cần chạy nó dưới quyền root, nhưng sau đó thả root và do đó tất cả các đặc quyền khác.
Tôi nghĩ rằng tôi cũng cần secure-keep-caps
, điều này không được ghi lại trong tài liệu capsh
hướng dẫn. Tôi đã nhận được số bit từ /usr/include/linux/securebits.h
. Chúng có vẻ đúng, vì đầu ra của --print
các bit này là chính xác.
Tôi đã nghịch ngợm trong nhiều giờ, cho đến nay tôi có điều này.
sudo /sbin/capsh --keep=1 --secbits=0x10 --caps="cap_net_raw+epi" == --secbits=0x10 --user=${USER} --print -- -c "./ping localhost"
Tuy nhiên, ping
lỗi với ping: icmp open socket: Operation not permitted
, đây là những gì xảy ra khi nó không có khả năng. Ngoài ra các --print
chương trình Current: =p cap_net_raw+i
, điều này là không đủ chúng ta cần e
.
sudo /sbin/capsh --caps="cap_net_raw+epi" --print -- -c "./ping localhost"
sẽ thiết lập khả năng Current: = cap_net_raw+eip
này là chính xác, nhưng để lại cho chúng tôi root
.
Chỉnh sửa-1
Bây giờ tôi đã thử sudo /sbin/capsh --keep=1 --secbits=0x11 --caps=cap_net_raw+epi --print -- -c "touch zz; ./ping -c1 localhost;"
Điều này tạo ra:
touch: cannot touch `zz': Permission denied
ping: icmp open socket: Operation not permitted
Lỗi đầu tiên được dự kiến là secure-noroot: yes
Nhưng thứ hai thì khôngCurrent: = cap_net_raw+eip
Chỉnh sửa-2
Nếu tôi đặt ==
trước --print
, bây giờ nó sẽ hiển thị Current: = cap_net_raw+i
, để giải thích lỗi trước đó, nhưng không hiểu tại sao chúng tôi mất khả năng khi chuyển khỏi root, tôi mặc dù điều đó secure-keep-caps
sẽ khắc phục điều đó.
Chỉnh sửa-3
Từ những gì tôi có thể thấy, tôi mất hiệu quả (e) và Được phép (p), khi exec được gọi. Điều này được mong đợi, nhưng tôi nghĩ rằng việc giữ an toàn, sẽ ngăn chặn chúng bị mất. Tui bỏ lỡ điều gì vậy.
Chỉnh sửa-4
Tôi đã làm nhiều nghiên cứu hơn, và đọc lại hướng dẫn. Dường như bình thường e
và các p
khả năng bị mất khi: bạn chuyển từ người dùng root
(hoặc áp dụng secure-noroot
, do đó làm cho root trở thành người dùng bình thường), điều này có thể bị ghi đè secure-keep-caps
; Khi bạn gọi exec
, theo như tôi có thể nói đây là một bất biến.
Theo như tôi có thể nói, nó đang hoạt động theo hướng dẫn. Theo như tôi có thể nói không có cách nào để làm bất cứ điều gì hữu ích với capsh
. Theo như tôi có thể nói, để sử dụng các khả năng bạn cần: sử dụng khả năng của tệp hoặc có chương trình nhận biết khả năng, điều đó không sử dụng exec
. Do đó không có đặc quyền bao bọc.
Vì vậy, bây giờ câu hỏi của tôi là tôi đang thiếu gì, để làm gì capsh
.
Chỉnh sửa-5
Tôi đã thêm một câu trả lời khả năng xung quanh. Có capsh
thể cũng có thể được sử dụng với các khả năng được kế thừa, nhưng để hữu ích, những thứ này cần phải được đặt trên tệp thực thi. Tôi không thể thấy làm thế nào capsh có thể làm bất cứ điều gì hữu ích mà không có khả năng xung quanh hoặc để cho phép các khả năng được kế thừa.
Phiên bản:
capsh
từlibcap2-bin
phiên bản gói1:2.22-1.2
- trước khi chỉnh sửa-3 Tôi đã lấy bản mới nhất
capsh
từgit://git.debian.org/collab-maint/libcap2.git
và bắt đầu sử dụng nó. uname -a
Linux richard-laptop 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
Đất người dùng là 32 bit.
capsh
, trong trường hợp không có môi trường xung quanh (như ban đầu). Tôi đang thiếu gì Nó phải có công dụng.
capsh
từ repo collab-notify sẽ không cung cấp cho bạn phiên bản mới nhấtcapsh
, gói Debian vẫn không hỗ trợ các khả năng xung quanh. Thượng nguồn 2,27 nào.