2009-08-25 3 views
21

Кажется, я застрял между ограничением NFS и ограничением Cron.Как запустить команду как другой пользователь из корневого cronjob?

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

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

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

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

спасибо! отнимают

+1

Возможно, лучше всего переместить это на SuperUser.com. – Robert

+0

Это старый вопрос, но все же нашел его довольно высоким в поисковых рядах, и ни один из ответов не объясняет, почему права root не применяются к монтированию NFS. Для кого-то другого, спотыкающегося об этом, причина в root_squash. В этом блоге есть довольно приличное объяснение, почему этот параметр необходим и обычно устанавливается по умолчанию. http://fullyautolinux.blogspot.com/2015/11/nfs-norootsquash-and-suid-basic-nfs.html – BryKKan

ответ

7

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

su -c "rsync ..." apache 
+1

Да! Но нет. У пользователя apache нет обычной оболочки входа, поэтому синтаксис su -c возвращает только «Эта учетная запись в настоящее время недоступна». И изменение пароля passwd пользователя apache для этой цели кажется плохой идеей. Хм, я думаю, этот вопрос должен быть озаглавлен «Как запустить команду в качестве пользователя apache из корневого cronjob?» И, может быть, это невозможно сделать без введения дыр в безопасности? – rob

+5

Помогает ли вам явно указать оболочку, которая будет использоваться с помощью переключателя '-s' (например,' -s/bin/sh')?По крайней мере, на Ubuntu это, похоже, помогает, если у соответствующего пользователя нет допустимой оболочки в файле/etc/passwd. –

+0

@JukkaMatilainen - Да, это сработало для меня и в ubuntu. – runamok

1

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

+0

Не работает на моем Debian 6. –

17

су --shell =/bin/Баш - -session-команда = "/ путь/к/команде -argument = что-то" имя пользователя &

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

+0

Мне пришлось добавить 'export TERM = xterm;' перед моей командой внутри переменной '--session-command'. Таким образом, я закончил с 'su --shell =/bin/bash --session-command =" export TERM = xterm;/path/to/command -argument = something "имя пользователя и' –

+0

Не работает на Ubuntu (12.04)), поскольку команда 'su' не поддерживает параметр' --session-command'. – Lambart

+0

, чтобы прояснить ответ в crontab root, добавьте 'su -shell =/bin/bash -session-command ="/path/to/command -argument = something "имя пользователя" – NoelProf

1

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

chsh apache 

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

Смежные вопросы