Структура хранения данных о пользователе в Linux. Файл /etc/passwd
Как упоминалось ранее, (в статье про то, как можно посмотреть список пользователей на компьютере под Linux), есть файл /etc/passwd , в котором хранятся основные данные всех пользователей Linux. В этой статье подробно рассмотрим, что это за данные и в каком формате они записываются и хранятся. Файл /etc/passwd — обычный текстовый файл и его можно открыть, посмотреть и изменить, если есть права доступа к нему. Обычно эти права есть у пользователя root .
Содержимое файла /etc/passwd
Если отрыть и посмотреть содержимое файла /etc/passwd , то можно увидеть, что он состоит из строк, которые начинаются с имени пользователя, после которого через знак двоеточия : следуют ряд текстовых записей. Некоторые записи могут отсутствовать, и тогда двоеточия идут одним за другим. Всего в одной строке шесть двоеточий, разделяющих семь записей, относящихся к одному пользователю. В одной строке содержится информация только об одном пользователе. Так по количеству строк можно определить, сколько всего пользователей зарегистрировано на данной машине.
Структура записей о пользователе Linux в файле /etc/passwd
Итак, разберём поля, относящиеся к пользователю в этом файле. Как было указано их ровно семь:
login : password : UID : GID : GECOS : home : shell
Поле login
Поле login содержит регистрационное имя (или логин) пользователя. Регистрационные имена должны быть уникальными и представлять собой строки не длиннее 32 символов (любые, кроме двоеточия и символа новой строки). По сути дела, имя пользователя — это его короткий и легко запоминаемый псевдоним, который используется при входе в систему и часто включается в адреса электронной почты.
Поле password
Поле password предназначено для хранения пароля пользователя. Но хранить его в явном виде, да ещё и все пароли в одном месте, не безопасно. Поэтому в этом поле обычно стоит символ x , вместо паролей хранятся их хэши, и не в этом поле, а в специальном файле /etc/shadow . Таким образом, даже если кому-то удастся получить файл /etc/passwd , то паролей пользователей в нём нет и требуется ещё файл /etc/shadow , в котором хранятся хэши паролей (зашифрованные записи самих паролей). То есть пароль пользователя в явном виде не знает даже администратор. Можно конечно порадоваться, но админ всегда может поменять ваш пароль и войти с этим новым паролем на компьютер. Так что root — всё равно имеет доступ ко всему на компьютере. (Другое дело, что при смене пароля придётся объяснять пользователю, почему он вдруг не может войти под своим логином, но это уже другая история.) 😉
Поле UID
Поле UID содержит идентификатор пользователя. Идентификатор пользователя — это число от 0 до 2 32 -1. Пользователь с идентификатором 0 (обычно root ) называется суперпользователем и имеет право на выполнение любых операций в системе. Принято соглашение о выделении «специальным» пользователям ( bin , daemon ), назначение которых — только запуск определённых программ, маленьких идентификаторов (меньше 100 или, в некоторых дистрибутивах Linux, меньше 500). По UID в некоторых программах можно определить, что за пользователь совершает (или совершил (в логах)) какое-либо действие. В системе могут существовать несколько пользователей с одним идентификатором. Это нередко используется взломщиками, когда они после проникновения в систему создают себе учётную запись с UID =0. В результате они выглядят как обычные пользователи, но на самом деле имеют права root .
Поле GID
Поле GID содержит идентификатор группы пользователя. Один пользователь в UNIX может принадлежать к одной или нескольким группам, которые используются для задания прав более чем одного пользователя на тот или иной файл. Максимальное количество групп, в которых может состоять один пользователь, разное в разных вариантах системы. Список групп с их участниками задаётся в /etc/group . В файле /etc/passwd указывается идентификатор группы по умолчанию.
Поле GECOS
Поле GECOS хранит вспомогательную информацию о пользователе (номер телефона, адрес, полное имя и так далее). Оно не имеет чётко определённого синтаксиса.
Поле home
Поле home содержит путь папке пользователя (домашнему каталогу). После входа в систему пользователь оказывается в своём домашнем каталоге, в котором хранятся данные пользователя: файлы, логи и прочая информация, относящаяся к работе этого пользователя на данном компьютере. Если на момент входа в систему домашний каталог отсутствует, то система выдаёт сообщение об ошибке и отказывается допустить пользователя к командной строке. Такое поведение не характерно для GNU/Linux; в большинстве дистрибутивов этой ОС просто выводится предупреждение, после чего пользователь попадает в каталог « / ». В целях безопасности это можно изменить посредством установки параметра DEFAULT_HOME в файле /etc/login.defs в значение no .
Для информации:
В → этой статье предложено несколько способов того, как получить путь к домашней директории пользователя.
Поле shell
Поле shell содержит данные по регистрационной оболочке, подключенной к учётной записи пользователя. В поле регистрационной оболочки задаётся shell , то есть интерпретатор командной строки. Здесь может быть указана любая программа, и пользователь может сам выбирать для себя наиболее подходящую при помощи команды chsh . Тем не менее, некоторые системы в целях безопасности требуют, чтобы суперпользователь root явно разрешил использовать приложение в качестве интерпретатора командной строки. Для этого используется специальный файл /etc/shells , содержащий список допустимых оболочек. Для того, чтобы отключить доступ пользователя к shell , в это поле можно ввести значение /bin/false . Таким образом, пользователь при попытке зайти в систему через консоль будет попадать на обработчик /bin/false вместо запуска оболочки shell заданной в системе по умолчанию, например /bin/bash или /bin/date .
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! 😉
Где хранить файлы всех пользователей
Подскажите, вот для личных файлов (тексты, картинки, фильмы) пользователей предназначены папки /home/username. А где хранить те же самые тексты, картинки, фильмы чтобы они были доступны не одному, а всем пользователям и можно ли эту папку смонтировать на отдельном диске?
Хм, любую папку, например, chmod 777 /home/shared Примонтировать диск туда же никто не мешает.
Так /data /users или /home/shared По стандарту как положено? И ещё вопрос, как можно сделать быстрый доступ к этой папке с рабочего стола KDE?
FHS про это ничего не говорит. Куда хотите, туда и пихайте.
существуют симлинки на директории и хранящуюся в /var папку с контентом легко сделать доступной для всех заводимых пользователей прописав в скрипты создания еще и симлинк. ну а у тех кто уже есть сделать это от рута скриптом.
А где хранить те же самые тексты, картинки, фильмы чтобы они были доступны не одному, а всем пользователям
можно ли эту папку смонтировать на отдельном диске?
В папках храните на Виндовз 7 Максимальной.
Ну вообще я раньше примерно так и делал. Монтировал раздел в /mnt/data, создавал на нём папки для разнотипных данных, а потом:
ln -s «/mnt/data/sound» /home/username/«Музыка»
ln -s «/mnt/data/video» /home/username/«Видео»
ln -s «/mnt/data/pictures» /home/username/«Изображения»
ln -s «/mnt/data/raw» /home/username/«Неразобранное»
ln -s «/mnt/data/docs» /home/username/«Документы»
ln -s «/mnt/data/vm» /home/username/«Виртуальные машины»
Сейчас вопрос где это правильно должно находиться: в /mnt в /home или в /var И что за скрипты для автоматического создания симплинков? И нужны ли симплинки?
Фильмы — в /Cinema, всякие данные — в /Data, музыка — в /Music, а ~ — только для настроек.
Боюсь, если директории обзывать по-русски, да с кавычками, да с пробелами, проблем не оберешься.
Боюсь, если директории обзывать по-русски, да с кавычками, да с пробелами, проблем не оберешься.
А ты не бойся. Всё работает.
Вот только со скриптами придется быть осторожным. И при удаленном соединении будут косяки: попробуй-ка прочитать название директории при подключении по ssh из системы с другой локалью.
судя по черновику hfs 3 — /srv сам недавно задавался тем же вопросом.
Боян
Re: Боян
Вот только со скриптами придется быть осторожным. И при удаленном соединении будут косяки: попробуй-ка прочитать название директории при подключении по ssh из системы с другой локалью.
Надо просто писать скрипты нормально. А по поводу ssh — поищи, здесь где-то было решение.
Зачем вам делать симлинки в домашние директории ?
Создайте к примеру точку монторивания /media/DATA и смонтируйте в нее некоторый раздел, который должен быть доступен на запись всем., установив соответствующие права.
Все точки монтирования, расположенные в /media будут видны в списке мест на левой панели файловых менеджеров gnome или kde., так же на рабочем столе будет иконка. Вам останется только обговорить с пользователями, что на этом ресурсе находятся общие файлы.
Если же хотите сделать симлинки — то напишите небольшой скрипт и добавьте его в /etc/bash/bashrc:
ln -fs "/mnt/data/sound" /home/username/"Музыка" ln -fs "/mnt/data/video" /home/username/"Видео" ln -fs "/mnt/data/pictures" /home/username/"Изображения" ln -fs "/mnt/data/raw" /home/username/"Неразобранное" ln -fs "/mnt/data/docs" /home/username/"Документы" ln -fs "/mnt/data/vm" /home/username/"Виртуальные машины"
Но создание символьных ссылок в таком случае будет выполняться при каждом входе пользователя. эти строки можно убрать из bashrc Так же для новых пользователей стоит отредактировать директорию /etc/skel и создать в ней символьные ссылки на нужные вам директории, содержимое этой директории переносится в домашний каталог созданного пользователя.