su без пароля в скрипте

Я уверен, что на этот вопрос уже был дан ответ, но я не могу найти ответ, который мне нравится. Я хотел бы написать сценарий оболочки, который выполняет очень специфический сценарий от имени другого пользователя (я хочу, чтобы любой мог запускать postgres от имени пользователя postgres). Сценарий будет иметь права доступа 710, поэтому он будет выполняться определенной группой, но не будет доступен для чтения или записи этой группой.

Теперь я почти уверен, что нет способа использовать «su» без интерактивного запроса пароля. Для этого есть много веских причин, и меня не нужно убеждать в достоинствах этих причин (мне сказали, что кто-то более сообразительный, чем я, может получить пароль из списка процессов, что плохо).

Вопрос в том, как бы я мог выполнить то, что хочу, не злоупотребляя парадигмами безопасности Unix? Есть ли способ разрешить пользователю выполнять очень специфический процесс от имени другого пользователя?


person prauchfuss    schedule 06.05.2012    source источник


Ответы (3)


Именно для такой ситуации и был разработан sudo.

person Community    schedule 06.05.2012

Вы можете создать исполняемый файл (не сценарий оболочки), который запускает сценарий, который должен выполняться от имени пользователя postgres. Измените владельца исполняемого файла на пользователя postgres и установите бит setuid.

См. Рекомендации по запуску службы Linux от имени другого пользователя чтобы решить проблему Селады.

person Adam Liss    schedule 06.05.2012
comment
Разве это не ограничивается изменением только эффективного uid, а не реального uid? Postgres может заботиться об этой разнице. - person Celada; 06.05.2012
comment
В этом случае я думаю, что sudo - правильный ответ. Демоны для запуска и управления postgres уже существуют, мне просто нужно вызвать их из правильной учетной записи пользователя. Тем не менее, связанная ветка - отличное обсуждение. Спасибо! - person prauchfuss; 07.05.2012

Что ж, вы можете использовать простой скрипт для программного доступа к пользователю с помощью sudo, а затем выполнить весь код, который вам нужен.

Вот простой скрипт:

if [ "$#" -ne 2 ]; then
    echo "Usage: "
    echo "  suprompt <user> <password>"
else
    echo $2 | sudo -sS su $1 
    sudo su $1
fi

Этот скрипт использует два аргумента. Первый — это пользователь, которым вы хотите быть, а второй — пароль.

Он работает автоматически.

Вы можете изменить окончательный оператор и сделать: sudo su $1 -c <command>

Я надеюсь, что это сработает для вас.

person pgon    schedule 06.04.2020
comment
Я уверен, что ОП искал ответ, не используя su и не требуя пароля. - person Arjan; 06.04.2020
comment
Да, но он знает, что должен использовать su для доступа к другим пользователям. - person pgon; 07.04.2020