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


Нелегко быть всемогущим


Перед тем как продолжить, давайте отвлечемся на несколько минут и скажем пару предостерегающих слов. У программ, написанных для системного администрирования, есть одна характерная черта, которая отличает их от всех остальных программ. В Unix и Windows NT/2000 они зачастую выполняются с повышенными привилегиями, т. е. с правами пользователей root или Administrator. А такая сила подразумевает ответственность. На нас, как на программистов, ложится дополнительная ответственность писать безопасные программы. Мы пишем программы, которые могут обходить (и обходят) ограничения безопасности, накладываемые на «простых смертных». Если мы не будем осторожными, менее «нравственные» личности смогут использовать «дыры» нашего кода в низких целях. Вот несколько моментов, о которых вы всегда должны помнить, применяя Perl в этих обстоятельствах.

Не делайте этого

Конечно же, используйте Perl. Но, по возможности, старайтесь избегать выполнения программ в привилегированном окружении. Большинство задач не требует привилегий пользователя root или Admi nistrator. Например, программа анализа журналов, вероятно, не должна выполняться с правами суперпользователя. Для выполнения этих автоматизированных действий создайте другого пользователя, наделенного меньшими привилегиями. Пусть у вас будет маленькая программа, наделенная привилегиями, которая будет передавать при необходимости данные этому пользователю, и затем этот пользователь будет выполнять анализ.

Избавьтесь от своих привилегий как можно быстрее

Иногда невозможно избежать необходимости запускать сценарий с правами привилегированного пользователя. Например, созданная вами программа доставки почты может потребовать возможности записывать в файл от имени любого пользователя в системе. Программы, подобные этой, должны отказываться от своего «всемогущества» как можно раньше во время своего выполнения.

В программах на Perl, выполняющихся в Unix или Linux, можно установить переменные $< и $>:

# Навсегда избавиться от привилегий ($<,$>} = (getpwnam('nobody'),getpwnam('nobody'));




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



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