synology.forum архив спільноти · 2005–2022
ai.synology.forum →
ГлавнаяВеб Сервер + PHP / MySQL › cgi script

cgi script

SergeS · 02.01.2015

Как можно запустить простейший cgi-script вот такого вида:

-------

#!/bin/sh

echo "Content-type: text/html"

echo ""

echo "<h1>test</h1>"

-------

 

Просто создаю файлик с таким содержимым, даю ему имя 111.cgi, ложу в папку вебсервера, вызываю из интернет браузера - файл не найден... Что я делаю не так? C php играюсь уже давно и успешно, а вот с этим что-то я не так делаю...

 

Всех - с Наступившим НГ!

 

 

DMagister · 03.01.2015
Просто создаю файлик с таким содержимым, даю ему имя 111.cgi, ложу в папку вебсервера, вызываю из интернет браузера - файл не найден... Что я делаю не так? C php играюсь уже давно и успешно, а вот с этим что-то я не так делаю...

каталог, откуда Вы пытаетесь запускать скрипт, должен быть в списке разрешенных для cgi. в "обычном" apache нужно смотреть в районе scriptaliases и execcgi в настройках каталога, а на synology в gui этого по-моему нет.

SergeS · 04.01.2015
каталог, откуда Вы пытаетесь запускать скрипт, должен быть в списке разрешенных для cgi. в "обычном" apache нужно смотреть в районе scriptaliases и execcgi в настройках каталога, а на synology в gui этого по-моему нет.

 

Ага, понял, спасибо... Я уже на роутере смог запустить cgi-script на sh, именно то, что и хотелось, никогда раньше с этим не игрался, надо было просто его в cgi-bin положить, наверное и в синолоджи нечто подобное есть, папка для cgi скриптов... Посмотрю уже наверное завтра.

Smoke74 · 06.01.2015

в крайней синокоробке мод mod_cgi.so вообще не подгружается. Кастрировали апач, вероятно в пользу производительности.

Зато есть FastCGI

SergeS · 06.01.2015
в крайней синокоробке мод mod_cgi.so вообще не подгружается. Кастрировали апач, вероятно в пользу производительности.

Зато есть FastCGI

 

Я в cgi-scripts не копенгаген...

Найти папку куда надо положить мой простейший скрипт в начале этой темы, что бы он заработал - у меня не получилось :-(, так что вопрос все еще актуален...

 

А что дает FastCGI?

ssd74 · 06.01.2015
Я в cgi-scripts не копенгаген...

Найти папку куда надо положить мой простейший скрипт в начале этой темы, что бы он заработал - у меня не получилось :-(, так что вопрос все еще актуален...

Это не поможет?

http://diskstation.ru/viewtopic.php?f=18&a...8&hilit=spk

SergeS · 07.01.2015
Это не поможет?

http://diskstation.ru/viewtopic.php?f=18&a...8&hilit=spk

 

Не выходит каменный цветок. Похоже - проблема в том, куда этот скрипт положить, не могу найти, где задается папка для запускаемых скриптов.

Права на выполнение своему скрипту даю, другие файлы, лежащие рядом в этом же фолдере - видятся, но не cgi.

DMagister · 07.01.2015
Не выходит каменный цветок. Похоже - проблема в том, куда этот скрипт положить, не могу найти, где задается папка для запускаемых скриптов.

Права на выполнение своему скрипту даю, другие файлы, лежащие рядом в этом же фолдере - видятся, но не cgi.

вы его куда пробовали класть то ?

/var/services/web - он же корневой каталог при обращении к Вашему устройству, выполняется. положил в каталог с пробным сайтом, тоже все выполняется.

Тимур Рахимов · 07.01.2015

Много есть разных причин, препятствующих нормальному исполнению скриптов на веб-сервере (вот я намучился не так давно как раз на Synology! и после перехода на новую версию DSM опять всё пришлось перенастраивать, поскольку как раз почти всё, что на это влияет, там изменилось). Помимо того, «куда положить файл», есть множество других ловушек, куда можно попасть по первому разу. Давайте я вам помогу. Поясните, пожалуйста, поподробнее и поточнее, как именно выглядит ваше «не работает»?

Тимур Рахимов · 07.01.2015

SergeS

Прошу прощения, я тут подумал, что нужно уточнить, что я имел в виду, чтобы не заставлять вас зря трудиться. Что вы видите, когда пытаетесь запустить ваш файл со скриптом из адресной строки браузера напрямую? Ошибка 404 (файл не найден), 403 (доступ запрещён), текст вашего скрипта, скачивание вашего скрипта с сервера файлом, ошибку 500 (внутренняя ошибка сервера), ещё что-нибудь? В логе ошибок веб-сервера смотрели, что там?

SergeS · 07.01.2015
SergeS

Прошу прощения, я тут подумал, что нужно уточнить, что я имел в виду, чтобы не заставлять вас зря трудиться. Что вы видите, когда пытаетесь запустить ваш файл со скриптом из адресной строки браузера напрямую? Ошибка 404 (файл не найден), 403 (доступ запрещён), текст вашего скрипта, скачивание вашего скрипта с сервера файлом, ошибку 500 (внутренняя ошибка сервера), ещё что-нибудь? В логе ошибок веб-сервера смотрели, что там?

 

"The page is not found"

Только я хочу сразу уточнить что у меня не получается запустить cgi shell script, простейший пример которого на первом посте в этой теме. Те же php скрипты из этого же фолдера запускаются без проблем.

 

А где посмотреть лог ошибок вебсервера на наших коробочках?

Тимур Рахимов · 07.01.2015

Да-да, я понимаю разницу в технической реализации между php и shell-скриптами на Synology (начиная с версии DSM 5.0 они оба работают через CGI, но обслуживаются разными серверами и конфигурируются отдельно). «The page is not found» — это что, ошибка 404? Браузер сам так пишет или сервер отдаёт страницу с этой надписью? Как она выглядит, картинку можете показать?

 

Лог ошибок (пользовательского экземпляра Apache, который обслуживает ваш собственный веб-сервер, а вообще-то этих экземпляров там, считая WebDAV, аж 3) в версии DSM 5.1 находится по адресу /etc/httpd/logs/user-error_log, если вы ничего не изменяли в конфигурации, конечно.

Тимур Рахимов · 07.01.2015

Да, и ваш скрипт у меня работает как надо (ну, после того заработал, как я повключал что надо в своей конфигурации — она у меня очень далеко ушла от системной, работает свой конфигурационный файл вместо того, что «по умолчанию»).

Smoke74 · 08.01.2015

По умолчанию в синокоробке запрещено использование cgi в папке web.

Создайте файл .htaccess c строкой:

Options +ExecCGI

Поместите htaccess в корень папки сайта. Где будет размещен сам CGI не важно, однако для валидности рекомендую все же создать папку cgi-bin и положить его туда.

После этого cgi-скрипт будет выполняться, при условии что ему были даны права на исполнение (chmod +x /путь_к_cgi/имя_скрипта)

Тимур Рахимов · 08.01.2015

Если моё предположение насчёт того, что пресловутое «The page is not found» — это сообщение об ошибке 404 (хотя вопрос, почему оно такое необычное; впрочем, кто его знает, что там в конкретной конфигурации директива ErrorDocument говорит — на то, что «всё как из коробки», я бы не положился), то, учитывая, что соседние файлы отдаются сервером нормально, очевидной гипотезой будет, что где-то в файлах *.conf сидит ScriptAlias, уводящий запрос к файлам *.cgi в специально выделенный системный каталог cgi-bin. Однако что гадать, пока уважаемый SergeS деталями своей конфигурации с нами не поделился.

Smoke74 · 08.01.2015
Если моё предположение насчёт того, что пресловутое «The page is not found» — это сообщение об ошибке 404 (хотя вопрос, почему оно такое необычное;

Ничего необычного, хэндлер CGI есть, прав на исполнение - нет. Вот и выходит error 404

Тимур Рахимов · 08.01.2015
Ничего необычного, хэндлер CGI есть, прав на исполнение - нет. Вот и выходит error 404

 

В этом случае (когда я, например, принудительно с помощью .htaccess ставлю Options -ExecCGI), Apache даёт ошибку 403 (Forbidden). Я проэкспериментировал.

Тимур Рахимов · 08.01.2015

А вот если отнять какое-нибудь необходимое право на файл (например, chmod -x <имя файла>), то будет ошибка 500. В логе ошибок при этом:

 

[Thu Jan 08 09:45:38 2015] [error] (13)Permission denied: exec of '/volume1/web/other/test.sh' failed
[Thu Jan 08 09:45:38 2015] [error] [client 192.168.1.199] Premature end of script headers: test.sh

Smoke74 · 08.01.2015
В этом случае (когда я, например, принудительно с помощью .htaccess ставлю Options -ExecCGI), Apache даёт ошибку 403 (Forbidden). Я проэкспериментировал.

Да, и ваш скрипт у меня работает как надо (ну, после того заработал, как я повключал что надо в своей конфигурации — она у меня очень далеко ушла от системной, работает свой конфигурационный файл вместо того, что «по умолчанию»).

это только означает что в ваших настройках запрещены к скачиванию *.cgi

Тимур Рахимов · 08.01.2015
это только означает что в ваших настройках запрещены к скачиванию *.cgi

Этого я не понял, к сожалению. Как именно запрещены, какой директивой? Options ExecCGI, как следует из названия, управляет именно возможностью исполнения. Но я бы даже так сформулировал: напишите, пожалуйста, набор директив для нашего случая, который позволил бы воспроизвести ошибку 404. Я поставлю у себя эксперимент.

Smoke74 · 08.01.2015
Этого я не понял, к сожалению. Как именно запрещены, какой директивой? Options ExecCGI, как следует из названия, управляет именно возможностью исполнения. Но я бы даже так сформулировал: напишите, пожалуйста, набор директив для нашего случая, который позволил бы воспроизвести ошибку 404. Я поставлю у себя эксперимент.

 

<Directory "/var/services/web">

Options MultiViews FollowSymLinks ExecCGI

AllowOverride All

Order allow,deny

Allow from all

</Directory>

<IfModule mime_module>

AddHandler cgi-script .cgi

</IfModule>

 

у вас в настройках скорей всего добавлено что-то вроде:

<Files "*.cgi">

deny from all

</Files>

Тимур Рахимов · 08.01.2015

Уважаемый Smoke74, спасибо за ответ. Конечно, никакого Deny from all для отдельных групп файлов у меня не было, но я всё равно проэкспериментировал. Вот с таким .htaccess скрипт автора темы (я его только переназвал у себя как test.sh) работает как надо (выдаёт слово test шрифтом заголовка):

Options MultiViews FollowSymLinks ExecCGI

Order allow,deny
Allow from all

AddHandler cgi-script .sh

 

с таким (добавлено deny from all)

Options MultiViews FollowSymLinks ExecCGI

Order allow,deny
Allow from all

AddHandler cgi-script .sh

<Files "*.sh">
    deny from all
</Files>

 

 

или с таким (выключена опция ExecCGI)

Options MultiViews FollowSymLinks ExecCGI

Order allow,deny
Allow from all

AddHandler cgi-script .sh

Options -ExecCGI

 

одинаково выдаёт ошибку 403 (но сообщения в логе ошибок при этом разные, «client denied by server configuration» и «Options ExecCGI is off in this directory» соответственно). Я уж было собирался скриншоты приложить для пущей достоверности, но что-то не нашёл, как здесь их добавлять в сообщения.

 

Наверное, я вас не понял. Как всё-таки получить ошибку 404 по вашей гипотезе?

Smoke74 · 08.01.2015

Забавно, но у меня с этими же настройками при Options -ExecCGI выдает ошибку 404, если убрать права на выполнение - ошибка 500

видимо в конфиге что-то еще инклудится

Тимур Рахимов · 08.01.2015

Действительно, интересно. А у вас в конфигурации какой модуль обслуживает CGI-запросы, cgi_module или cgid_module? Какая, то есть, версия DSM?

 

У меня в DSM 5.1-5021 Update 2 строка такая:

LoadModule cgid_module modules/mod_cgid.so

 

Тимур Рахимов · 08.01.2015

Уважаемый Smoke74, вы были правы. Я сейчас отключил свою конфигурацию, вернувшись тем самым к немодифицированному /etc/httpd/conf/httpd.conf-user, отнял права на файл, и voilа — «Страница не найдена» (это такое собственное сообщение об ошибке, выдаваемое надстройкой Synology). Я-то в своей конфигурации всё лишнее поотключал, оставив только необходимое. Вероятно, их собственный обработчик ошибок скрывает истинную причину вызова, так что за сообщением «Страница не найдена» (возможно, у автора темы это как раз она, только язык английский) может быть всё что угодно. Для диагностики лучше будет, наверное, в конфигурации вот это вот

    ErrorDocument 403 /webdefault/error.html
    ErrorDocument 404 /webdefault/error.html
    ErrorDocument 500 /webdefault/error.html

 

заменить следующим (ну то есть вписать этот текст в .htaccess в соответствующей папке для сайта будет проще всего):

#
# Отмена стандартной страницы ошибок Synology (замена её стандартной Apache)
#
ErrorDocument 403 default
ErrorDocument 404 default
ErrorDocument 500 default

 

Тогда на сообщения об ошибках можно будет как-то полагаться. Спасибо за ценную информацию.

SergeS · 08.01.2015
Если моё предположение насчёт того, что пресловутое «The page is not found» — это сообщение об ошибке 404 (хотя вопрос, почему оно такое необычное; впрочем, кто его знает, что там в конкретной конфигурации директива ErrorDocument говорит — на то, что «всё как из коробки», я бы не положился), то, учитывая, что соседние файлы отдаются сервером нормально, очевидной гипотезой будет, что где-то в файлах *.conf сидит ScriptAlias, уводящий запрос к файлам *.cgi в специально выделенный системный каталог cgi-bin. Однако что гадать, пока уважаемый SergeS деталями своей конфигурации с нами не поделился.

 

О, я смотрю тут у нас прямо целая дискуссия развернулась, жаль, что я не все понимаю, о чем тут умные люди говорят, чувствую себя чужим на этом празднике жизни, хаха :-))))

 

Про конфигурацию собственно мне и сказать нечего - DSM 5.1, ничего особенного в конфигах руками не менял.

Сообщение об ошибке - дефолтное, от Синолоджи, на белом фоне голубым шрифтом текст "Sorry, the page you are looking for is not found." и кнопка "Back", не думаю, что нужен скриншот.

 

Вечером попробую поигратся с .нтаксесс, спасибо всем участвующим.

Тимур Рахимов · 08.01.2015
Вечером попробую поигратся с .нтаксесс, спасибо всем участвующим.

 

В лог ошибок загляните также, пожалуйста, это может здорово помочь. А ешё лучше — опубликуйте соответствующие строчки из него, сразу можно будет ряд гипотез отсеять.

SergeS · 09.01.2015
В лог ошибок загляните также, пожалуйста, это может здорово помочь. А ешё лучше — опубликуйте соответствующие строчки из него, сразу можно будет ряд гипотез отсеять.

 

ДоклАдаю:

1.Сделал специальный тестовый фолдер /volume1/web/scripts-play/, что бы не путатся с другими файлами (скриншот).

 

2.Положил туда три файлика: 111.cgi (мой подопытный скрипт), phpinfo.php (тестовый php script), .htaccess (то, что тут на форуме посоветовали) (скачать архив для посмотреть).

 

3.При заходе на http://<IP>/scripts-play/phpinfo.php - показывает как и положено пхп-инфо страничку (screenshot).

 

4.При заходе на http://<IP>/scripts-play/111.cgi - показывает "Sorry, the page you are looking for is not found" (screenshot)

 

5. В логе такие строчки на попытку запустить подопытный cgi-script:

---

[error] (2)No such file or directory: exec of '/var/services/web/scripts-play/111.cgi' failed

[error] [client 192.168.0.11] Premature end of script headers: 111.cgi

---

Тут мне немного неожиданно почему логфайл ссылается на /var/services/web/scripts-play/, хотя я все ложил в /volume1/web/scripts-play/ (смотри пункт 1), но WinSCP показывает, что эти два папки одинаковых, судя по всему в одной из них лежит симлинк на другую.

 

6. Если я убираю .htaccess из тестового фолдера, то ни в логфайле, ни в логике работы никаких изменений не вижу.

 

Что означает "Premature end of script headers" в логе?

DMagister · 09.01.2015
5. В логе такие строчки на попытку запустить подопытный cgi-script:

---

[error] (2)No such file or directory: exec of '/var/services/web/scripts-play/111.cgi' failed

[error] [client 192.168.0.11] Premature end of script headers: 111.cgi

---

...

 

Что означает "Premature end of script headers" в логе?

неожиданное окончание заголовка скрипта.

у Вас похоже какой-то несуществующий шел прописан в первой строке. или <cr><lf> неправильно обработались.

SergeS · 09.01.2015
у Вас похоже какой-то несуществующий шел прописан в первой строке. или <cr><lf> неправильно обработались.

 

Точно! Перезаписал в линуховском формате - все заработало, странно - вроде проверял... Видать - новый год таки сказывается :-)

Всем спасибо - вопрос закрыт ;-)

 

UPD: Причем - и .htaccess не нужен, и так все работает.

Тимур Рахимов · 09.01.2015
UPD: Причем - и .htaccess не нужен, и так все работает.

Это потому, что у вас конфигурация, судя по всему, нетронутая. «Из коробки» всё как надо для CGI-скриптов уже настроено, в версии 5.1 конфигурационные файлы все нужные директивы содержат, я проверял, работает.

 

Чувствую необходимость добавить ещё несколько слов, чтобы ситуация стала яснее. Сообщение «Premature end of script headers», увы, почти совсем никакой информации не несёт, и если бы не быстрая догадка уважаемого DMagister, ещё, может быть, пришлось долго проверять все возможные причины. Дело в том, что это сообщение означает всего лишь «с точки зрения сервера, всё сконфигурировано правильно, но при формировании страницы возникла ошибка (нет даже необходимых заголовков разметки страницы), потому что от сервера CGI ничего не пришло». Почему не пришло — бог весть, тысяча причин. Например, в нашем случае сервер CGI нашёл, но не смог прочитать файл скрипта. Или, как я выше показывал, если не дать файлу право на исполнение (при том что остальное всё правильно), то будет то же самое: в логе мы увидим это самое «Premature end of script headers». На веб-сервере при этом будет возникать ошибка 500 (только в нашем случае надстройка Synology её скрывает, отвечая во всех случаях, что «файл не найден»). Ошибка же 403 возникнет только в случае, если до фактической передачи скрипта через CGI дело даже не дойдёт, то есть веб-сервер отклонит запрос, руководствуясь своими настройками, содержащимися в конфигурационных файлах (включая .htaccess).

 

Ответ на вопрос, почему в логе упоминается каталог /var/services/web/, хотя вы клали файлы в /volume1/web, простой. Действительно, /var/services/web/ — это symlink на /volume1/web, но этого недостаточно для объяснения. Дело в том, что настройки пользовательского веб-сервера по умолчанию наших коробочек таковы, что корневой каталог сайта отображается на каталог диска /var/services/web/, а не /volume1/web (ну так настроено). И хотя эти каталоги на самом деле содержат одно и то же, с точки зрения веб-сервера они разные (в смысле настройки разрешений и т. п.).

 

Надеюсь, стало понятно. Кстати, если возникнут ещё вопросы о конфигурации веб-сервера на Synology, спросите меня, я с радостью помогу. Там есть много интересных возможностей, если научиться конфигурировать через текстовый файл. Например, использование «обратного» прокси в сочетании с виртуальными хостами позволит получать доступ к системному веб-интерфейсу через порт 443, а не 5001 (важно для тех, у кого на работе в целях безопасности все порты закрыты). Или доступ по http (https) к разным устройствам домашней сети не по различным портам одного адреса, а по разным доменным адресам (есть ещё, впрочем, технологии VPN и собственного сервера DNS для этого, но всегда есть причины, чтобы предпочесть одно другому). Использование различных сертификатов SSL для различных своих виртуальных сайтов (на одном IP-адресе). Да мало ли что.

DMagister · 09.01.2015
Чувствую необходимость добавить ещё несколько слов, чтобы ситуация стала яснее. Сообщение «Premature end of script headers», увы, почти совсем никакой информации не несёт, и если бы не быстрая догадка уважаемого DMagister, ещё, может быть, пришлось долго проверять все возможные причины. Дело в том, что это сообщение означает всего лишь «с точки зрения сервера, всё сконфигурировано правильно, но при формировании страницы возникла ошибка (нет даже необходимых заголовков разметки страницы), потому что от сервера CGI ничего не пришло». Почему не пришло — бог весть, тысяча причин. Например, в нашем случае сервер CGI нашёл, но не смог прочитать файл скрипта. Или, как я выше показывал, если не дать файлу право на исполнение (при том что

Тимур, при всем уважении, но это была не догадка, а практически однозначное толкование сообщений об ошибке ;)

SergeS · 09.01.2015
Надеюсь, стало понятно. Кстати, если возникнут ещё вопросы о конфигурации веб-сервера на Synology, спросите меня, я с радостью помогу. Там есть много интересных возможностей, если научиться конфигурировать через текстовый файл. Например, использование «обратного» прокси в сочетании с виртуальными хостами позволит получать доступ к системному веб-интерфейсу через порт 443, а не 5001 (важно для тех, у кого на работе в целях безопасности все порты закрыты). Или доступ по http (https) к разным устройствам домашней сети не по различным портам одного адреса, а по разным доменным адресам (есть ещё, впрочем, технологии VPN и собственного сервера DNS для этого, но всегда есть причины, чтобы предпочесть одно другому). Использование различных сертификатов SSL для различных своих виртуальных сайтов (на одном IP-адресе). Да мало ли что.

 

Спасибо большое, если что - буду обращатся. Правда, пока ничего не надо, все устраивает :-)

Хотя, если честно - и этот sgi-sh скрипт тоже не шибко нужен был, просто я игрался с микророутером gl-inet, по совету местных товарищей, для домашней автоматики, и там подобный скрипт получилось запустить без проблем. Мне понравилась сама идея таких скриптов, то, что они требуют минимум ресурсов и то, что можно делать что угодно с ресурсами самого сервера - писать/читать файлы/компорты, я с таким видом скриптов никогда раньше не сталкивался, и я решил попробовать на "большом" сервере, работает ли. Теперь осталось придумать, зачем оно мне надо :-)

Тимур Рахимов · 10.01.2015
это была не догадка, а практически однозначное толкование сообщений об ошибке

Прошу прощения, наверное, действительно мне не удалось удачно выразиться. Я всего лишь хотел сказать, что нелишне будет знать, что такое сообщение вызывается множеством разных причин, и в сложных случаях нелегко может быть добраться до истинной. Когда я отлаживал запуск своего первого sh-скрипта на Synology, то, кажется, собрал все возможные ошибки (правда, надо сказать, что я и задачу себе поставил не самую подходящую для учебных целей — перезапуск средствами веб-сервера самого веб-сервера), и на всё у сервера был один ответ: «Premature end of script headers». Правда, из всех возможных причин какие-то будут (особенно если учесть ситуацию) куда более вероятными, чем прочие, и здесь мне и уважаемому SergeS здорово повезло, что вы, со своими знаниями и опытом, сразу указали на нужные. А я вот, к своему стыду, об этом не подумал (хотя в своё время и сам на эту ошибку тоже попался). Спасибо вам.

SergeS · 12.03.2015
Спасибо большое, если что - буду обращатся. Правда, пока ничего не надо, все устраивает :-)

Хотя, если честно - и этот sgi-sh скрипт тоже не шибко нужен был, просто я игрался с микророутером gl-inet, по совету местных товарищей, для домашней автоматики, и там подобный скрипт получилось запустить без проблем. Мне понравилась сама идея таких скриптов, то, что они требуют минимум ресурсов и то, что можно делать что угодно с ресурсами самого сервера - писать/читать файлы/компорты, я с таким видом скриптов никогда раньше не сталкивался, и я решил попробовать на "большом" сервере, работает ли. Теперь осталось придумать, зачем оно мне надо :-)

 

Выполняю свое обещание обращатся еще, если будет что-то непонятно :-)))

 

вопрос такой:

из cgi-shell-скрипта (примерно как в начале этого топика) я хочу кого-то пингануть, отобразив результат в браузере.

Скрипт такой:

#!/bin/sh
echo "Content-type: text/html"
echo ""

echo "<html>"
echo "<head> </head>"
echo "<body>"
echo "<h1> Ping Test </h1>"
ping -c 1 -W 1 localhost

echo "</body>"
echo "</html>"

 

В браузере получаю такой результат:

--- 8< ---

Ping Test

PING localhost (127.0.0.1): 56 data bytes

--- 8< ---

 

В логе /etc/httpd/logs/user-error_log получаю запись: ping: permission denied (are you root?)

 

Что происходит - в общем-то вроде понятно, мой cgi-script запускается в контексте веб-сервера (user: http?), а не root, а ping разрешен только root'у, правильно?

 

А вот как это решить/обойти - совсем не понятно... На всякий случай - права моему скрипту дал все (0777 octal), c Group и Owner тоже игрался - не дает пинговать все равно, редиска :-) Это можно как-то подправить,

 

Кстати, WinSCP в списке возможных owners показывает всего три варианта, root, admin и 1026 - кто такой 1026, у меня такого юзера нет, зато есть куча других? Я правильно понимаю, что все вот эти юзеры DSM - это как бы не настоящие юзеры нижележащего Линукса и на самом деле DSM, как wrapper, оболочка, скрывает всех своих юзеров за вот этим линуксовским 1026?

 

p.s. Вставил в свой скрипт команду id, в браузере нарисовалось uid=1023(http) gid=1023(http) groups=1023(http)... Так что таки да, ожидаемо, - юзер не торт, в смысле - не root.

Тимур Рахимов · 12.03.2015

Да, способ есть, и он, похоже, единственный: использовать команду sudo в скрипте, примерно вот так:

 

#!/bin/sh  

echo -e 'Content-type: text/html \n\n'

echo '<body><pre>'

if /opt/bin/sudo -u root ваша_команда 2>&1; then  
    echo Done.
fi

echo '<pre></body>'

 

Однако sudo в стандартный набор программ DSM не входит, так что его нужно найти и установить отдельно. После этого встанет следующая проблема: как заставить команду sudo не спрашивать пароль (да ещё и не поступаясь уровнем безопасности). Вот я когда-то головой о стенку бился! Решение такое — в специальный файл sudoers добавить примерно следующее (я вынес это в отдельный подключаемый к sudoers свой файл на пользовательском разделе):

 

http 192.168.1.1 = (root) NOPASSWD: /usr/bin/httpd 
                                                                             
Defaults:http !requiretty

 

Здесь 192.168.1.1 — явно указанный адрес сервера (localhost в sudoers не работает). Указывать в качестве defaults, что для пользователя http можно принимать ввод не только с реального, физического терминала, возможно, не потребуется (по умолчанию requiretty и так установлено в off), но на всякий случай нужную команду я сюда тоже вам включил. Кроме всего прочего, будут ещё неочевидные сложности с редактированием файла sudoers (его ещё так просто не отредактируешь), но я так навскидку уже не помню. Впрочем, думаю, это легко будет нагуглить.

 

Ну и права на все файлы назначить нужно правильно (исходя из избранной концепции ограничения доступа), само собой.

Тимур Рахимов · 12.03.2015

Ах да, совсем забыл. Загадочный пользователь (1026), судя по всему, это удалённый вами ранее пользователь DSM. Пользователи DSM — это обычные пользователи линукса, просто когда информации о пользователе в соответствующих файлах уже нет, то все следы, к нему относящиеся (назначенные права и т. п.) ссылаются на бывший его id.

SergeS · 13.03.2015
Да, способ есть, и он, похоже, единственный: использовать команду sudo в скрипте, примерно вот так:

.......

Ну и права на все файлы назначить нужно правильно (исходя из избранной концепции ограничения доступа), само собой.

 

Нда, навороченно немного ;-). Спасибо за столь подробное объяснение.

 

SergeS · 13.03.2015
Ах да, совсем забыл. Загадочный пользователь (1026), судя по всему, это удалённый вами ранее пользователь DSM. Пользователи DSM — это обычные пользователи линукса, просто когда информации о пользователе в соответствующих файлах уже нет, то все следы, к нему относящиеся (назначенные права и т. п.) ссылаются на бывший его id.

 

Хм, странно. У меня в dsm полтора десятка юзеров, что б кого-то удалял - не помню, хотя и не исключаю, а в выпадающем списке юзеров в winscp - всего три варианта: root, admin и 1026, хотя, справедливости ради, - ручками можно вписать все что угодно. Ладно, еще раз спасибо.

polanat · 13.03.2015
Ах да, совсем забыл. Загадочный пользователь (1026), судя по всему, это удалённый вами ранее пользователь DSM. Пользователи DSM — это обычные пользователи линукса, просто когда информации о пользователе в соответствующих файлах уже нет, то все следы, к нему относящиеся (назначенные права и т. п.) ссылаются на бывший его id.

Странное утверждение. Если нормальный (нетехнический) пользователь создан в DSM - то при стандартном его удалении - все его следы просто исчезают и не превращаются в непонятный 1026 ;) Соответствующая подпапка в папке homes тупо удаляется.

 

в выпадающем списке юзеров в winscp - всего три варианта: root, admin и 1026, хотя, справедливости ради, - ручками можно вписать все что угодно.

А вот это - больше похоже на правду :rolleyes:

Тимур Рахимов · 13.03.2015

Ну да, «при удалении пользователь исчезает», а из баз данных различных приложений кто его будет удалять? И удаление папки из users, безусловно, стирает вместе с файлами оттуда все следы о их владельце, но посмотрите, что будет, если удалить владельца файла, а сам файл оставить. И, наконец, достаточно посмотреть на id всех пользователей в /etc/passwd, чтобы не осталось сомнений, что 1026 — это бывший пользователь DSM.

polanat · 13.03.2015

Автор (SergeS) говорил о ниспадающем списке юзеров в WinSCP - а это не что иное как Owner (Владелец). Опять повторюсь, если речь идёт о нетехнических пользователях, а о нормальных пользователях, создаваемых в DSM - то никаких следов типа 1026 оставаться не должно. Кстати под таким номером у меня это был plex. От Плекса после удаления пакета следы действительно остаются, но это юзер служебный. Однако при стандартном удалении юзера plex соответствующая запись из файлика /etc/passwd исчезает. Кстати та же папка /volume1/Plex совего владельца таки потеряла после его удаления.

 

PS Собственно никто не мешает провести пятиминутный эксперимент - стандартно создать юзера в DSM, сделать его владельцем какого-нибудь файлика и стандартно же удалить его предварително зафикстрова его номер в /etc/passwd ну и смотреть осталась ли цифровая запись в ниспадающем списке юзеров ;)

Тимур Рахимов · 13.03.2015

Ну да, по задумке-то всё должно удаляться вместе с пользователем (кроме id бывшего владельца в свойствах файла, тут это как раз оправданно), а на деле — фиг. Может, конечно, все приложения в идеальном мире и реагируют как надо на сообщения об удалении пользователя, стирая всё за собой, а вот мне пришлось голову ломать, как вычистить из базы данных забыл уже какого приложения остатки своего 1028, как сейчас помню. А заметил это всё я только потому, что из-за этих остатков само приложение стало спамить ошибками в /var/log/messages.

polanat · 13.03.2015

Короче, Вы меня убедили - Вы оказались правы - признаю свою ошибку (эксперимент таки не удержался и провёл ;) ) Цифровой номер удалённого юзера действительно остаётся в поле владельца.

Smoke74 · 28.04.2015

Коли тема про пользователей плавно перетекла сюда, задам вопрос тут:

1) как под консолью настроить срок действия учетной записи?

2) а права к приложениям?

 

Подозреваю сие данные хранятся в SQLite и редактируются через synouser --dbopen2 username, только как? ))))

Smoke74 · 30.04.2015

Отписался в саппорт, вот что ответили:

Dear Customer,

Thank you for your message to us.

Unfortunately we don't support any console/shell management. But you will find any tutorials to manage as linux user for right management in web.

Мол, дорогой пользователь, идите лесом, консоль мы не саппортим, курите маны в сети.