Ядро Linux работает с идентификаторами, присвоенными пользователям. Каждый пользователь имеет личный числовой идентификатор user id или uid, потому что обрабатывать числа для компьютера проще, чем строковые имена пользователей. Отдельная база данных, вынесенная за пределы ядра, связывает текстовое имя пользователя username (аккаунт), с соответствующими user id. База данных хранит также немало полезной информации о каждом пользователе.
Для создания пользователя надо добавить сведения о нем в базу данных пользователей и создать домашний каталог для него. Также возможна установка начальных файлов настроек.
Большинство дистрибутивов Linux имеют программу для создания пользователей. Хуже то, что такие программы везде разные. Есть две наиболее распространенные команды: adduser и useradd; возможно применение графического интерфейса. Пользователя можно добавить и в ручном режиме.
База данных о пользователях в Unix системах является текстовым файлом /etc/passwd (называется файл паролей (password file)), который хранит все имена пользователей и сведения о них. Каждому имени пользователя (логину) соответствует одна строка из семи полей, разделенных двоеточиями:
Имя пользователя в системе (его аккаунт).
Пароль (в зашифрованном виде).
Числовой user id.
Числовой group id.
Полное имя и другие сведения о пользователе.
Домашний каталог.
Login shell (программа, запускаемая при входе в систему).
Каждый пользователь может читать файл паролей, например для поиска имени другого пользователя. К тому же, такая возможность позволяет разлиным командам показывать имена полльзователей вместо их числовых мдентификаторов. Увы, зашифрованные пароли также доступны на чтение всем. Конечно, они зашифрованы, но теоретически (да и практически, судя по опыту переводчика) это не проблема.
Многие Linux-системы применяют теневые пароли (shadow passwords). Это альтернативный путь хранения паролей: они пишутся в отдельный файл. /etc/shadow, который доступен уже только для root. Файл /etc/passwd вместо пароля будет во втором поле каждой строки хранить только специальный маркер. Любая программа, которой надо проверять пароли, выполняется с setuid от имени root и может обращаться к затененному файлу паролей. Нормальные программы, которым нужны только другие поля из файла паролей, не смогут получить пароли.
На большинстве систем не имеет значения, что числовые значения идентификаторов пользователя и группы, но если Вы используете сетевую файловую систему (Network filesystem, NFS), Вы должны иметь одни и те же uid и gid на всех системах. Это потому, что NFS также идентифицирует пользователей по числовым uid. Если Вы не используете NFS, Вы можете позволить вашему инструменту создания пользоваьелей выбирать их автоматически.
Если Вы используете NFS, вы должны изобрести механизм для синхронизирования информации о пользователях и группах. Одним из вариантов является система NIS.
Вы должны избегать многократно использовать числовой uid (и текстовое имя пользователя), потому что новый владелец uid (или имени пользователя) может получить доступ к файлам старого владельца (почте, например).
Когда создается домашний каталог для нового пользователя, он инициализируется файлами из каталога /etc/skel. Администратор системы может создавать файлы в /etc/skel , которые будут обеспечивать хорошую заданную по умолчанию среду для пользователей. Например, он мог бы создавать конфигурацию /etc/skel/.profile, которая устанавливает системную переменную EDITOR равной некоторому редактору, который является дружественным к новым пользователям.
Однако, обычно самое лучшее пробовать хранить в /etc/skel как можно меньше, так как будет почти невозможно модифицировать файлы существующих пользователей. Например, если имя дружественного редактора измененится, все существующие пользователи должны будут отредактировать свои .profile. Администратор системы мог бы попробовать сделать это автоматически с применением какого-либо скрипта, но это равнозначно попытке разрушить чей-то файл.
Всякий раз, когда возможно, лучше поместить глобальную конфигурацию в глобальные файлы, типа /etc/profile. Этим путем можно модифицировать все без того, чтобы разрушить собственные установки пользователей.
Чтобы создавать нового пользователя вручную, выполните следующее:
Отредактируйте файл паролей /etc/passwd редактором vipw и добавьте строку для нового пользователя. Будьте внимательным с синтаксисом. Не редактируйте каким попало редактором! vipw блокирует файл, так, чтобы другие команды не пробовали модифицировать его в то же самое время. Вы должны записать в поле пароля `* ' так, чтобы было невозможно войти.
Точно так же редактируйте /etc/group редактором vigr, если надо создать новую группу
Создайте основной каталог пользователя командой mkdir.
Скопируйте файлы из /etc/skel в домашний каталог нового пользователя.
Смените владельца и права доступа для свежесозданных файлов и
каталогов командами chown и chmod
. Опция -R весьма полезна. Правильные разрешения
немного разные для разных систем, но обычно следующие команды делают то, что
надо:
cd /home/newusername
chown -R username.group .
chmod -R go=u,go-w .
chmod go= .
Установите пароль командой passwd.
После того, как Вы устанавливаете пароль в последнем шаге, пользователь сможет работать. Вы не должны устанавливать пароль, пока все остальное не сделано, иначе пользователь может неосторожно войти, в то время как вы еще копируете файлы.
Иногда необходимо создать псевдопользователя. Такой пользователь никогда не используется как обычный. Например, чтобы установить анонимный сервер FTP станция (так, чтобы любой мог сгружать и загружать файлы без необходимости иметь логин в системе), Вы должны создать пользователя ftp. В таких случаях, пароль задавать не надо. Значит, файл пароля имеет всю информацию относительно пользователя за исключением его пароля.