Назад | Перейти на главную страницу

Запустить сценарий оболочки от имени другого пользователя

Какой хороший способ запустить сценарий оболочки от имени другого пользователя. Я использую Debian etch и знаю, за какого пользователя хочу выдать себя.

Если бы я делал это вручную, я бы сделал:

su postgres
./backup_db.sh /tmp/test
exit

Поскольку я хочу автоматизировать процесс, мне нужен способ запустить backup_db.sh как postgres (наследование среды и т. Д.)

Спасибо!

Чтобы запустить ваш сценарий от имени другого пользователя как одну команду, выполните:

/bin/su -c "/path/to/backup_db.sh /tmp/test" - postgres

Breaking it down:
 /bin/su : switch user
 -c "/path/to..." : command to run
 - : option to su, make it a login session (source profile for the user)
 postgres : user to become

Я рекомендую всегда использовать полные пути в таких сценариях - вы не всегда можете гарантировать, что окажетесь в нужном каталоге при выполнении su (возможно, кто-то изменил домашний адрес, кто знает). Я также всегда использую полный путь к su (/ bin / su), потому что я параноик. Возможно, кто-то может отредактировать ваш путь и заставить вас использовать скомпрометированную версию su.

Если у целевого пользователя для запуска определена оболочка nologin, вы можете использовать параметр -s, чтобы указать оболочку:

/bin/su -s /bin/bash -c '/path/to/your/script' testuser

См. Следующий вопрос: запустить скрипт от имени пользователя, у которого есть оболочка nologin

Чтобы автоматизировать это по расписанию, вы можете поместить его в crontab пользователя. Тем не менее, задания Cron не получат полную среду, но в любом случае было бы лучше поместить все необходимые переменные env в сам скрипт.

Чтобы отредактировать crontab пользователя:

sudo crontab -u postgres -e

Это должно быть информативное чтение - setuid в сценариях оболочки

Если ты бежишь вс с "- username"последовательность аргументов, он создаст оболочку входа в систему для пользователя, чтобы предоставить ту же среду, что и пользователь. Обычно используется для быстрого выполнения вашего скрипта в домашней среде из другого входа в систему.

Попробуйте su man-страницу:

su -c script_run_as_postgres.sh - postgres

Предупреждаем, вы можете использовать sudo, чтобы позволить вам запускать только эту команду как postgres без пароля. Однако это требует некоторой настройки в вашем / etc / sudoers.

Метод "su -c ...", опубликованный другими, является хорошим. Для автоматизации вы можете добавить скрипт в crontab пользователя, от имени которого вы хотите его выполнить.

Если у пользователя уже есть запись в sudo, и вы не знаете пароль суперпользователя, вы можете попробовать следующее: Это перезапускает postgres, инициализированный в /data/my-db/pgsql/9.6/data

sudo su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl -D /data/my-db/pgsql/9.6/data -l /var/log/pgsql.log restart"

Вы также можете использовать:

sudo -u postgres script_run_as_postgres.sh