Противоположность su: выполните команду без полномочий пользователя root

Принятие Вы уже проверили на ошибки/обновления для всего серийного программного обеспечения, что работаете...

Если Вы уже не сделали так, настраиваете свой сервер, чтобы сохранить базовые файлы и получить отслеживание стека от катастрофического отказа с помощью gdb, например, 'gdb/usr/sbin/httpd ядро' затем входят купленный при подсказке.

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

5
задан 15 May 2013 в 01:40
6 ответов

Я бы лично изменил вашу стратегию и запустил скрипт от имени непривилегированного пользователя, используя sudo для выполнения команд, требующих привилегий root. Есть ли какая-то конкретная причина, по которой вам нужно запускать сценарий от имени пользователя root?

Однако, чтобы ответить на ваш вопрос, вы можете использовать флаг -c для запуска определенной команды от имени пользователя:

su someuser -c "touch /tmp/file"

Ссылка: http: / /linux.die.net/man/1/su

10
ответ дан 3 December 2019 в 01:07

Традиционное решение такой проблемы - наличие постоянной учетной записи пользователя с точно такими же уровнями доступа и разрешениями, которые требуются данной программе. Сетевые службы (например, apache) часто запускаются от имени собственного пользователя, с привилегиями, отличными от привилегий обычного интерактивного пользователя и значительно меньшими, чем у root.

Если root запускает сценарий, им не нужно предоставлять пароль для su другому пользователю, даже если у этого пользователя есть пароль.

0
ответ дан 3 December 2019 в 01:07

Я не хочу полагаться на гипотезу о том, что на машине существует конкретное имя пользователя.

Суперпользователь дает преимущества ...: -)

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
2
ответ дан 3 December 2019 в 01:07

Вставьте это в начало сценария оболочки.

# 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.

-1
ответ дан 3 December 2019 в 01:07

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

0
ответ дан 3 December 2019 в 01:07
#! /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 "" "${@}"
0
ответ дан 3 December 2019 в 01:07

Теги

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