Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16

Запуск bash скрипта от имени (без пароля) из php

21.11.2019, 08:57. Показов 5361. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Я хочу запустить bash скрипт через браузер.

От имени конкретного юзера, не апача.

По идее, должно получиться:

php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<?php
 
$token = $_GET['token'];
$path = dirname(__FILE__) . "/restart.sh";
 
if ($token == "XXX")
{
    # shell_exec($path);
    system($path);
}
 
?>
</body>
</html>
restart.sh:
Bash
1
su user1 -c ./home/user1/script
Загвоздка в том, что требуется ввод пароля.

Я добавил через visudo строчку:

#user1 ALL= NOPASSWD: /home/user1/script
user1 ALL=(ALL) NOPASSWD:ALL
Перезагрузил серв на всякий случай.

Для теста, залогинился под user2, но при вводе:
Bash
1
su user1 -c ./home/user1/script
с меня все равно требуют пароль. Подскажите, пожалуйста, как правильно действовать?
ОС: Debian 9.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.11.2019, 08:57
Ответы с готовыми решениями:

Запуск bash скрипта, вызывающий последовательно команды php
0 13 * * * /usr/bin/fsock -n /tmp/rrr.lock -c &quot;/var/www/admin/www/test.ru/bitrix/script.sh файл #!/bin/bash /usr/bin/php...

Запуск командной строки от имени админа без ввода пароля
Создать, например, батник с содержимым: runas /savecred /user:administrator &quot;c:\yourprogramm.exe&quot; Можно сделать скрипт и подогнать exe,...

Запуск приложения от имени админа без ввода пароля под юзером
Всем доброго времени суток. Господа подскажите пожалуйста как верно использовать команду runas? что-то я ломал ломал голову не хочет он у...

32
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
21.11.2019, 11:43
А через sudo ?
Ведь я так понимаю вы в конфиге sudo прописали вашу строчку
Bash
1
sudo -u user
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
21.11.2019, 20:08  [ТС]
Спасибо.
В случае
Bash
1
sudo -u user1 /home/user1/script
тоже требует пароль, но уже от текущей учетной записи, из-под которой выполняется эта команда.

Даже если допустить, что пароля у учетки апача нет, я даже не знаю как его учетка называется.
echo "$USER" выдает пустую строку.

Следовательно, я думаю, мне нужно:
1. Узнать имя учетки апача иным образом
2. Сделать, чтобы с нее не затребовался пароль при выполнении sudo
3. Добавить в sudoers, т.к. даже если ввести пароль, то при тесте пишет:
user2 is not in the sudoers file.
Разумеется, отладка вслепую или через > т.к. запускаю скрипт из-под php (ну или от терминала другого юзера).

P.S. Я очень не опытный юзер в linux shell, так что работаю только по мануалам, что нахожу в сети.
Если можно, объясните, пожалуйста, на пальцах, или посоветуйте, где что можно посмотреть.
--
В инете, видел совет запустить сервис апача от имени самого user1, но что-то мне эта идея не очень нравится.
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
21.11.2019, 20:17
юзер, от имени которого пашет апач, обычно указан в его конфиге. например, для debian-based дистрибутивов это обычно www-data
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
21.11.2019, 23:55
Попробуйте раскоментировать вот эту строчку
Bash
1
#user1 ALL=NOPASSWD: /home/user1/script
А имя user1 заменить на имя пользователя от которого будет запускаться программа
в моем случае это nez под которым я логинелась в системе
Bash
1
nez ALL=NOPASSWD: /home/user1/script
запускаю так. Если необходимо чтобы скрипт был запущен от пользователя user1
Bash
1
sudo -u user1 /home/user1/script
Если от рута
Bash
1
sudo /home/user1/script
Надеюсь это поможет
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
22.11.2019, 09:56
Если не ошибаюсь, то в судоерах должно быть нечто вроде:
Bash
1
nobody ALL=NOPASSWD: /путь/до/скрипта
К самому скрипту должны быть применены разрешения вроде:
Bash
1
chown root:root /путь/до/скрипта
И чмод выставлен в 755. Можно, если не сработает, попытать счастья, как сказал Dmitry, с www-data:
Bash
1
www-data ALL=NOPASSWD: /путь/до/скрипта
Добавлено через 3 минуты
Сам скрипт запускать не через system, а exec:
Bash
1
exec("sudo /путь/до/скрипта");
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
17.11.2020, 19:48  [ТС]
Прошел год, но лучше ответить поздно, чем никогда. Задачу так и не решил, и она снова актуальна.

Dmitry, спасибо. Да, так и есть, в /etc/apache2/apache2.conf => User ${APACHE_RUN_USER}, а в envvars => export APACHE_RUN_USER=www-data

greg zakharov, спасибо, но для начала попробовать бы разобраться хотя бы с запуском без пароля от имени другого (не апач) юзера.
chown и chmod пробовал применять, ничего не изменилось.

nezabudka, спасибо, но я именно так и делал в 1 посте.
# это я уже потом добавил, т.к. не сработало.
sudo или su, без разницы, все равно требует пароль.

Повторю ещё раз, пошагово.

Сейчас у меня: Debian 10 x64.
Вводим команды из под root:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
adduser user1
<вводим пароль>
adduser user2
<вводим пароль>
su - user1
echo echo Hello World > script
chmod +x script
visudo
<добавляю в файл такую строчку>
user2 ALL=NOPASSWD: /home/user1/script
Ctrl + X, Y, ENTER
<вернулся в основную консоль>
su - user2
sudo -u user1 /home/user1/script
 
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
 
    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.
 
[sudo] password for user2:
^C
su user1 -c /home/user1/script
Password:
Как видите, не прокатывает. Что я делаю не так?

Заранее благодарен за любую помощь.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
18.11.2020, 09:02
Bash
1
2
su - user2
sudo /home/user1/script
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
18.11.2020, 15:43  [ТС]
Marinero, не понял я вашего ответа.

Цитата Сообщение от Dragokas Посмотреть сообщение
Для теста, залогинился под user2, но при вводе:
Bash
1
su user1 -c ./home/user1/script
с меня все равно требуют пароль.
Мне нужно будучи залогиненным под user2 (а не root, как у вас), выполнить ./home/user1/script от имени user1. При этом, чтобы меня не спрашивали пароль учётки.
Если всё получится, я потом тоже самое проделаю будучи залогиненным под www-data, тем самым решив оригинальный вопрос сабжа.
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
18.11.2020, 15:49
Code
1
man su


зы. возвращаясь к запуску баша через браузер. лично я (как считаю, в целях безопасности) практикую такое:
  • браузер тупо пишет (в туда, куда ему дозволено) некий конкретный файл с конкретным флагом
  • крон запускает баш-скрипт, который проверяет наличие этого файла. если файл есть / флаг в нем есть / флаг удовлетворяет какому-то требованию / и т.д. (зависит от степени паранои), выполняется нужное действие.
  • выполнив действие, скрипт удаляет файл с флагом
1
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
18.11.2020, 15:57  [ТС]
Цитата Сообщение от Dmitry Посмотреть сообщение
Bash
1
man su
дак, а что толку с написанного Marinero?

Первая же строчка - ведет к запросу пароля:
Bash
1
2
user2@debian10x64:~$ su - user1
Password:
Прошу ткнуть пальцем, я же совсем не разбираюсь.

Цитата Сообщение от Dmitry Посмотреть сообщение
зы. возвращаясь к запуску баша через браузер. лично я (как считаю, в целях безопасности) практикую такое:
браузер тупо пишет (в туда, куда ему дозволено) некий конкретный файл с конкретным флагом
крон запускает баш-скрипт, который проверяет наличие этого файла. если файл есть / флаг в нем есть / флаг удовлетворяет какому-то требованию / и т.д. (зависит от степени паранои), выполняется нужное действие.
выполнив действие, скрипт удаляет файл с флагом
Сейчас не стоит вопрос безопасности.
Проверку через cron считаю не особо хорошим вариантом, т.к.:
- будут задержки между отправкой команды и ее исполнением
- доп. нагрузка
У меня безопасность реализована через передачу в php токена.
С другой стороны да, вы подсказали вариант обхода проблемы (без испольщования su).
Но хотелось бы это как-то по нормальному сделать.
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
18.11.2020, 16:11
Цитата Сообщение от Dragokas Посмотреть сообщение
Прошу ткнуть пальцем, я же совсем не разбираюсь.
при чем тут "разбираюсть"?
вас "пнули в направлении"
вы не поняли, или даже не пытались понять
вы написали ранее, как настраивали использование судо пользователем юзер2, потом написали, что не проходит проверка, и задали вопрос "что я делаю не так?" пока все верно? так вот вам показали, что надо для "так" - чтобы срабатывало разрешение, настроенное для пользователя юзер2, СНАЧАЛА НУЖНО СТАТЬ ЭТИМ САМЫМ ПОЛЬЗОВАТЕЛЕМ (юзер2)! и команда su как раз и предоставляет такую возможность - ПЕРЕКЛЮЧИТЬСЯ НА ДРУГОГО ПОЛЬЗОВАТЕЛЯ! а пароль она - да, просит, причем просит обязательно! и пароль который она от вас хочет - это пароль (в данном случае) пользователя юзер2. И лишь став пользователем юзер2, вы сможете проверить, работают ли те разрешения судо, которые вы для него настраивали...

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Dragokas Посмотреть сообщение
хотелось бы это как-то по нормальному сделать.
так вы почитайте, почему блочат в настройках пыха всевозможные "exec-и", "system-ы" и пр..., глядишь, и "нормальность" иной окажется



Добавлено через 3 минуты

Не по теме:

и кстати,

Цитата Сообщение от Dragokas Посмотреть сообщение
- доп. нагрузка
В ЧЕМ? крон-то на сервере с линуксом ВСЕ РАВНО ПАШЕТ ВСЕ ВРЕМЯ, вне зависимости от того, боитесь ли вы его использовать или нет...

0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
18.11.2020, 16:16  [ТС]
Цитата Сообщение от Dmitry Посмотреть сообщение
СНАЧАЛА НУЖНО СТАТЬ ЭТИМ САМЫМ ПОЛЬЗОВАТЕЛЕМ (юзер2)! и команда su как раз и предоставляет такую возможность
Дык, пост #7, строка #13.
Цитата Сообщение от Dmitry Посмотреть сообщение
и задали вопрос "что я делаю не так?"
А вопрос на счёт строки #14.

Не по теме:


Цитата Сообщение от Dmitry Посмотреть сообщение
так вы почитайте, почему блочат в настройках пыха всевозможные "exec-и", "system-ы" и пр..., глядишь, и "нормальность" иной окажется
Вроде как блочат когда входящие данные для exec/system берутся из входящих данных для пыха.
Если передавать туда жестко вшитую строку (или делать нормальные проверки), то наверно и нет смысла ничего такого блочить.


Не по теме:


Цитата Сообщение от Dmitry Посмотреть сообщение
В ЧЕМ? крон-то на сервере с линуксом ВСЕ РАВНО ПАШЕТ ВСЕ ВРЕМЯ, вне зависимости от того, боитесь ли вы его использовать или нет...
Каждую секунду выполнять проверку... Как-то не по фен-шую.
Но за вариант в любом случае спасибо. Воспользуюсь, если других не будет.

0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
18.11.2020, 16:18
Цитата Сообщение от Dragokas Посмотреть сообщение
Каждую секунду выполнять проверку...
вы о чем?
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
18.11.2020, 16:21  [ТС]
cron умеет реагировать на появление файла как-то иначе, не возводя проверку по таймеру?
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
18.11.2020, 16:22
Цитата Сообщение от Dragokas Посмотреть сообщение
Дык, пост #7, строка #13.
Цитата Сообщение от Dragokas Посмотреть сообщение
А вопрос на счёт строки #14.
мля, а прочесть там же 10-ю строку, да потом ПОПЫТАТЬСЯ мозг включить?
беспарольное разрешение выдано КОМУ? а в 14-й строке мы команду пытаемся выполнить как кто?
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
18.11.2020, 16:24  [ТС]
Мда, теперь когда тыкнули, увидел, что запрашивает пароль от текущего пользователя (непонятно только нахрена, ну да и ладно), спасибо.
Цитата Сообщение от Dragokas Посмотреть сообщение
sudo -u user1 /home/user1/script
[sudo] password for user2:
0
18.11.2020, 16:25

Не по теме:

Цитата Сообщение от Dragokas Посмотреть сообщение
cron умеет
омг! вот уж не ожидал, что "девелоперам" нужно разжовывать аж до такой степени. мой вопрос касался словосочетания
Цитата Сообщение от Dragokas Посмотреть сообщение
Каждую секунду
(а то ведь, согласно докам, крон отрабатывает каждую МИНУТУ....)

0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
18.11.2020, 16:29  [ТС]

Не по теме:


Послушайте я не работаю с Linux-ом так часто, чтобы это всё помнить.

Цитата Сообщение от Dmitry Посмотреть сообщение
(а то ведь, согласно докам, крон отрабатывает каждую МИНУТУ....)
ну дык, тем более. Вы предлагаете отправить команду и целую минуту ждать пока ее начнёт разбирать cron.



Цитата Сообщение от Dragokas Посмотреть сообщение
запрашивает пароль от текущего пользователя
Получается, чтобы это завелось, мне теперь еще и надо знать пароль от учётки Apach, который есть ли вообще(?), и хз где хранится.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
19.11.2020, 16:51
Dragokas, как-то у Вас смешалось все... Если Вы дали разрешения user2 (см visudo) зачем Вы скрипт выполняете от имени user1?
Цитата Сообщение от Dragokas Посмотреть сообщение
sudo -u user1 /home/user1/script
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.11.2020, 16:51
Помогаю со студенческими работами здесь

Файл pgpass, запуск psql от имени другого пользователя без ввода пароля
Написал скрипт на питоне, который выдирает с базы данных информацию. Так как линукс сервер рабочий, начальство не разрешило устанавливать...

Запуск php скрипта без web сервера
Здраствуйте, имеется php скрипт. Нужно что б он запускался на локальной машине без установленого web сервера. Возможно ли такое ?

Шифрование пароля внутри скрипта Bash
В windows при подготовке файла ответов , можно было ввести через менеджер подготовки файла ответов пароль, но когда сохранялся сам файл...

php запуск скрипта без браузера или преобразование в exe
Нужно преобразовать как-то .php в .exe файл. И чтобы запустить его и был результат выполнения кода. Читал, что какие-то программы есть...

Запуск и остановка bash - скрипта
есть bash - скрипт #!/bin/bash while true do php test.php sleep 3s done как сделать комманды start stop и restart ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru