Есть скрипт, который изначально выполняется от рута (кроном). В этом скрипте я хочу запустить другой скрипт, который должен выполняться от обычного юзера. Раньше я юзал su и не заморачивался, но сегодня я случайно прочитал man su и теперь не уверен, что правильно использовать: su, runuser или setpriv.
man su: su is mostly designed for unprivileged users, the recommended solution for privileged users (e.g. scripts executed by root) is to use non-set-user-ID command runuser(1) that does not require authentication and provide separate PAM configuration. If the PAM session is not required at all then the recommend solution is to use command setpriv(1).
Я не понимаю, нужна ли мне PAM-сессия, поэтому не понимаю, что выбрать. Помимо прочего я хочу, чтобы $PATH был юзерский, а не рутовый. Например
su --shell=/usr/bin/bash --login lego /home/lego/bin/lego-renew.sh
отрабатывает нормально.
Если я пишу
runuser --user lego /home/lego/bin/lego-renew.sh
скрипт не работает, т.к. $PATH похоже не инициализируется как положено.
runuser --login --shell /usr/bin/bash lego /home/lego/bin/lego-renew.sh
вроде как работает нормально, но я всё равно не понимаю, какую команду лучше использовать.
Как setpriv использовать я вообще не понял.
setpriv --reuid lego /usr/bin/bash --login -c /home/lego/bin/lego-renew.sh
не сработало, $PATH не инициализировался как положено, а ещё скрипт запустился с рутовой группой, в общем какая-то опасная команда.
В общем вопрос - как правильно это всё сделать, чтобы не допустить какой-нибудь уязвимости.