Параметр «--up» в OpenVPN обычно используется для маршрутизации и т. Д. И поэтому он обрабатывается до того, как OpenVPN отбрасывает привилегии root для запуска как никто. Тем не менее, я вызываю сценарии оболочки, которые должны запускаться как непривилегированный пользователь.
Как мне это сделать? Я изучил привилегии Drop Process , особенно ответы полинома и Тайлера, но я не понимаю, как это реализовать. Я работаю в Centos 6.5, и suid заблокирован как chmod u + s, так и setuid ().
Существует плагин OpenVPN ("openvpn-down-root.so"), который позволяет сценариям, вызываемым опцией "--down", запускаться от имени пользователя root. Может быть эквивалент, такой как "openvpn-up-user.so", но я не нашел его.
Edit0
Согласно ответу Николы Котура, я установил run-rpm Яна Мейера . Хотя команда chpst работает в терминале, в сценарии up она завершается с ошибкой «команда не найдена». Что работает, так это «sudo chpst» плюс установка правильного отображения и языка. Посмотрите, почему мой терминал не выводит символы Юникода должным образом? Учитывая это, сценарию up нужны эти четыре строки:
LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo chpst -u user -U user /home/user/unprivileged.sh &
Edit1
Согласно комментарию 0xC0000022L, я обнаружил, что «sudo -u user» работает так же, как «sudo chpst -u user -U user»:
LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo -u user /home/user/unprivileged.sh &
Я буду изучать человека sudoers и сообщу, если / когда я получу sudo на работу один.
источник
Ответы:
Я использую runit «s
chpst
инструмент для таких задач , как это. Например, из сценария up вызовите свой непривилегированный сценарий:источник
Покрытие только рунит и судо очень скучает. На самом деле существует целое семейство наборов инструментов, таких как runit, и широкий выбор инструментов для выполнения именно этого, той самой задачи, для которой они были разработаны:
setuidgid
:setuidgid
:setuidgid
:chpst
:runuid
:s6-setuidgid
:setuidgid
:Они не смешиваются в другой задаче добавления привилегий и никогда не переходят в интерактивный режим.
Ваши зацикленные проблемы - это нечто большее, чем то, что вы забыли иметь,
sbin
как иbin
вашиPATH
, кстати.дальнейшее чтение
источник
скрипт, который отбрасывает привилегии и запускает другой скрипт (но здесь я только что сделал это для запуска сам):
Пример:
источник
/etc/sudoers
позволяет очень точно указать, какие переменные среды могут быть переданы в программуsudo
и т. д.man sudoers
, Честно говоря, тот, кто используетsudo
просто дляsudo su -
или для переключения пользовательского контекста, не имеет ни малейшего представления о том, что стоит за этой удивительной программой и насколько вы можете заблокировать вещи для отдельных программ, пользователей, хостов и т. Д.$0
; вызывающая сторона может установить сценарий$0
буквально на все, что он хочет. И используйте больше цитат.$0
является/directory/name with spaces/script
(и помните, что пользователи могут создавать произвольные символические ссылки в тех местах , которыми они владеют, даже если они не используют ,exec -a somename yourscript
чтобы позвонитьyourscript
с$0
изsomename
), то вы получитеsudo -u nobody /directory/name with spaces
, сwith
иspaces
передаются как отдельные аргументы в вашу команду ,Как насчет:
Вы жаловались на среду в предыдущем комментарии, поэтому вы также можете сравнить различия между результатами:
источник
В Linux вы можете использовать
runuser
или,setpriv
если сеанс PAM не требуется (оба изutil-linux
):Со
su
страницы руководства :источник