FreeBSD глазами администратора

         

Еще что-нибудь


Если вам приходится часто выполнять какую-нибудь нестандартную операцию регистрации нового пользователя (например, "почтового юзера" или фиктивного юзера для запуска коммуникационной программы), можно написать свою программу, которая будет выполнять только поставленную задачу, но, зато, не сделает ничего лишнего и не будет приставать с лишними вопросами как adduser.

Написание такой программы - не такая уж сложная задача, как может показаться на первый взгляд.

Ниже приводится пример программы, написанной на языке "интерпретатора комманд" sh, для регистрации "почтового юзера". Естественно, это не столько рабочая программа, сколько пример, который должен вдохновить вас на самостоятельное творчество. :-)

Некоторые пояснения. Программа использует системную утилиту id, которая выводит некоторую информацию о заданном юзере (причем, в качестве аргумента этой утилиты может использоваться как name юзера, так и его user ID). В данном случае она используется только для проверки - зарегистрирован ли уже такой юзер в системе.
Форма - id ... >/dev/null 2>&1
используется для того, чтобы подавить весь вывод этой утилиты, который, при использовании ее внутри программы, будет совершенно лишним.

#!/bin/sh # Эти переменные вынесены в начало, чтобы их можно было легко поменять # при необходимости shell=/bin/date # имя Shell для регистртруемого юзера group=2000 # group ID для регистрируемого юзера uid=2000 # user ID, начиная с которого программа ищет # ближайший свободный # найти ближайший не занятый user ID while (true) ; do if (id $uid >/dev/null 2>&1) then uid=$(($uid+1)) else break fi done # Запросить Name для нового юзера и проверить его на уникальность, # если юзер с таким Name уже зарегистрирован в системе, сообщить # об этом и повторить вопрос while (true) ; do read -p 'User Name: ' name if (id $name >/dev/null 2>&1) then echo 'user "'$name'" already exists' else break fi done # Запросить "реальное имя" юзера (чтобы записать его в General information) read -p 'Real name of "'$name'" : ' rname # Сформировать учетную карточку и вписать ее в master.passwd echo $name'::'$uid':'$group'::0:0:Postbox for '$rname'::'$shell >> /etc/master.passwd # Запустить pwd_mkdb, чтобы сделать изменения во всех файлах # БД учетных карточек pwd_mkdb -p /etc/master.passwd # Запросить секретный пароль для нового юзера passwd $name # Если необходимы еще какие-то действия - создать директорию или внести # изменения в другие файлы, то это можно сделать далее в той же программе. # Но, в данном случае, больше ничего делать не нужно.

Иван Паскаль

Comments:

Copyright ©



Содержание раздела