Принятие Вы уже проверили на ошибки/обновления для всего серийного программного обеспечения, что работаете...
Если Вы уже не сделали так, настраиваете свой сервер, чтобы сохранить базовые файлы и получить отслеживание стека от катастрофического отказа с помощью gdb, например, 'gdb/usr/sbin/httpd ядро' затем входят купленный при подсказке.
Вероятно, очень определенный запрос, который вызывает ошибку - IIRC, и доступ и журнал ошибок, записан после того, как обработка завершается - IIRC mod_security, может зарегистрировать запросы, когда они прибывают (включая сообщение Вар) - включающий это была бы хорошая идея, пока Вы не знаете то, что вызывает катастрофический отказ.
Я бы лично изменил вашу стратегию и запустил скрипт от имени непривилегированного пользователя, используя sudo для выполнения команд, требующих привилегий root. Есть ли какая-то конкретная причина, по которой вам нужно запускать сценарий от имени пользователя root?
Однако, чтобы ответить на ваш вопрос, вы можете использовать флаг -c для запуска определенной команды от имени пользователя:
su someuser -c "touch /tmp/file"
Ссылка: http: / /linux.die.net/man/1/su
Традиционное решение такой проблемы - наличие постоянной учетной записи пользователя с точно такими же уровнями доступа и разрешениями, которые требуются данной программе. Сетевые службы (например, apache) часто запускаются от имени собственного пользователя, с привилегиями, отличными от привилегий обычного интерактивного пользователя и значительно меньшими, чем у root.
Если root запускает сценарий, им не нужно предоставлять пароль для su другому пользователю, даже если у этого пользователя есть пароль.
Я не хочу полагаться на гипотезу о том, что на машине существует конкретное имя пользователя.
Суперпользователь дает преимущества ...: -)
scriptuser_created=no
scriptuser=myuser
if ! id "$scriptuser" &>/dev/null
adduser --system "$scriptuser"
scriptuser_created=yes
fi
sudo -u "$scriptuser" command1
sudo -u "$scriptuser" command2
sudo -u "$scriptuser" command3
if [ yes = "$scriptuser_created" ]; then
userdel "$scriptuser"
fi
Вставьте это в начало сценария оболочки.
# please run as foo user
if [[ $EUID -ne 1234 ]]; then
echo "This script must be run as foo"
exit 1
fi
Вы можете установить для оболочки nologin.
Добавьте sudo привилегии для пользователя foo, чтобы он мог выполнять оставшиеся операции, требующие root, только через тщательно созданную конфигурацию sudoer.
Su обозначает замещающего пользователя. Вы можете использовать su для перехода к другому пользователю. Поэтому, если вы суперпользователь и хотите запустить что-то от имени другого пользователя, просто введите имя пользователя и выполните команду.
#! /bin/bash
# (GPL3+) Alberto Salvia Novella (es20490446e)
execute () {
function="${1}"
command="${2}"
error=$(eval "${command}" 2>&1 >"/dev/null")
if [ ${?} -ne 0 ]; then
echo "${function}: $error"
exit 1
fi
}
executeAsNonAdmin () {
function="${1}"
command="${2}"
eval setPasswordAsker="SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass"
run="runuser ${SUDO_USER} --session-command=\"${setPasswordAsker}\" --command=\"${command}\""
execute "${function}" "${run}"
}
executeAsNonAdmin "" "${@}"