Passwordless su в сценарии Bash?

Я столкнулся с дилеммой при миграции установки Hadoop от Oracle Enterprise Linux к Ubuntu. Предшествующий разработчик поместил следующую команду в rc.local в OEL:

su reporter -c "cd /path/to/directorywithscript && bash runwebserver.sh >> /dev/null 2>&1&"

Мне нужен вышеупомянутый веб-сервер для автоматического запуска (и остановка) в Ubuntu как указанное reporter пользователь. (Материал автоматизации намного менее важен, чем то, чтобы заставлять этот сценарий правильно работать как reporter пользователь, но "хорош иметь" функцию.)

Этот процесс должен запуститься в последний раз, поскольку я все еще должен настроить несколько других Hadoop-связанных сценариев для автоматического запуска перед этим (веб-сервер находится в файловой системе Hadoop, которая не становится смонтированной, пока Вы не находитесь в ОС). Каждый раз я выхожу su команда меня просят относительно пароля. Это происходит, независимо от которого пользователь в настоящее время "активен" и не был проблемой в OEL, так как Пользователь root на самом деле используется. Вот моя текущая попытка/etc/sudoers файла, но она все еще не работает (я не уверен, корректны ли изменения, которые я внес внизу):

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults        env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification

# Allow members of group sudo to execute any command after they have
# provided their password
# (Note that later entries override this, so you might need to move
# it further down)
%sudo ALL=(ALL) ALL
#
#includedir /etc/sudoers.d

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# User privilege specification
root    ALL=(ALL) ALL
user3 ALL=(ALL)NOPASSWD:/bin/su
user2 ALL=(ALL)NOPASSWD:/bin/su
user1 ALL=(ALL)NOPASSWD:/bin/su
reporter ALL=(ALL)NOPASSWD:/bin/su

Это - дубликат потока, который я отправил по UbuntuForums.org (http://ubuntuforums.org/showthread.php?p=12040341#post12040341), но я становлюсь отчаянно нуждающимся в ответе =P. Обратите внимание на то, что мое знание Linux все еще слабо (я не знал почти Linux, прежде чем этот проект был отброшен в моей полировке). Любая справка значительно ценится, поскольку это в настоящее время - главный камень преткновения!

Спасибо, - Бекас

1
задан 20 June 2012 в 04:38

2 ответа

Если вы не хотите, чтобы у вас запрашивали пароль, вы должны будете использовать su для выполнения от имени root, поэтому вам придется использовать:

sudo su reporter -c "cd /path/to/directorywithscript && bash runwebserver.sh >> /dev/null 2>&1&"

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

0
ответ дан 20 June 2012 в 04:38

Ваши текущие редактирования к /etc/sudoers эффективно позвольте user1, user2, user3, и reporter выполните любое действие как root (так как выполнение su позволяет Вам стать root) ! Вы почти наверняка не хотите это. И это не помогает Вашей текущей проблеме вообще, потому что Вы не хотите, чтобы те пользователи выполнили что-то с альтернативными идентификационными данными, Вы хотите root выполнять что-то с альтернативными идентификационными данными. Перед продолжением я рекомендую избавиться от тех строк от /etc/sudoers (отредактируйте его с visudo конечно), если Вы не абсолютно уверены, что это - то, что Вы хотите.

Если Вы не -root пользователь и Вы выполняете это, Вас будут всегда просить относительно пароля:

su reporter -c "cd /path/to/directorywithscript && bash runwebserver.sh >> /dev/null 2>&1&"

Но когда root выполнения, что, это должно просто успешно выполниться (предположение, что это работало, прежде на Oracle Сервер для предприятия и единственное соответствующее различие - это root вход в систему отключен на Ubuntu).

Когда Вы вставляете ту строку rc.local, в любом GNU/дистрибутиве Linux, включая Ubuntu, это выполняется как root. Это должно просто работать. При выполнении его от командной строки это не будет работать. Но в rc.local, это должно просто работать.

Если Вы хотите протестировать его от командной строки, дайте себе a root оболочка вида, довольно подобного rc.localсреда:

sudo -i

(Это моделирует начальную букву root оболочка входа в систему. Обычно, для a root оболочка, использовать sudo -s. И конечно, для выполнения команды ... с sudo, просто используйте sudo ....)

su -c и sudo возьмите другой синтаксис, поэтому если Вы действительно хотели сделать то использование команды sudo вместо su, необходимо было бы внести дополнительные изменения. Самый легкий путь, вероятно:

sudo -u reporter bash -c "cd /path/to/directorywithscript && ./runwebserver.sh >> /dev/null 2>&1&"

Однако я подчеркиваю, что Вы не должны преобразовывать su команды к sudo чтобы они работали правильно из rc.local.

В Ubuntu, в отличие от Oracle Сервер для предприятия, входя в систему как root отключен по умолчанию (и Вы почти наверняка не должны включать его). Но su все еще работы, когда выполнено root. su также работы для не -root пользователь, изменяющий идентификационные данные на другого не -root пользователь.

Если у Вас есть эта строка в rc.local и это не работает, причиной не являются проблемы sudo по сравнению с. su. В этом случае что-то еще идет не так, как надо. Чтобы мы диагностировали его, необходимо было бы обеспечить содержание runwebserver.sh.

Наконец, обратите внимание на то, что bash runwebserver.sh >> /dev/null 2>&1& довольно неэлегантно. Более просто понять (и, а тем более значительно, более хорошие взгляды) для использования bash runwebserver.sh &>> /dev/null. Вы сказали, что это приходит последним в rc.local, таким образом, Вы не должны использовать & к фону это.

Однако необходимо рассмотреть, хотите ли Вы действительно подавить стандартную погрешность, а также стандартный вывод (как Вы в настоящее время делаете). По-видимому, если что-то записано в стандартную погрешность затем, это или важно или может быть подавлено путем изменения настроек многословия веб-сервера.

2
ответ дан 20 June 2012 в 04:38

Другие вопросы по тегам:

Похожие вопросы: