8.2. Отделение обычных пользователей от системных
Проблема
В любой системе Linux, наряду с учетными записями обычных пользователей, существуют системные учетные записи (root, uucp, daemon и т. д.). В файле /etc/passwd эти две категории не отделяются друг от друга. Как отделить учетные записи «живых» пользователей от системных учетных записей?
Решение
Воспользуйтесь схемой нумерации идентификаторов пользователей в Linux (UID) и возможностью сортировки по полям или столбцам в awk. Пример для системы на базе Debian или Slackware:
$ awk -F: '$3 > 999 { print $0}' /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
carla:x:1000:1000::/home/carla:/bin/bash
foober:x:1001:1001::/home/test:/bin/false
bitchkat:x:1002:1002::/home/test2:/bin/bash
Colby:x:1003:1003::/home/test3:/bin/bash
Отображение подмножества записей:
$ awk -F: '($3 >= 1000) && ($3 <= 1005) { print $0}' /etc/passwd
Для систем Red Hat и SuSE:
$ awk -F: '$3 > 499 { print $0}' /etc/passwd
Алфавитная сортировка результата:
$ awk -F: '$3 > 499 { print $0}' /etc/passwd | sort
Описанный приём особенно удобен тогда, когда схему нумерации UID в группах удаётся спроектировать заранее. Например:
- Trainers 1000-1100;
- Coaches 1101-1200;
- Players 1200-2000.
Если вы будете придерживаться подобной схемы, у вас появится простой инструмент для сортировки пользователей и их последующего разбиения на группы.
Комментарий
Схемы нумерации (вроде примера «Trainers/Coaches/Players») хорошо подходят для небольшой и относительно статичной пользовательской базы. В больших организациях с частыми изменениями они могут принести больше вреда, чем пользы. В таких случаях лучше сосредоточиться на правильном распределении пользователей по группам и своевременном внесении изменений.
Коды UID и GID во всех версиях Linux лежат в интервале от 0 до 65534. Между дистрибутивами существуют небольшие, но интересные различия. Например:
- Debian: 0-99 — системные учетные записи; 100-999 — программы и демоны, установленные пользователем (Postfix, Fetchmail, gdm и т. д.); 1000-29999 — учетные записи обычных пользователей; 65534 — пользователь nobody.
- Red Hat: 0-499 — коды для системного использования; 500-60000 — обычные пользователи; 65534 — пользователь nobody.
В других дистрибутивах используются аналогичные схемы нумерации. Экспериментируйте с диапазонами, зарезервированными для учетных записей обычных пользователей, но избегайте вмешательства в системные диапазоны.
См. также
awk(1); раздел 8.17; Debian Policy Manual, глава 9.2.2 (http://www.debian.org/doc/debian-policy/); Red Hat Linux Reference Pocket Guide (http://www.redhat.com/docs/manuals/Linux/).