Сбои команд при запуске bash из perl, но не при запуске из командной строки, проблемы с разрешениями - PullRequest
0 голосов
/ 10 августа 2011

Я создал bash-скрипт, который должен запускаться из perl-скрипта.Когда я запускаю bash прямо из терминала, он работает как шарм.Но при попытке запустить bash из моего PERL-скрипта я получаю много ошибок разрешения.

Действия, которые я выполняю, - это создание файлов / каталогов / перезапуск приложений / и т. Д.Как мне настроить, чтобы perl-скрипт мог выполнять bash без ошибок разрешения.

Я выполняю команду из perl следующим образом:

system($file, $arg);

Пример команд в bash:

exec 1>$1.log
exec 2>$1_error.log

mkdir /opt/$1

Пример из журнала ошибок для приведенных выше команд:

[Wed Aug 10 18:17:17 2011] [error] [client 192.168.1.100] /opt/otrsadm/newinstance.sh: line 3: comp.log: Permission denied
[Wed Aug 10 18:17:17 2011] [error] [client 192.168.1.100] /opt/otrsadm/newinstance.sh: line 4: comp_error.log: Permission denied
[Wed Aug 10 18:17:17 2011] [error] [client 192.168.1.100] mkdir: 
[Wed Aug 10 18:17:17 2011] [error] [client 192.168.1.100] cannot create directory `/opt/comp'
[Wed Aug 10 18:17:17 2011] [error] [client 192.168.1.100] : Permission denied
[Wed Aug 10 18:17:17 2011] [error] [client 192.168.1.100]

То, что я делаю, - это создание совершенно нового экземпляра приложения на Apache.Это означает, что bash создает необходимый каталог, копирует приложение в этот каталог, создает новую базу данных и загружает дамп шаблона, копирует специфичные для приложения файлы конфигурации для apache и обменивается некоторыми строками в этом файле и т. Д.

Я совершенно новичок в этом виде деятельности, поэтому любая возможная помощь высоко ценится.

Ответы [ 4 ]

2 голосов
/ 10 августа 2011

Ваш скрипт работает с теми же правами, что и процесс Apache. В соответствии с надлежащей практикой безопасности ваш веб-сервер должен иметь как можно меньше разрешений на изменение файлов, которые могут сами запускаться веб-сервером.

Поскольку это звучит как то, что вы хотите сделать, трюк состоит в том, чтобы как можно меньше ослабить разрешения, чтобы получить желаемый результат.

Моя рекомендация - заглянуть в программу sudo. Он может запускать программы как более привилегированные пользователи и предоставляет некоторые разумные средства управления доступом. Основная идея заключается в создании сценария, который принадлежит и доступен для записи только пользователю root. Затем разрешите пользователю apache (или httpd, или тому, что ваша система называет пользователем, на котором запущен Apache), выполнить этот сценарий через sudo как пользователь с правами на запись в /opt. Если вам удастся выполнить скрипт как пользователь с меньшими правами, чем root, это тоже хорошо.

При условии, что у вас есть хорошая проверка ошибок в вашем скрипте и вы соблюдаете все правила безопасности, вы будете в достаточной безопасности.

Все это говорит, решительно подумайте о том, чтобы заплатить опытному разработчику, настроенному на безопасность, чтобы помочь вам с его настройкой. Настройка системы, подобной этой, требует другого подхода к безопасности слов, и вы не можете получить ответ от SO. В противном случае вам, возможно, придется объяснить своему начальнику, как 13-летний ребенок из какой-то случайной страны удалил все данные ваших компаний или, что еще хуже, опубликовал их в BitTorrent.

2 голосов
/ 10 августа 2011

Я предполагаю, что ваш текущий рабочий каталог неверен в вашем Perl-скрипте - вы пытаетесь выполнить команды bash в каталоге, где у вас нет прав для создания каталогов.

1 голос
/ 10 августа 2011

В вашем журнале есть сообщение об ошибке, разбитое по строкам:

mkdir: 
cannot create directory `/opt/comp'
: Permission denied

Возможно ли, что ваш Perl-скрипт вызывает ваш bash-скрипт с аргументом, который содержит символ новой строки? (Хотя это не объясняет, почему «mkdir:» стоит на одной строке.)

У вас есть разрешение на запись /opt?

0 голосов
/ 10 августа 2011

изменить разрешение каталога opt на 777 (чтение / запись / выполнение всеми)

chmod 777 / opt /

Я думаю, что это может решить твою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...