Запустить команду sudoed после завершения скрипта?

Я кодирую сценарий bash, который:

  • запускает некоторую команду sudoed при инициализации
  • освобождает корневые разрешения для целей безопасности ( sudo -K )
  • запускает непривилегированную программу
  • но требует корневых разрешений при завершении

Я ищу простой и безопасный способ избежать повторного запроса пароля пользователя при завершении скрипта .

Я думаю о вилке перед sudo -K ожидая сигнала термина. Я не знаю, является ли это самым элегантным / безопасным решением.

Вот код:

 sudo unshare -m \ sudo -u "$USER" -g `id -g -n "$USER"` \ bash -c \ "sudo mount --bind \"$MOUNT_DIR\" \"$MOUNT_DIR\"; \ sudo mount --make-private \"$MOUNT_DIR\"; \ sudo -K; \ <unprivilegied program here>; \ sudo umount \"$MOUNT_DIR\"" 

NB: для информации это создает частное монтирование в пространстве имен, к которому будет иметь доступ только программа. unshare -r не является вариантом для запуска программы.

  • Как предполагается использовать sudo?
  • Судо не работает в chroot
  • Отправить команду с паролем в сценарии upstart
  • Почему рискованно предоставлять sudo vim доступ к обычным пользователям?
  • Подскажите пароль на sudo?
  • pam_unix (sudo: auth): auth не смог идентифицировать пароль для
  • «Sudo su» делает меня пользователем root?
  • Переместить переменную среды в Sudo AWS ec2 sudo node
  • One Solution collect form web for “Запустить команду sudoed после завершения скрипта?”

    Я замечаю, что вы много переходите между обычным пользователем и root:

    • переключиться на root для запуска unshare
    • вернитесь к обычным пользователям, чтобы запустить bash (хотя кажется, что вы не используете никаких базизмов, чтобы вы могли также запустить sh который был бы более портативным и, возможно, более легким)
    • вернитесь к корню несколько раз внутри этой оболочки bash чтобы делать более привилегированные вещи

    Я думаю, вы можете упростить это и сократить количество раз, чтобы требовать отскока назад и вперед между пользователями и решить вашу проблему одновременно.

     sudo unshare -m sh -c ' mount --bind "$1" "$1"; mount --make-private "$1"; exec sudo -u "#$SUDO_UID" -g "#$SUDO_GID" sh -c " sudo -K; <unprivilegied program here> " ' - "$MOUNT_DIR" 

    Технически существует корневая оболочка, которая постоянно работает во время выполнения непривилегированной части, но единственное, что собирается сделать оболочка, – это ждать завершения непривилегированной части и ничего другого. Но если вы действительно хотите заранее отказаться от своих привилегий sudo и не попросить пользователя предоставить их снова, все альтернативы также будут включать в себя затяжной процесс, ожидающий, что сигнал будет запускать команду umount каким-то образом ,

    В стороне, хорошо, что ваша команда полностью автономна и все, и я сохранил этот дух в своем предложении, но, честно говоря, большие блоки кода, предоставленные в качестве опции командной строки для sh -c , трудно писать, читать и поддерживать из-за всех проблем, связанных с кавычками, о которых вы должны беспокоиться, и я бы рекомендовал разложить их на свой собственный сценарий и выполнить все это как:

     sudo unshare -m /usr/local/bin/script-that-does-the-rest-of-the-work 

    Кроме того, это упростит для написания ваших правил sudo для разрешенных команд, которые трудно написать, используя мое предложение, если вы не позволяете пользователю запускать какую-либо команду вообще, что равнозначно предоставлению им полного доступа к корне. В этом случае вам нужно будет разрешить команду unshare -m sh -c <huge block> "$MOUNT_DIR" которая является довольно сложной Cmnd_Alias для записи.

    Interesting Posts

    Как использовать ssh-agent для предоставления ключей, специфичных для хоста, из файла ~ / .ssh / config и управления паролями?

    Сохранение вывода процесса в файл в файле systemd

    Доступ к свойствам отображения Kali Linux из командной строки

    Что такое текстовая команда для именования окна в gnu-screen?

    Как извлечь версию linux из резервной копии .img?

    Способ проверки подключения к другому серверу

    Postfix Mail Ограничение пользователя – указанный пользователь почты только на centos 6.5

    Могу ли я автоматизировать сбор share cifs без сохранения моего пароля в открытом виде?

    Можно ли сделать sed делать некоторую логику в замещающей части (группа регулярных выражений)

    Объедините второй раздел с корнем

    Ограничить исходящую пропускную способность на определенном интерфейсе

    получить команду командной строки командной строки, чтобы сообщить, какие изменения сделаны

    Плагин munin phpfpm

    Владельцы файлов svn и webserver

    Математическое соединение между SZ RSS и VSZ в ps o / p?

    Linux и Unix - лучшая ОС в мире.