Saya bereksperimen dengan kemampuan, di Debian Gnu / Linux.
Saya telah menyalin / bin / ping ke direktori kerja saya saat ini. Seperti yang diharapkan itu tidak berhasil, ini awalnya setuid root.
Saya kemudian memberikan ping saya kemampuan minimal (bukan root) dengan melakukan sudo /sbin/setcap cap_net_raw=ep ./ping
, dan ping saya berfungsi, seperti yang diharapkan.
Kemudian sudo /sbin/setcap -r ./ping
untuk mencabut kemampuan itu. Sekarang tidak berfungsi seperti yang diharapkan.
Saya sekarang mencoba membuat ping berfungsi menggunakan capsh
.
capsh
tidak memiliki hak istimewa, jadi saya perlu menjalankannya sebagai root, tetapi kemudian drop root dan dengan demikian semua hak istimewa lainnya.
Saya pikir saya juga perlu secure-keep-caps
, ini tidak didokumentasikan capsh
, tetapi dalam manual kemampuan. Saya mendapat nomor bit dari /usr/include/linux/securebits.h
. Mereka tampak benar, karena output dari --print
bit-bit ini benar.
Saya telah bermain-main selama berjam-jam, sejauh ini saya punya ini.
sudo /sbin/capsh --keep=1 --secbits=0x10 --caps="cap_net_raw+epi" == --secbits=0x10 --user=${USER} --print -- -c "./ping localhost"
Namun ping
kesalahan dengan ping: icmp open socket: Operation not permitted
, inilah yang terjadi ketika tidak memiliki kemampuan. Juga --print
pertunjukkan Current: =p cap_net_raw+i
, ini tidak cukup yang kita butuhkan e
.
sudo /sbin/capsh --caps="cap_net_raw+epi" --print -- -c "./ping localhost"
akan mengatur kemampuan untuk Current: = cap_net_raw+eip
ini benar, tetapi membiarkan kita root
.
Edit-1
Saya sekarang sudah mencoba sudo /sbin/capsh --keep=1 --secbits=0x11 --caps=cap_net_raw+epi --print -- -c "touch zz; ./ping -c1 localhost;"
Ini menghasilkan:
touch: cannot touch `zz': Permission denied
ping: icmp open socket: Operation not permitted
Kesalahan pertama diharapkan sebagai secure-noroot: yes
Tapi yang kedua tidakCurrent: = cap_net_raw+eip
Edit-2
Jika saya meletakkan ==
sebelum --print
, itu sekarang menunjukkan Current: = cap_net_raw+i
, sehingga menjelaskan kesalahan sebelumnya, tetapi tidak mengapa kita kehilangan kemampuan ketika beralih dari root, saya pikir itu secure-keep-caps
harus memperbaikinya.
Edit-3
Dari apa yang saya lihat, saya kehilangan Efektif (e), dan Diizinkan (p), ketika exec dipanggil. Ini diharapkan, tetapi saya berpikir bahwa tutup pengaman harus dihentikan agar tidak hilang. Apakah saya melewatkan sesuatu.
Edit-4
Saya telah melakukan lebih banyak penelitian, dan membaca manual lagi. Sepertinya itu normale
dan p
kemampuan hilang ketika: Anda beralih dari pengguna root
(atau menerapkan secure-noroot
, sehingga menjadikan root sebagai pengguna normal), ini dapat diganti dengan secure-keep-caps
; ketika Anda menelepon exec
, sejauh yang saya tahu ini adalah invarian.
Sejauh yang saya tahu, itu bekerja sesuai dengan manual. Sejauh yang saya tahu tidak ada cara untuk melakukan sesuatu yang bermanfaat capsh
. Sejauh yang saya tahu, untuk menggunakan kapabilitas yang Anda butuhkan: menggunakan kapabilitas file atau memiliki program yang sadar kapabilitas, yang tidak digunakan exec
. Karenanya tidak ada pembungkus istimewa.
Jadi sekarang pertanyaan saya adalah apa yang saya lewatkan, untuk apa capsh
.
Edit-5
Saya telah menambahkan jawaban tentang kemampuan sekitar. Mungkincapsh
juga dapat digunakan dengan kemampuan yang diwarisi, tetapi untuk menjadi berguna ini perlu diatur pada file yang dapat dieksekusi. Saya tidak dapat melihat bagaimana capsh dapat melakukan apa pun yang berguna tanpa kemampuan sekitar, atau untuk memungkinkan kemampuan bawaan.
Versi:
capsh
dari paketlibcap2-bin
versi1:2.22-1.2
- sebelum edit-3 saya mengambil yang terbaru
capsh
darigit://git.debian.org/collab-maint/libcap2.git
dan mulai menggunakannya. uname -a
Linux richard-laptop 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
User-land adalah 32bit.
capsh
, dengan tidak adanya ambient (seperti aslinya). Apa yang saya lewatkan. Itu harus digunakan.
capsh
dari repo collab-Maint tidak akan memberi Anda "terbaru"capsh
, paket Debian masih tidak mendukung kemampuan ambient. Hulu 2.27 tidak.