Наши партнеры





  • Черс
  • VBScript и др. Статьи по веб-дизайну, графике и созданию сайтов с примерам.
  • ave-parket.ru



Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Linux-инструменты для Windows-программистов
Назад Консольные команды Вперед

Пользователи и права

Эта группа команд позволяет манипулировать с именами пользователей (добавлять, удалять, менять им права). Управление учётными записями пользователей — это целый раздел искусства системного администрирования. Мы же рассмотрим эту группу команд в минимальном объёме, достаточном для администрирования своего локального рабочего места.

Основная команда добавления нового имени пользователя:

# adduser
Usage: useradd [options] LOGIN
Options:
  -b, --base-dir BASE_DIR       base directory for the new user account
                                home directory
  -c, --comment COMMENT         set the GECOS field for the new user account
  -d, --home-dir HOME_DIR       home directory for the new user account
...

# which adduser
/usr/sbin/adduser

При создании нового имени пользователя для него будут определены (в диалоге) и значения основных параметров пользователя: пароль, домашний каталог и другие. Команды той же группы:

# ls /usr/sbin/user*
/usr/sbin/useradd  /usr/sbin/userhelper   /usr/sbin/usermod
/usr/sbin/userdel  /usr/sbin/userisdnctl  /usr/sbin/usernetctl

С этими командами достаточно ясно без объяснений. Вот как мы меняем домашний каталог для нового созданного пользователя:

# adduser kernel
# usermod -d /home/guest kernel
# cat /etc/passwd | grep kernel
kernel:x:503:100:kernel:/home/guest:/bin/bash

А вот так администратор может сменить пароль любого другого пользователя:

# passwd kernel
Смена пароля для пользователя kernel.
Новый пароль :
НЕУДАЧНЫЙ ПАРОЛЬ: основан на слове из словаря
НЕУДАЧНЫЙ ПАРОЛЬ: слишком простой
Повторите ввод нового пароля :
passwd: все токены проверки подлинности успешно обновлены.

Уже находясь в системе (под каким-то, естественно именем), мы можем всегда перерегистрироваться (в одном отдельном терминале) под именем любого известного системе пользователя:

$ su - kernel
Пароль:

$ whoami
kernel

$ pwd
/home/guest

Сложнее с действиями с паролем пользователя. Вот как посмотреть состояние пароля пользователя (выполняется только с правами root):

$ sudo passwd -S olej

olej PS 2010-03-13 0 99999 7 -1 (Пароль задан, шифр SHA512.)

Но узнать (восстановить) пароль любого ординарного пользователя администратор не может, он может только сменить его на новый — это один из основных принципов UNIX. А как следствие этого принципа: если вы утеряли пароль пользователя root, то легальных способов исправить ситуацию не существует ... да и нелегальные вряд ли помогут — система достаточно надёжно защищена.

Ещё один часто задаваемый вопрос с не очевидным ответом: если команда создания пользователя adduser всегда создаёт пользователя с паролем входа, то как создать пользователя с пустым паролем? Для этого нам нужно удалить пароль у уже существующего пользователя:

# adduser guest
...

# passwd -d guest
Удаляется пароль для пользователя guest..
passwd: Успех

# passwd -S guest
guest NP 2011-03-23 0 99999 7 -1 (Пустой пароль.)

Все регистрационные записи пользователей (как созданных администратором, так и создаваемых самой системой) хранятся в файле:

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...
olej:x:500:500:O.Tsiliuric:/home/olej:/bin/bash
olga:x:501:501:olga:/home/olga:/bin/bash

- 3-е поле каждой записи — это численный идентификатор пользователя (UID), а 4-е - численный идентификатор основной группы (GID) этого пользователя. А вот значение 'x' во 2-м поле говорит о том, что пароль для пользователя хранится в файле теневых паролей:

$ ls -l /etc/shad*
-r-------- 1 root root 1288 Янв 24  2010 /etc/shadow
-r-------- 1 root root 1288 Янв 24  2010 /etc/shadow-

Обратите внимание на права доступа к этому файлу: даже root не имеет права записи в этот файл.

По умолчанию, при создании командой adduser нового пользователя с именем xxx создаётся и новая группа с тем же именем xxx. Кроме того, пользователя дополнительно можно включить в любое число существующих групп. Смотрим состав групп, их (групп) численные идентификаторы (GID) и принадлежность пользователей к группам:

$ cat /etc/group     
...
nobody:x:99:
users:x:100:olej,games,guest,olga,kernel
...
olej:x:500:
...

- во 2-й показанной строке здесь olej — это имя пользователя в группе users, а в последней — имя группы, только совпадающее по написанию с именем olej пользователя: это результат отмеченного умолчания при создании пользователя, но от него можно и отказаться, задавая группу вручную.

Пример того, как получить информацию (если забыли) кто, как и где зарегистрирован в системе на текущий момент:

$ who
root     tty2        2011-03-19 08:55
olej     tty3        2011-03-19 08:56
olej     :0          2011-03-19 08:22
olej     pts/1       2011-03-19 08:22 (:0)
olej     pts/0       2011-03-19 08:22 (:0)
olej     pts/2       2011-03-19 08:22 (:0)
olej     pts/3       2011-03-19 08:22 (:0)
olej     pts/4       2011-03-19 08:22 (:0)
olej     pts/5       2011-03-19 08:22 (:0)
olej     pts/6       2011-03-19 08:22 (:0)
olej     pts/9       2011-03-19 09:03 (notebook)

- здесь:
а). две (стр.1,2) регистрации в текстовых консолях (# 2 и 3) под разными именами (root и olej);
б). X11 (стр.3) регистрация (консоль #7, CentOS 5.2 ядро 2.6.18);
в). 7 открытых графических терминалов в X11, дисплей :0;
г). одна удалённая регистрация по SSH (последняя строка) с компьютера с сетевым именем notebook.

А вот так узнать имя, под которым зарегистрирован пользователь на текущем терминале:

$ whoami
olej

- и это совсем не пустая формальность при одновременно открытых в системе нескольких десятков терминалов.

А как получают права root? На то есть несколько возможностей:

1. Перерегистрация:

$ su -
Пароль:
#

2. Выполнение единичной команды от имени root:

$ su -c ls
Пароль:
build.articles

$ su -c 'ls -l'
Пароль:
итого 520
drwxrwxr-x 4 olej olej   4096 Мар 13 19:54 build.articles
...

3. Наилучший способ выполнения команды от имени root:

$ sudo makewhatis
...

Но иногда (в зависимости от дистрибутива), при первом употреблении команда sudo нещадно ругается... В этом случае нужно настроить поведение sudo:

cat /etc/sudoers
...
## Same thing without a password
# %wheel    ALL=(ALL)    NOPASSWD: ALL
%olej      ALL=(ALL)    NOPASSWD: ALL
...

- здесь показана одна новая строка, добавленная по образцу закомментированной, разрешающая «беспарольный sudo» для пользователя с именем olej.


Предыдущий раздел: Оглавление Следующий раздел:
Справочные системы   Команды файловой системы