Михаил Флёнов - Linux глазами хакера
4.2.3. Удаление групп
Теперь рассмотрим, как можно удалить группу. Для этого используется команда groupdel:
groupdel имя
При выполнении этой команды вы должны самостоятельно проверить все файлы, владельцем которых является удаляемая группа, и при необходимости изменить собственника, иначе к таким файлам сможет получить доступ только root-администратор.
Надо еще заметить, что группу нельзя удалить, если в ней есть пользователи. Сначала их нужно вывести из группы, и только потом выполнять команду groupdel.
4.3. Управление пользователями
Для добавления пользователя используется команда useradd. С ее помощью также можно изменить значения по умолчанию, которые будут присваиваться учетной записи.
Команда выглядит следующим образом:
useradd параметры имя
Параметров очень много, большинство из них вам знакомо по файлу /etc/password, который мы рассматривали в гл. 3. Рассмотрим каждый аргумент:
□ -с — простое текстовое описание, которое может быть любым;
□ -d — домашний каталог пользователя;
□ -e — дата отключения учетной записи, после которой пользователь станет неактивным, вводится в формате ГГГГ-ММ-ДД;
□ -f — количество дней до отключения. Похоже на параметр -е, только указывается период относительно текущей даты. Если запись нужно отключить сразу после создания, то используйте значение 0. По умолчанию устанавливается -1, что соответствует бесконечности, т.е. запись будет активной всегда;
□ -g — основная группа, которой будет принадлежать пользователь. Можно указывать как имя, так и идентификатор. В Red Hat каждый пользователь принадлежит какой-либо группе;
□ -G, [...] — дополнительные группы, в которых будет существовать пользователь. Имена групп перечисляются через запятую;
□ -m — ключ для создания домашнего каталога пользователя. В такую директорию будут скопированы все файлы из /etc/skel;
□ -M — не создавать домашний каталог. По умолчанию директория формируется в /home/ИмяПользователя, чтобы этого избежать, нужно явно прописать в команде запрет;
□ -r — если указать этот параметр, то в качестве идентификатора будет выбрано число из системной области;
□ -p — зашифрованный пароль, который можно получить с помощью команды crypt;
□ -s — командный интерпретатор, который будет обрабатывать директивы пользователя;
□ -u — идентификатор, который должен быть уникальным. Если его не устанавливать, то система выберет свободное значение.
Самый последний параметр — имя создаваемой учетной записи. Давайте рассмотрим, как можно добавить нового пользователя по имени robert, для которого все значения будут установлены по умолчанию:
useradd robert
cat /etc/passwd
В первой строке мы создаем нового пользователя по имени robert. Вторая строка выводит на экран содержимое файла /etc/passwd, где хранится информация о всех учетных записях. И заключительная строка в нем будет выглядеть следующим образом:
robert:x:501:501::/home/robert:/bin/bash
Вспомните формат этого файла, который мы рассматривали в разд. 3.3. Первый параметр — это имя. Затем стоит пароль, который спрятан в теневом файле, поэтому здесь x. Далее следуют идентификаторы пользователя и группы. Так получилось, что в обоих случаях свободными оказались номера, равные 501, поэтому идентификаторы одинаковы, но это далеко не всегда так. Потом идет домашний каталог пользователя. По умолчанию все директории создаются в папке /home и соответствуют имени пользователя.
Давайте посмотрим файл /etc/shadow. Обратите внимание, что в строках пользователей robert и Denver стоит два восклицательных знака, мы не указывали пароль и войти в систему не можем. Я и не советую его задавать при создании пользователя. Это лишние мучения, потому что нужно шифровать его функцией crypt, при этом нет гарантии сложности пароля. Лучше изменить его после создания пользователя с помощью команды passwd:
passwd robert
В ответ на это вы увидите приглашение ввести пароль и пояснения о необходимости делать его сложным. Сообщение, которое выдает программа, выглядит следующим образом:
Changing password for user robert.
You can now choose the new password or passphrase.
A valid password should be a mix of upper and lower case letters,
digits and other characters. You can use an 8 character long
password with characters from at least 3 of these 4 classes,
or a 7 character long password containing characters from all
the classes. Characters that form a common pattern are discarded by the check.
A passphrase should be of at least 3 words, 12 to 40 characters
long and contain enough different characters.
Alternatively, if no one else can see your terminal now, you can
pick this as your password: "trial&bullet_scare".
Что по-русски звучит примерно следующим образом:
Изменяется пароль для пользователя robert.
Сейчас вы можете выбрать новый пароль или идентификационную фразу.
Хороший пароль должен состоять из комбинации заглавных и прописных
букв, цифр и других знаков. Вы можете ввести пароль длиной в 8 символов
с использованием значений 3 и 4 типов или пароль из 7 символов,
сочетающий знаки всех классов. Символы из часто используемых шаблонов будут отвергнуты.
Идентификационная фраза должна состоять из 3 слов общей длиной от 12 до
40 символов и содержать разнообразные знаки.
В качестве альтернативы, если в данный момент никто не смотрит
на ваш терминал, можно использовать пароль trial&bullet_scare.
Как видите, команда passwd знакомит нас с основными правилами создания сложных паролей и даже предлагает пример, который достаточно длинный и содержит различные символы. Но я не стал бы его использовать, потому что он состоит из вполне читаемых слов. Злоумышленник может запустить подбор паролей по словарю, где различные слова объединяются, как это делает passwd. Такая процедура займет значительно больше времени, чем подбор пароля из одного слова, но зато намного меньше, чем для шифра типа OLhslu_9&Z435drf. Для нахождения этого пароля словарь не поможет, а полный перебор всех возможных вариантов отнимет годы.
А давайте посмотрим, что сейчас находится в домашнем каталоге нового пользователя. Вы думаете, что там ничего нет? Проверим. Перейдите в каталог /home/robert или выполните следующую команду:
ls -al /home/robert
Ключ -a заставляет отображать все файлы (в том числе и системные), а -l — выводит подробную информацию. Результат выполнения такой команды должен выглядеть примерно следующим образом:
drwx------ 3 robert robert 4096 Nov 26 16:10 .
drwxr-xr-x 5 root root 4096 Nov 26 16:21 ..
-rw-r--r-- 1 robert robert 24 Nov 26 16:10 .bash_logout
-rw-r--r-- 1 robert robert 191 Nov 26 16:10 .bash_profile
-rw-r--r-- 1 robert robert 124 Nov 26 16:10 .bashrc
-rw-r--r-- 1 robert robert 2247 Nov 26 16:10 .emacs
-rw-r--r-- 1 robert robert 118 Nov 26 16:10 .gtkrc
drwxr-xr-x 4 robert robert 4096 Nov 26 16:10 .kde
Обратите внимание, что в директории 6 файлов и один подкаталог. Самое интересное находится в третьей и четвертой колонках, где располагаются имя и группа владельца файла соответственно. В обоих столбцах почти везде указано имя robert. Если пользователя с таким именем мы только что создали, то группу — нет. Вспомните разд. 4.2. При отсутствии параметров настройки автоматически формируется группа с таким же именем, что и учетная запись, и туда сразу же помещается все необходимое о новом пользователе.
Еще один нюанс. Папка с именем из двух точек (..), указывающая на родительский каталог, принадлежит root. Почему? Пользователь robert — владелец текущей директории /home/robert, (он здесь хозяин), но каталог выше /home вне его прав.
Все файлы и папки, которые принадлежат учетной записи robert, доступны для чтения и записи. Пользователи группы robert и все остальные могут только просматривать информацию, а разрешения на изменение у них нет.
4.3.1. Файлы и папки нового пользователя
Откуда берутся файлы в папке нового пользователя? При формировании учетной записи в соответствующую домашнюю папку копируются все файлы и подкаталоги из /etc/skel. Давайте создадим свой файл в этой директории и посмотрим, попадет ли он в папку нового пользователя? Чтобы ничего не выдумывать, выполним следующую директиву:
ls >> /etc/skel/text
Здесь задается команда is для просмотра содержимого текущего каталога. Потом идет два символа ">>" и имя файла "text" в папке /etc/skel. Такая запись означает, что результат выполнения команды должен быть помещен в указанный файл. Если файл не существует, то он будет создан. Таким образом, мы подготовили в нужной директории новый файл, содержимое которого нас не особо волнует.