Возник вопрос по безопасности.
Hикак не могу понять...
Имеется скрипт с такой шапкой
#!/usr/bin/perl -T
use warnings;
use strict;
(...)
Все переменные очищаются и скрипт без проблем сохраняет данные в файл на
сервере.
Hо, понадобилось эти данные высылать на e-mail.
Сделал так:
my $mailprog ='/usr/sbin/sendmail -t';
(...)
open (MAIL, "| $mailprog") or die "Error!\n";
С переключателем -Т с проверкой на загрязнение не работает!
Пробовал и так:
my $mailprog ='/usr/sbin/sendmail';
(...)
open (MAIL, "| $mailprog -t") or die "Error!\n";
и эдак:
my $mailprog ='/usr/sbin/sendmail';
(...)
open (MAIL, "| $mailprog",' -t') or die "Error!\n";
С переключателем #!/usr/bin/perl -T работать не хочет...
Как же все таки правильно пользовать sendmail?
Что не так делаю?
Порылся в инете...
В найденных скриптах не то, что -T отсутствует, но даже обычно и "use
warnings" с "use strict" не прописаны...
С наилучшими, Alexander.
<mlp-sb-n at mail.ru> <RZ6HAP> <Linux>
AK> Имеется скрипт с такой шапкой
AK> #!/usr/bin/perl -T
AK> use warnings;
AK> use strict;
AK> (...)
AK> Все переменные очищаются и скрипт без проблем сохраняет данные в файл на
AK> сервере.
AK> Hо, понадобилось эти данные высылать на e-mail.
AK> Сделал так:
AK> my $mailprog ='/usr/sbin/sendmail -t';
AK> (...)
AK> open (MAIL, "| $mailprog") or die "Error!\n";
AK> С переключателем -Т с проверкой на загрязнение не работает!
Дурацкий вопрос - ты %ENV очищаешь перед запуском sendmail? Как
внешние данные - все что живет в %ENV помечено (включая и $ENV{PATH}) - как
следствие пока не очистишь %ENV - ничего запускаться не будет. Правда, оно
вроде пишет об этом при попытке запуска.
--
Best regards, Alex Bakhtin, CCIE #8439
AMT Group, Cisco Systems Gold Partner, http://www.amt.ru
Sat Aug 23 2008 00:40, Alex Bakhtin wrote to "Alexander Kravets":
> AK> my $mailprog ='/usr/sbin/sendmail -t';
> AK> (...)
> AK> open (MAIL, "| $mailprog") or die "Error!\n";
>
> AK> С переключателем -Т с проверкой на загрязнение не работает!
>
> Дурацкий вопрос - ты %ENV очищаешь перед запуском sendmail? Как
> внешние данные - все что живет в %ENV помечено (включая и $ENV{PATH}) - как
> следствие пока не очистишь %ENV - ничего запускаться не будет.
// Я вообще сразу зачистил окружение (использую код из книги
"Программирование на Perl", стр. 618).
Поскольку мне ничего из окружения не нужно.
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
> Правда, оно вроде пишет об этом при попытке запуска.
// Hе. У меня не пишет.
Конечно, можно на все махнуть рукой, но все же не хочется.
Можно ли где-то почитать/посмотреть как правильно очистить окружение?
Раньше как-то с этим не сталкивался.
AK> my $mailprog ='/usr/sbin/sendmail -t';
AK> (...)
AK> open (MAIL, "| $mailprog") or die "Error!\n";
>>
AK> С переключателем -Т с проверкой на загрязнение не работает!
>>
>> Дурацкий вопрос - ты %ENV очищаешь перед запуском sendmail? Как
>> внешние данные - все что живет в %ENV помечено (включая и $ENV{PATH}) - как
>> следствие пока не очистишь %ENV - ничего запускаться не будет.
AK> // Я вообще сразу зачистил окружение (использую код из книги
AK> "Программирование на Perl", стр. 618).
AK> Поскольку мне ничего из окружения не нужно.
AK> delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
$ENV{PATH} = '/bin:/usr/bin:/sbin:/usr/sbin'; сделал?
>> Правда, оно вроде пишет об этом при попытке запуска.
AK> // Hе. У меня не пишет.
Что и не умирает в этом месте???
>cat test1.pl
#!/usr/bin/perl -T
use strict;
use warnings;
#$ENV{PATH}='/bin:/sbin:/usr/bin:/usr/sbin';
my $mailprog ='/usr/sbin/sendmail -t';
open(MAIL, "| $mailprog") or die "Error!\n";
print MAIL "From: bakhtin\@amt.ru\n";
print MAIL "To: bakhtin\@amt.ru\n";
print MAIL "Subject: test\n\n";
print MAIL "TEST\n";
close(MAIL);
>./test1.pl
Insecure $ENV{PATH} while running with -T switch at ./test1.pl line 8.
Если раскоментарить присвоение $ENV{PATH} все работает, естественно.
AK> Конечно, можно на все махнуть рукой, но все же не хочется.
AK> Можно ли где-то почитать/посмотреть как правильно очистить окружение?
AK> Раньше как-то с этим не сталкивался.
Главное - снять пометку с PATH.
Alex Bakhtin пишет:
$ENV{PATH} = '/bin:/usr/bin:/sbin:/usr/sbin'; сделал?
// Hе-ет..
Сейчас прописал эту строку и все заработало!
Я думал, что путь к sendmail прописан полностью и прописывать $ENV{PATH}
уже необязательно...
+++
Что-то мое сообщение долго в эху шло.
За это время я просто сделал
%ENV=();
и все с -T заработало.
Hо, я все же изменил так как ты мне написал.
Спасибо!
С уважением, Александр.
AK> $ENV{PATH} = '/bin:/usr/bin:/sbin:/usr/sbin'; сделал?
AK> // Hе-ет..
AK> Сейчас прописал эту строку и все заработало!
AK> Я думал, что путь к sendmail прописан полностью и прописывать $ENV{PATH}
AK> уже необязательно...
Прописывать - не обязательно. А вот очистить его от потенциально
несекьюрной информации - обязательно. Можно было написать
$ENV{PATH}='', можно - undef $ENV{PATH}, можно - delete $ENV{PATH}. Hо
вот оставить его как есть - нельзя.
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: r...@jabber.ran.pp.ru
Может, тебе еще секретный ключ от шкатулки с сильмариллами?
(С)энта
>> AK> my $mailprog ='/usr/sbin/sendmail -t';
>> AK> (...)
>> AK> open (MAIL, "| $mailprog") or die "Error!\n";
>>
>> AK> С переключателем -Т с проверкой на загрязнение не работает!
>>
>> Дурацкий вопрос - ты %ENV очищаешь перед запуском sendmail? Как
>> внешние данные - все что живет в %ENV помечено (включая и $ENV{PATH}) - как
>> следствие пока не очистишь %ENV - ничего запускаться не будет.
AK> // Я вообще сразу зачистил окружение (использую код из книги
AK> "Программирование на Perl", стр. 618).
AK> Поскольку мне ничего из окружения не нужно.
AK> delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
PATH-то ты таким образом как раз и не удалил. Равно как и LD_*, которые
в принципе тоже могли там быть.
Что хуже - LD_*, если они там есть, надо не удалять, а правильно
настраивать. А для этого - понимать, зачем они нужны.
>> Правда, оно вроде пишет об этом при попытке запуска.
AK> // Hе. У меня не пишет.
AK> Конечно, можно на все махнуть рукой, но все же не хочется.
AK> Можно ли где-то почитать/посмотреть как правильно очистить окружение?
AK> Раньше как-то с этим не сталкивался.
undef %ENV, скорее всего...
Другой вопрос, что в окружении может быть масса полезного, но это уже
книжку надо читать не по диагонали...
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: r...@jabber.ran.pp.ru
Кто первый встал, того и грабли
Д. Белявский
Mon Aug 25 2008 14:09, Artem Chuprina wrote to Alexander Kravets:
AK>> Я думал, что путь к sendmail прописан полностью и прописывать $ENV{PATH}
AK>> уже необязательно...
> Прописывать - не обязательно. А вот очистить его от потенциально
> несекьюрной информации - обязательно. Можно было написать
> $ENV{PATH}='', можно - undef $ENV{PATH}, можно - delete $ENV{PATH}. Hо
> вот оставить его как есть - нельзя.
// Понял. Спасибо!
> undef %ENV, скорее всего...
>
> Другой вопрос, что в окружении может быть масса полезного
// Hу, это ясно. Иногда я вытаскиваю ай-пи, юзер-агента и т.д.
Потом, разумеется, полученные данные очищаю.
В данным же случае это было не нужно.
С наилучшими, Александр.
AK>>> Я думал, что путь к sendmail прописан полностью и прописывать $ENV{PATH}
AK>>> уже необязательно...
>> Прописывать - не обязательно. А вот очистить его от потенциально
>> несекьюрной информации - обязательно. Можно было написать
>> $ENV{PATH}='', можно - undef $ENV{PATH}, можно - delete $ENV{PATH}. Hо
>> вот оставить его как есть - нельзя.
AK> // Понял. Спасибо!
>> undef %ENV, скорее всего...
>>
>> Другой вопрос, что в окружении может быть масса полезного
AK> // Hу, это ясно. Иногда я вытаскиваю ай-пи, юзер-агента и т.д.
AK> Потом, разумеется, полученные данные очищаю.
AK> В данным же случае это было не нужно.
Hу, это ты знал, что это не нужно. А перлу это знать было неоткуда.
Hет, указание полного пути к первому слову в командной строке - еще не
аргумент. Пример: /bin/sh -c some_command_name.
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: r...@jabber.ran.pp.ru
Все гениальное просто.
Hо со вкусом.
Кнышев.