Без пароля в сценарии Bash?

Вы можете использовать for, rename и sed в каталоге, где находятся файлы:

for i in O*.TXT; do rename -n "s/.*\.TXT/$(sed -nr 's/.*( |^)ProcID:([0-9]+)( |$).*/\2/p' "$i").TXT/" "$i"; done

Удалить -n после rename после тестирования, чтобы фактически переименовать файлы

Объяснение

for i in O*TXT; do что-то делает со всеми соответствующими файлами rename -n, просто сообщите, что будет с новыми именами, на самом деле не переименуйте их (удалите -n после ) "s/old/new/" замените old на new (используйте двойные вместо одинарных кавычек, чтобы мы могли передавать переменные с расширением $). $(command) command substitution - передать вывод command на что-то еще .*\.TXT любые символы, за которыми следуют литералы ., а затем TXT sed вызывают наш друг sed, чтобы прочитать файл и извлечь из него вещи -n, ничего не печатайте, пока мы не попросим его -r использовать ERE нам не нужно избегать пробела () или + ( |^) или начала строки ProcID:([0-9]+) как минимум на одну цифру после ProcID ... сохранить номер для последующего пробела ( |$) или конца строки \2 обратная ссылка на шаблон, сохраненный ранее с помощью () p, распечатать результат после редактирования
1
задан 20 June 2012 в 05:38

14 ответов

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

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

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

0
ответ дан 25 July 2018 в 18:24

Ваши текущие изменения в /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 Enterprise Server и единственное релевантное различие заключается в том, что вход root отключен на Ubuntu).

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

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

sudo -i

(Это симулирует исходную оболочку входа root. Обычно для оболочки 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 Enterprise Server, вход в систему как 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
ответ дан 25 July 2018 в 18:24

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

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

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

0
ответ дан 2 August 2018 в 00:36

Ваши текущие изменения в /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 Enterprise Server и единственное релевантное различие заключается в том, что вход root отключен на Ubuntu).

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

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

sudo -i

(Это симулирует исходную оболочку входа root. Обычно для оболочки 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 Enterprise Server, вход в систему как 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
ответ дан 2 August 2018 в 00:36

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

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

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

0
ответ дан 4 August 2018 в 16:06

Ваши текущие изменения в /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 Enterprise Server и единственное релевантное различие заключается в том, что вход root отключен на Ubuntu).

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

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

sudo -i

(Это симулирует исходную оболочку входа root. Обычно для оболочки 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 Enterprise Server, вход в систему как 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
ответ дан 4 August 2018 в 16:06

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

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

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

0
ответ дан 6 August 2018 в 00:44

Ваши текущие изменения в /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 Enterprise Server и единственное релевантное различие заключается в том, что вход root отключен на Ubuntu).

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

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

sudo -i

(Это симулирует исходную оболочку входа root. Обычно для оболочки 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 Enterprise Server, вход в систему как 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
ответ дан 6 August 2018 в 00:44

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

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

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

0
ответ дан 7 August 2018 в 18:09

Ваши текущие изменения в /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 Enterprise Server и единственное релевантное различие заключается в том, что вход root отключен на Ubuntu).

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

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

sudo -i

(Это симулирует исходную оболочку входа root. Обычно для оболочки 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 Enterprise Server, вход в систему как 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
ответ дан 7 August 2018 в 18:09

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

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

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

0
ответ дан 10 August 2018 в 06:56

Ваши текущие изменения в /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 Enterprise Server и единственное релевантное различие заключается в том, что вход root отключен на Ubuntu).

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

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

sudo -i

(Это симулирует исходную оболочку входа root. Обычно для оболочки 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 Enterprise Server, вход в систему как 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
ответ дан 10 August 2018 в 06:56

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

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

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

0
ответ дан 15 August 2018 в 18:53
  • 1
    Эта строка находится в rc.local и работает как root, поэтому нет необходимости (и не делает ничего иначе), чтобы поставить sudo перед ней. Для тестирования команды это имеет смысл, хотя это не идеально, потому что он проверяет команду с текущей пользовательской средой не root. (Подробнее см. В моем ответе .) Вы совершенно правы, что текущая конфигурация sudoers, похоже, позволяет каждому пользователю стать root, и что это плохо. По крайней мере, reporter, по-видимому, не является администратором, и намеренно так. – Eliah Kagan 20 June 2012 в 05:45
  • 2
    Все пользователи в системе - администраторы на самом деле lol. Дело в том, что мы гораздо меньше обеспокоены безопасностью из-за того, что это предпроизводственный кластер. Я перечитаю и задумаюсь над своим первым ответом завтра утром! знак равно – Sniperm4n 20 June 2012 в 05:50

Ваши текущие изменения в /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 Enterprise Server и единственное релевантное различие заключается в том, что вход root отключен на Ubuntu).

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

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

sudo -i

(Это симулирует исходную оболочку входа root. Обычно для оболочки 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 Enterprise Server, вход в систему как 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
ответ дан 15 August 2018 в 18:53
  • 1
    Похоже, файл sudoers, который я создал, работает так, как было упомянуто в моей исходной статье UbuntuForums.org. Следующий код успешно изменяет пользователей без подсказки пароля: [CODE] sudo su reporter [/ CODE] Мне интересно, возможно ли мне просто напечатать «su reporter»? избегая при этом пароля? – Sniperm4n 20 June 2012 в 05:45
  • 2
    – Sniperm4n 20 June 2012 в 05:46
  • 3
    @ Sniperm4n Линия reporter в sudoers не является причиной ее работы и должна быть удалена. Предположительно reporter является намеренно ограниченным пользователем root, который запускает ваш веб-сервер с умышленно уменьшенными разрешениями. Предполагая, что это так, reporter должен определенно не сможет запустить /bin/su как root (как вы в настоящее время настроили в sudoers). Кроме того, любой администратор вашей системы уже может использовать sudo для запуска этой или любой другой команды как root; вероятно, нет веских оснований для ваших записей user1, user2 и user3. – Eliah Kagan 20 June 2012 в 05:47
  • 4
    Спасибо всем за ваши подробные ответы! К сожалению, проект был прекращен (с финишной чертой в поле зрения), и я не могу проверить это дальше. Yay для корпоративных B.S.! знак равно – Sniperm4n 5 July 2012 в 21:58

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

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