Я експериментую з можливостями на Debian Gnu / Linux.
Я скопіював / bin / ping у свій поточний робочий каталог. Як і очікувалося, це не працює, спочатку він був встановлений корінь.
Тоді я надаю своєму ping мінімальні можливості (не root), виконуючи свої дії sudo /sbin/setcap cap_net_raw=ep ./ping
, і пінг працює, як очікувалося.
Потім sudo /sbin/setcap -r ./ping
відкликати цю можливість. Зараз він не працює, як очікувалося.
Зараз я намагаюся працювати з Ping за допомогою capsh
.
capsh
не має привілеїв, тому мені потрібно запустити його як root, але потім скинути root і, таким чином, всі інші привілеї.
Я думаю, що мені теж потрібно secure-keep-caps
, це не зафіксовано в документі capsh
, але є в посібнику з можливостей. Я отримав бітові числа /usr/include/linux/securebits.h
. Вони здаються правильними, оскільки висновок --print
показує, що ці біти є правильними.
Я годинами лунаю, поки що це маю.
sudo /sbin/capsh --keep=1 --secbits=0x10 --caps="cap_net_raw+epi" == --secbits=0x10 --user=${USER} --print -- -c "./ping localhost"
Однак з ping
помилками ping: icmp open socket: Operation not permitted
, це те, що відбувається, коли він не має можливості. Також --print
шоу Current: =p cap_net_raw+i
, цього нам недостатньо e
.
sudo /sbin/capsh --caps="cap_net_raw+epi" --print -- -c "./ping localhost"
встановить можливість Current: = cap_net_raw+eip
цього правильно, але залишає нас як root
.
Правка-1
Я зараз спробував sudo /sbin/capsh --keep=1 --secbits=0x11 --caps=cap_net_raw+epi --print -- -c "touch zz; ./ping -c1 localhost;"
Це дає:
touch: cannot touch `zz': Permission denied
ping: icmp open socket: Operation not permitted
Перша помилка очікується, оскільки secure-noroot: yes
друга - ніCurrent: = cap_net_raw+eip
Правка-2
Якщо я поставив це ==
перед --print
, він тепер показує Current: = cap_net_raw+i
, що пояснює попередню помилку, але не чому ми втрачаємо можливості при вимиканні кореня, я хоч і secure-keep-caps
повинен це виправити.
Правка-3
З того, що я бачу, я втрачаю Ефективний (e) та Дозволений (p), коли викликається exec. Це очікується, але я подумав, що захисні козирки повинні зупинити їх втрату. Я чогось сумую?
Правка-4
Я проводив більше досліджень і знову читав посібник. Здається, що нормально e
і p
можливості втрачаються, коли: ви переходите від користувача root
(або застосовуєте secure-noroot
, тим самим роблячи root звичайним користувачем), це може бути переосмислено secure-keep-caps
; коли ви телефонуєте exec
, наскільки я можу сказати, це інваріант.
Наскільки я можу сказати, це працює відповідно до посібника. Наскільки я можу сказати, немає нічого корисного зробити capsh
. Наскільки я можу сказати, щоб використовувати можливості, необхідні для: використання можливостей файлів або наявної програми, яка не використовує exec
. Тому немає пільгової обгортки.
Тож тепер моє запитання - що я пропускаю, для чого capsh
.
Правка-5
Я додав відповідь щодо можливостей навколишнього середовища. Можливо, capsh
також можна використовувати з успадкованими можливостями, але для їх корисності потрібно було б встановити виконуваний файл. Я не бачу, як шаш може зробити все корисне без можливостей навколишнього середовища або дозволити успадковані можливості.
Версії:
capsh
відlibcap2-bin
версії пакета1:2.22-1.2
- Перед редагування-3 я захопив останній
capsh
зgit://git.debian.org/collab-maint/libcap2.git
і почав використовувати його. uname -a
Linux richard-laptop 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
Земля користувача 32-біт.
capsh
, за відсутності навколишнього середовища (як це було спочатку). Що мені не вистачає. Він повинен мати користь.
capsh
від спів-садівникам репо не дав би вам «останнє»capsh
, пакет Debian ще не підтримує можливості навколишнього середовища. Вгору за течією 2,27.