Если мы решим написать скрипт для автоматизированного добавления системных пользователей, то неминуемо столкнемся с двумя вопросами.

1. Как установить пользователю пароль?
Утилиты adduser и passwd являются интерактивными и мы не сможем передать им пароль параметром. Прийдется либо вводить пароль вручную, либо исхитрятся с expect. На помощь может прийти неинтерактивная утилита pw. Если вызывать pw с флагом “-h 0″, то утилите можно передавать пароль из командной строки, примерно так: “echo secret | pw useradd someuser -h 0″.

2. Как сгенерировать пароль?
Для генерации пароля можно воспользоватся утилитами типа pwgen, но для этого потребуется установить pwgen из /usr/ports/. Чтобы ничего не устанавливать можно воспользоваться штатными средствами и использовать /dev/urandom в качестве источника для генерации символов. Команда генерации пароля из восьми символов будет выглядеть так: “cat /dev/urandom | tr -dc a-zA-Z0123456789 | head -c 8″. Я намеренно использовал конструкцию a-zA-Z0123456789, а не a-zA-Z0-9. Дело в том, что по пока непонятным мне причинам при задании 0-9 в некоторых случаях в паролях присутствует символ “*” (проверялось на FreeBSD 6.2, как в остальных версиях – не знаю).

Теперь мы можем перейти к написанию скрипта для добавления системных пользователей. Приведу пример самого простенького скрипта.

#!/usr/local/bin/bash

if [ -z "$3" ]; then
echo "usage: $0   "
exit
fi

u_name="$1"
u_class="$2"
u_shell="$3"
pass=`cat /dev/urandom | tr -dc a-zA-Z0123456789 | head -c 8`

echo "$pass"|pw useradd -n $u_name -L $u_class -s $u_shell -h 0
mkdir /home/$u_name
chown $u_name:$u_name /home/$u_name
echo "User $u_name succesfully added with password $pass"