Как сделать это su + sudo одной командой?

Вы можете добавить свой скрипт в/etc/sudoers(желательно с помощью `visudo ), чтобы он был доступен пользователю.

user ALL= /path/to/script

Тогда пользователь сможет выполнить path/to/scriptбез sudo.

2
25.04.2020, 21:59
2 ответа

С этим expectскриптом:

#!/usr/bin/expect 

log_user 0
spawn /bin/su - dad
expect "*: "
stty -echo
send_user "Password: "
expect_user -re "(.*)\n"
send_user "\n"
stty echo
send "$expect_out(1,string)\r"
send "sudo iptables -D OUTPUT -m owner --uid-owner son -j REJECT; echo done\r"
expect "*: "
send "$expect_out(1,string)\r"
expect "done\n"

Подробнее см. man 1 expect. Строки между stty -echoи stty echoотвечают за чтение пароля. Можно включить пароль в сам сценарий, но вы, вероятно, этого не хотите. Пароль читается один раз и предоставляется дважды (send "$expect_out(1,string)\r").

Сценарий тупой, и ему все равно, работает ли предоставленный пароль. При необходимости улучшите.

2
19.03.2021, 02:25

Благодаря комментарию @roaima я только что создал пароль для root (, отключенный по умолчанию в Ubuntu ):sudo passwd root, а затем я мог просто использовать этот простой метод:

su -c "iptables -D OUTPUT -m owner --uid-owner son -j REJECT"
<enter password only once>
4
19.03.2021, 02:25

Теги

Похожие вопросы