Запуск скрипта от имени root, без root-доступа

Я пытаюсь запустить сценарий от имени пользователя root, который добавляет каталоги и изменяет разрешения, но я не уверен, как запустить его от имени пользователя root, не запрашивая у пользователя пароль. Пользователь не обязательно является sudoer, поэтому выполнение какой-либо команды sudo -S или изменение настроек sudoer, чтобы не требовать пароль, здесь не сработает. Любые идеи?


person jtcramer    schedule 22.04.2012    source источник
comment
Вы можете получить лучшие ответы на суперпользователя.   -  person JavaKungFu    schedule 23.04.2012
comment
легко, запустите браузер с известным нарушением безопасности и получите root-доступ   -  person CharlesB    schedule 23.04.2012


Ответы (2)


Судо твой друг. Настройте /etc/sudoers, чтобы разрешить любому запускать скрипт в определенном месте, например:

ALL   ALL = NOPASSWD: /path/to/my/root/script
person Jonathan    schedule 22.04.2012

#!/bin/bash

# Пример скрипта Linux, выполняющего инструкции (инструкции) от имени суперпользователя из графического пользовательского интерфейса (рабочий стол Ubuntu с графическим интерфейсом пользователя)

# Эти две инструкции только для этого примера, которые изменяют права root на данный файл

# Превратить этот скрипт в исполняемый, если это еще не сделано

echo $0 | chmod ugo+x

#Создайте файл для этого конкретного примера

echo "some text" > ./my_file

#

# Выполнение корневой инструкции, полезной, например, для пользовательских сценариев запуска, запускаемых при входе в Ubuntu

#Всплывающее окно для запроса пароля

PASSWD=zenity --entry --text "Введите пароль root" --hide-text

#Выполнить действие как суперпользователь

sudo -S su root -c "chown root ./my_file" <<< "$PASSWD"

#

#Следующие действия только для этого конкретного примера

# Показать владельца файла, чтобы проверить, что файл принадлежит root

printf $'\n'; ls -al ./my_file; printf $'\n'

#Восстановить текущее право собственности пользователя, если это необходимо

sudo -S su root -c "chown `whoami` ./my_file" <<< "$PASSWD"

#Показать владельца файла еще раз, чтобы проверить, принадлежит ли он обратно текущему пользователю

printf $'\n'; ls -al ./my_file; printf $'\n'

# Очистить кеш для повторного запроса пароля, если этот терминальный сеанс не закрыт

sudo -k
person user3157088    schedule 03.01.2014