Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Переключатель -T и sendmail

0 views
Skip to first unread message

Alexander Kravets

unread,
Aug 22, 2008, 4:27:26 PM8/22/08
to
Всех приветствую!

Возник вопрос по безопасности.
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>

Alex Bakhtin

unread,
Aug 22, 2008, 4:40:31 PM8/22/08
to
>>>>> "AK" == Alexander Kravets writes:
Привет,

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

Alexander Kravets

unread,
Aug 24, 2008, 12:38:26 PM8/24/08
to
Привет!

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е. У меня не пишет.

Конечно, можно на все махнуть рукой, но все же не хочется.
Можно ли где-то почитать/посмотреть как правильно очистить окружение?
Раньше как-то с этим не сталкивался.

Alex Bakhtin

unread,
Aug 24, 2008, 1:31:06 PM8/24/08
to
>>>>> "AK" == Alexander Kravets writes:
Привет,

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.

Alexander Kravets

unread,
Aug 25, 2008, 3:14:30 AM8/25/08
to
Привет!

Alex Bakhtin пишет:


$ENV{PATH} = '/bin:/usr/bin:/sbin:/usr/sbin'; сделал?

// Hе-ет..
Сейчас прописал эту строку и все заработало!
Я думал, что путь к sendmail прописан полностью и прописывать $ENV{PATH}
уже необязательно...

+++

Что-то мое сообщение долго в эху шло.
За это время я просто сделал
%ENV=();
и все с -T заработало.

Hо, я все же изменил так как ты мне написал.

Спасибо!

С уважением, Александр.

Artem Chuprina

unread,
Aug 25, 2008, 6:09:10 AM8/25/08
to
Alexander Kravets -> Alex Bakhtin @ Mon, 25 Aug 2008 07:14:30 +0000 (UTC):

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

Может, тебе еще секретный ключ от шкатулки с сильмариллами?
(С)энта

Artem Chuprina

unread,
Aug 25, 2008, 7:33:13 AM8/25/08
to
Alexander Kravets -> Alex Bakhtin @ Sun, 24 Aug 2008 16:38:26 +0000 (UTC):

>> 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

Кто первый встал, того и грабли
Д. Белявский

Alexander Kravets

unread,
Aug 26, 2008, 1:42:41 PM8/26/08
to
Приветствую!

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у, это ясно. Иногда я вытаскиваю ай-пи, юзер-агента и т.д.
Потом, разумеется, полученные данные очищаю.
В данным же случае это было не нужно.

С наилучшими, Александр.

Artem Chuprina

unread,
Aug 26, 2008, 3:54:32 PM8/26/08
to
Alexander Kravets -> Artem Chuprina @ Tue, 26 Aug 2008 17:42:41 +0000 (UTC):

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о со вкусом.
Кнышев.

0 new messages