Какой хороший способ запуска сценария оболочки от имени другого пользователя. Я использую Debian etch, и я знаю, какого пользователя я хочу выдать.
Если бы я делал это вручную, я бы сделал:
su postgres
./backup_db.sh /tmp/test
exit
Поскольку я хочу автоматизировать процесс, мне нужен способ запуска backup_db.sh от имени postgres (наследование среды и т. Д.)
Благодарность!
-
(или--login
) вместе с--command, -c
фактически не запускает сеанс входа в систему, потому что-c
всегда вызывает оболочку без входа в систему.- postgress
в конце команды должен отображаться символ. Со страницыWhen - is used, it must be specified before any username. For portability it is recommended to use it as last option, before any username. The other forms (-l and --login) do not have this restriction.
Если для запуска целевого пользователя определена оболочка nologin, вы можете использовать опцию -s, чтобы указать оболочку:
Смотрите следующий вопрос: запустите скрипт как пользователь, у которого есть nologin shell
источник
Чтобы автоматизировать это по расписанию, вы можете поместить его в crontab пользователя. Задания Cron не получат полную среду, но в любом случае лучше будет поместить все необходимые переменные env в сам скрипт.
Чтобы изменить crontab пользователя:
источник
Это должно быть информативное чтение - setuid для сценариев оболочки
Если вы запустите su с
- username
последовательностью аргументов " ", он создаст оболочку входа в систему для пользователя, которая предоставит ту же среду, что и пользователь. Обычно используется для быстрого выполнения сценария в домашней среде с другого имени входа.источник
Попробуйте страницу man su:
su -c script_run_as_postgres.sh - postgres
К счастью, вы можете использовать sudo, чтобы позволить вам запускать только этот комманд как postgres без пароля. Это требует некоторой настройки в вашем / etc / sudoers.
источник
Хороший метод su -c ..., опубликованный другими. Для автоматизации вы можете добавить скрипт в crontab пользователя, для которого вы хотите его выполнить.
источник
Если у пользователя уже есть запись в sudo, и вы не знаете пароль суперпользователя, то вы можете попробовать выполнить следующее: Этот перезапускает postgres, инициализированный в /data/my-db/pgsql/9.6/data
источник
Вы также можете использовать:
источник