Подтвердить что ты не робот

Как работать с PHP a bash script под пользователем root

Как работать с PHP a bash script под пользователем root (со всеми разрешениями), а не никто пользователь - пользователь php по умолчанию?

thats my output после sudo visudo:

Defaults        env_keep += "LINES COLUMNS"
Defaults        env_keep += "LSCOLORS"
Defaults        env_keep += "SSH_AUTH_SOCK"
Defaults        env_keep += "TZ"
Defaults        env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY"
Defaults        env_keep += "EDITOR VISUAL"
Defaults        env_keep += "HOME MAIL"

#User privilege specification
root    ALL=(ALL) ALL
%admin  ALL=(ALL) ALL


# Uncomment to allow people in group wheel to run all commands
# %wheel        ALL=(ALL) ALL

# Same thing without a password
# %wheel        ALL=(ALL) NOPASSWD: ALL

# Samples
# %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users  localhost=/sbin/shutdown -h now
4b9b3361

Ответ 1

Вы можете использовать sudo:

exec("sudo /your/script");

Вы должны разрешить выполнение script без запроса пароля. Запустите sudo visudo в консоли и добавьте следующую строку в конец:

nobody ALL = NOPASSWD: /your/script

Вы должны правильно настроить режим файла, чтобы никто не мог изменить этот script и помещать в него опасное содержимое (в корневой консоли):

chown root:root /your/script
chmod 755 /your/script

Ответ 2

Вы можете создать программу, которая является set-uid root. Это заставляет программу всегда запускаться с правами root. Это не работает со сценариями оболочки, поэтому вы должны использовать программу которая вызывает ваш script.

Ответ 3

В Linux вы обычно делаете это с помощью sudo. Постарайтесь быть как можно более конкретными, чтобы не давать script слишком много разрешений.

Примеры использования sudo: http://aplawrence.com/Basics/sudo.html

Ответ 4

Я бы добавил конкретное правило, чтобы этот script вызывался пользователем nobody, используя sudo.

Ответ 5

Недавно я опубликовал проект, который позволяет PHP получать и взаимодействовать с реальной оболочкой Bash (в качестве пользователя: apache/www-data или root при необходимости). Получите его здесь: https://github.com/merlinthemagic/MTS

После загрузки вы просто используете следующий код:

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('/full/path/to/script.sh');