Perl для системного администрирования


Информация о пользователях в Unix - часть 6


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

use User::pwent; use File::stat;

ft замечание: этот код очень сильно загрузит машину, если

# домашние каталоги монтируются автоматически

while($pwent = getpwent()){

# убеждаемся, что это действительно каталог, даже если

# он спрятан за символическими ссылками

Sdirinfo = stat($pwent->dir."/."); unless (defined $dirinfo){

warn "Невозможно получить информацию о ".$pwent->dir.": $!\n"; next;

}

warn «Домашний каталог пользователя ".$pwent->name." не имеет в

ладельца с корректным uid (". $dirinfo->uid." вместо ".$pwent->uid.")!\n"

# ($dirinfo->uid != $pwent->uid);

# каталог может быть доступным всем для записи, если

# у него установлен «бит-липучка" (т. е. 01000),

# подробности в странице руководства по chraod

warn $pwent->name."'s homedir is world-writable!\n"

if ($dirinfo->mode & 022 and (!$stat->mode & 01000));

}

endpwent();

Этот пример на вид несколько отличается от предыдущих, поскольку в нем используются два замысловатых модуля Тома Кристиансе-на (Tom Christiansen): User: :cweit и FiJe: :stai. Эти модули изменяют функции getpwcrH() и stat(), заставляя их возвращать значения, отличные от ранее упомянутых. Когда загружены модули Fi le: : stat, эти функции возвращают объекты вместо списков или скалярных значений. У каждого объекта есть метод, названный по имени поля, которое было бы возвращено в списочном контексте. Поэтому такой код:

$gid = (stat("filena(ne"))[5]:

можно переписать гораздо понятнее :

use File;:stat;

$stat = stat("filename"):

$gid = $stat->gid:

или даже так:

use File;:stat;

$gid = stat("filename")->gid;

Командный интерпретатор пользователя

Последнее поле классического файла паролей - это поле, соответствующее командному интерпретатору пользователя. Обычно это один из интерпретаторов (sh, csh, tcsh, ksh, zsh), но это может быть и путь к любой исполняемой программе или сценарию. Время от времени, некоторые ради шутки (но наполовину всерьез) устанавливают в качестве своего командного интерпретатора по умолчанию интерпретатор Perl. По крайней мере, в один интерпретатор (zsh) хотят всерьез встроить интерпретатор Perl, но этого пока еще не случилось. Тем не менее, были предприняты серьезные попытки создать командный интерпретатор Perl shell (http:/ /www.focusrese-arch.com/gregor/psh/), а также встроить Perl в редактор Emacs, который легко может заменить целую операционную систему (http:// john-edwin-tobey.org/perlmacs/1).




- Начало -  - Назад -  - Вперед -



Книжный магазин