Подтвердить что ты не робот

Как запустить команду в качестве другого пользователя из корневого корня?

Кажется, я застрял между ограничением NFS и ограничением Cron.

Итак, у меня есть root cron (на RHEL5), на котором запущена оболочка script, которая, помимо прочего, нуждается в rsync для некоторых файлов поверх монтирования NFS. И файлы на монте NFS принадлежат пользователю apache с режимом 700, поэтому только пользователь apache может запускать команду rsync - запуск с правами root приводит к ошибке разрешения (NFS - это редкий случай, по-видимому, где пользователь root не всемогущий?)

Когда я просто хочу запустить rsync вручную, я могу использовать "sudo -u apache rsync..." Но sudo no workie в cron - он говорит "sudo: извините, вы должны иметь tty для запуска sudo".

Я не хочу запускать весь script как apache (т.е. из apache crontab), потому что другие части script требуют root - это просто одна команда, которая должна запускаться как apache. И я бы предпочел не менять режим в файлах, так как это потребует значительных изменений в других приложениях.

Должен быть способ выполнить "sudo -u apache" из cron??

спасибо! грабят

4b9b3361

Ответ 1

su --shell =/bin/ bash --session-command = "/path/to/command -argument = something" имя пользователя &

Работает для меня (CentOS)

Ответ 2

Используйте su вместо sudo:

su -c "rsync ..." apache

Ответ 3

По умолчанию для RHEL sudo не разрешено для процессов без терминала (tty). Это установлено в /etc/sudoers.

Вы можете разрешить tty-less sudo для конкретных пользователей с этими инструкциями:

https://serverfault.com/questions/111064/sudoers-how-to-disable-requiretty-per-user

Ответ 4

поместите его в /etc/crontab и укажите apache вместо root в поле пользователя

Ответ 5

Если вы хотите навсегда разрешить вам сражаться как apache:

chsh apache

это позволяет вам изменять оболочку для пользователя