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/Coaches/Players») хорошо подходят для небольшой и относительно статичной пользовательской базы. В больших организациях с частыми изменениями они могут принести больше вреда, чем пользы. В таких случаях лучше сосредоточиться на правильном распределении пользователей по группам и своевременном внесении изменений.

Коды UID и GID во всех версиях Linux лежат в интервале от 0 до 65534. Между дистрибутивами существуют небольшие, но интересные различия. Например:

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

См. также

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/).