Я экспериментирую с возможностями Debian Gnu / Linux.
Я скопировал / bin / ping в мой текущий рабочий каталог. Как и следовало ожидать, это не работает, это был изначально setuid root.
Затем я даю ping минимальные возможности (не root) sudo /sbin/setcap cap_net_raw=ep ./ping
, и мой ping работает, как и ожидалось.
Затем sudo /sbin/setcap -r ./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
.
Edit-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
Edit-2
Если я поставлю ==
перед --print
, это теперь показывает Current: = cap_net_raw+i
, так что объясняет предыдущую ошибку, но не то, почему мы теряем возможность при переключении из root, хотя я secure-keep-caps
должен это исправить.
Edit-3
Из того, что я вижу, я теряю Effective (e) и Permitted (p), когда вызывается exec. Это ожидается, но я подумал, что безопасные защитные колпачки должны остановить их потерю. Я что-то пропустил.
Edit-4
Я проводил дополнительные исследования и снова перечитывал руководство. Кажется, что обычно e
и p
возможности теряются, когда: вы переключаетесь с пользователя root
(или применяете его secure-noroot
, тем самым делая root обычным пользователем), это можно переопределить secure-keep-caps
; когда вы звоните exec
, насколько я могу судить, это инвариант.
Насколько я могу судить, он работает в соответствии с руководством. Насколько я могу судить, нет ничего полезного capsh
. Насколько я могу судить, чтобы использовать возможности, вам нужно: использовать файловые возможности или иметь программу, осведомленную о возможностях, которая не используется exec
. Поэтому нет привилегированной обертки.
Итак, теперь мой вопрос: что мне не хватает, для чего capsh
.
Edit-5
Я добавил ответ о возможностях. Может capsh
быть, также может использоваться с унаследованными возможностями, но для того, чтобы быть полезными, их необходимо установить в исполняемом файле. Я не вижу, как 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
Пользовательская земля 32bit.
capsh
, в отсутствие ambient (как это было изначально). Чего мне не хватает Это должно иметь применение.
capsh
из репозитория Collab-Maint не дал бы вам «последнее»capsh
, пакет Debian по-прежнему не поддерживает внешние возможности. Upstream 2.27 делает.