2

У меня есть скрипт bash, работающий от имени user , учетная запись пользователя без оцененных привилегий. У машины есть второй admin учетной записи, который имеет привилегии sudo. Не установлен пароль root.

Скрипт знает пароль учетной записи для admin . Как мне перевести скрипт в root?

sudo -S обрабатывает только случай эскалации, используя пароль вашей текущей учетной записи, например, admin к root , но user непривилегирован, так что это не будет работать.

su admin работает, но не дает возможности получить пароль от STDIN.

Перефразируя, как я могу достичь ниже программного обеспечения?

$ su admin
Password: ******
$ sudo command
Password: ******

2 ответа2

1

Так как su читает только из TTY, вам придется дать ему один. Если экран GNU доступен, попробуйте что-то вроде этого:

screen -d -m -S foo su -c 'sudo my_command' admin
screen -S foo -X stuff 'admin_password
'

Строка 1 устанавливает сеанс, который запускает указанную команду su , которая запрашивает пароль пользователя с правами admin . Строки 2 и 3 "заполняют" пароль (и завершающий символ новой строки, имитирующий нажатие клавиши ввода, следите за кавычками) в именованном сеансе; ожидающий su получит его от pty и, если он верен, выполнит указанную команду (sudo my_command).

(Я уверен, что нечто подобное можно сделать с помощью tmux, но я этим не пользуюсь, поэтому могу указывать только на справочную страницу. В качестве альтернативы, вы можете использовать возможность изучить программирование на pty и написать свою собственную программу, чтобы просто передать пароль к su :)

-1

Хотя это не совсем то, что вам нужно, одним из способов является предоставление пользователю ограниченных разрешений sudo.

Добавьте user в /etc/sudoers только с правами на запуск sudo от имени пользователя admin и на запуск команды sudo . Пример:

user   ALL = (admin) /bin/sudo

Затем запустите что-то вроде sudo -u admin sudo commands .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .