Запуск сценария perl из сценария оболочки - PullRequest
3 голосов
/ 15 сентября 2011

Я написал сценарий оболочки, который делает вещи на Centos64

В конце этого скрипта я запускаю Perl-скрипт.

Отлично работает как root (я установил модули perl), но когда я запускаю его как системный пользователь

Я получаю сообщение:

./UserActivityReport.sh Can't locate MIME/Lite.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /optreports/sendmailUAR.pl line 3. BEGIN failed--compilation aborted at /opt/reports/sendmailUAR.pl line 3.

Как будто модули не были установлены для пользователя ...

Я запускаю сценарий с этой командой в моем сценарии оболочки:

/usr/bin/perl  /opt/reports/sendmailUAR.pl

Почему он не работает?

ПРИМЕЧАНИЕ. Я не могу установить модули perl с пользователем системы.

=== Вот и вы:

perl -MMIME::Lite -MData::Dumper -e'print Dumper \%INC'
$VAR1 = {
          're.pm' => '/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/re.pm',
          'warnings/register.pm' => '/usr/lib/perl5/5.8.8/warnings/register.pm',
          'XSLoader.pm' => '/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/XSLoader.pm',
          'IO/Handle.pm' => '/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/IO/Handle.pm',
          'MIME/Types.pm' => '/usr/lib/perl5/site_perl/5.8.8/MIME/Types.pm',
          'SelectSaver.pm' => '/usr/lib/perl5/5.8.8/SelectSaver.pm',
          'IO/Seekable.pm' => '/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/IO/Seekable.pm',
          'warnings.pm' => '/usr/lib/perl5/5.8.8/warnings.pm',
          'File/Basename.pm' => '/usr/lib/perl5/5.8.8/File/Basename.pm',
          'Fcntl.pm' => '/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/Fcntl.pm',
          'IO.pm' => '/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/IO.pm',
          'Symbol.pm' => '/usr/lib/perl5/5.8.8/Symbol.pm',
          'bytes.pm' => '/usr/lib/perl5/5.8.8/bytes.pm',
          'MIME/Type.pm' => '/usr/lib/perl5/site_perl/5.8.8/MIME/Type.pm',
          'Carp.pm' => '/usr/lib/perl5/5.8.8/Carp.pm',
          'MIME/Base64.pm' => '/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/MIME/Base64.pm',
          'Exporter/Heavy.pm' => '/usr/lib/perl5/5.8.8/Exporter/Heavy.pm',
          'File/Spec/Unix.pm' => '/usr/lib/perl5/5.8.8/File/Spec/Unix.pm',
          'FileHandle.pm' => '/usr/lib/perl5/5.8.8/FileHandle.pm',
          'strict.pm' => '/usr/lib/perl5/5.8.8/strict.pm',
          'Exporter.pm' => '/usr/lib/perl5/5.8.8/Exporter.pm',
          'vars.pm' => '/usr/lib/perl5/5.8.8/vars.pm',
          'MIME/Lite.pm' => '/usr/lib/perl5/site_perl/5.8.8/MIME/Lite.pm',
          'MIME/QuotedPrint.pm' => '/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/MIME/QuotedPrint.pm',
          'File/Spec.pm' => '/usr/lib/perl5/5.8.8/File/Spec.pm',
          'overload.pm' => '/usr/lib/perl5/5.8.8/overload.pm',
          'IO/File.pm' => '/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/IO/File.pm',
          'Mail/Address.pm' => '/usr/lib/perl5/site_perl/5.8.8/Mail/Address.pm',
          'Data/Dumper.pm' => '/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/Data/Dumper.pm'

};

Ответы [ 3 ]

2 голосов
/ 15 сентября 2011

В одном из комментариев вы разместили каталог со следующим списком:

[root~]# ls -l /usr/lib/perl5/site_perl/5.8.8/
total 60
drwxr-x--- 3 root root 4096 Sep 14 13:09 Date
drwxr-x--- 3 root root 4096 Sep 14 13:09 Email
drwxr-x--- 4 root root 4096 Sep 14 13:10 Mail
drwxr-x--- 2 root root 4096 Sep 14 13:10 MIME
drwxr-x--- 2 root root 4096 Sep 15 06:30 OLE
drwxr-x--- 2 root root 4096 Sep 15 06:30 Parse
drwxr-x--- 2 root root 4096 Sep 14 13:10 Pod
drwxr-x--- 3 root root 4096 Sep 15 06:30 Spreadsheet
drwxr-x--- 2 root root 4096 Sep 14 13:09 Time
-r--r--r-- 1 root root 6500 Aug 21 07:19 version.pm
-r--r--r-- 1 root root 9887 Aug 21 07:12 version.pod

Должно быть совершенно очевидно, что пользователи, отличные от root, не имеют доступа к этим файлам.Вероятно, вам следует провести более тщательный аудит, выполнив циклы по всем @INC и изменив разрешения при необходимости, но для начала find /usr/lib/perl5/site_perl/5.8.8 -type d -exec chmod a+rx {} \;

1 голос
/ 15 сентября 2011

MIME::Lite в /usr/lib/perl5/site_perl/5.8.8/MIME/Lite.pm и /usr/lib/perl5/site_perl/5.8.8 в системном @INC пути.

Как пользователь system проверьте, что вы можете прочитать этот файл:

cat /usr/lib/perl5/site_perl/5.8.8/MIME/Lite.pm

Если вы получаете сообщение об ошибке, проверьте права доступа к файлу и родительским каталогам.

В противном случае запустите скрипт как system с strace и посмотрите, почему он не может найти файл модуля.

1 голос
/ 15 сентября 2011

Могу поспорить, что umask root таков, что по умолчанию файлы не доступны для чтения.

find /usr/lib/perl5 -not -perm -o=r 

Все перечисленные файлы не доступны для чтения (и, вероятно, должны быть). Вы можете исправить это так

find /usr/lib/perl5 -not -perm -o=r -exec chmod o+r {} +

Если вы хотите, чтобы все файлы соответствовали первой команде, доступной для чтения всем.

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