Группы и пользователи
В этой главе мы создадим пользователей и разграничим их возможности. Познакомимся с правами и маской доступа. Настроим группы wheel и nosu. И научимся выполнять действия от лица другого пользователя.
Root
В файловой структуре линукс не все фалы разрешено просматривать и не все команды разрешено выполнять обычным пользователям. Это определённая степень защиты системы, и она оправдывает себя с лихвой. Но тем не менее операционная система не ограничивает пользователя в его действиях. Чтобы выполнить действие не предусмотренное обычным сценарием операционной системы, необходимо обладать правами доступа главного пользователя — root.
Попробуйте открыть содержимое файла /etc/shadow от именя обычного пользователя.
less /etc/shadow
скорее всего вам выдаст предупреждение о том, что у вас не достаточно прав доступа.
/etc/shadow: Permission denied
Трудно быть богом
В чём разница между программистом и богом? Бог не считает себя программистом.
Настало время стать root пользователем. Введите команду
su - root
Можно ввести и без знака —. Дефис устанавливает рабочий каталог пользователя и подгружает некоторые переменные, поэтому он предпочтителен.
Обратите внимание на то, что знак $ призывающий вас ввести команду, сменился на #. Так вы можете быстро отличать действуете ли вы от root или от имени другого пользователя.
Пароли
Снова попробуйте открыть файл /etc/shadow
less /etc/shadow
На этот раз никаких проблем. В самом верху расположилась информация о пользователе root. Пролисайте файл вниз, найдите имя вашего пользователя. Значения в каждой строке отделены друг от друга двоеточием. Давайте разберём синтаксис строк.
user:hash:day1:5:day2:day3::
- user — имя пользователя
- hash — хэш пароля пользователя.
- day1 — сколько дней прошло с 1.01.1970 до последнего смены пароля
- 5 — Как часто пользователь может менять пароль (Прим: если стоит число 5, то раз в 5 дней пользователь может сменить пароль)
- day2 — сколько дней будет действовать аккаунт пользователя
- day3 — за сколько дней до удаления предупреждать пользователя
- day4 — сколько дней после истечения срока пароля, аккаунт будет действовать
- day5 — Сколько дней с 1.01.1970 аккаунт будет действовать.
Удаление хотябы одного символа из поля c хэшем пароля приведёт к тому, что пользователь не сможет пройти аутентификацию в системе, после чего установить новый пароль сможет только root. Если вы забыли root пароль, вам потребуется live-cd и немного времени или кто-то кто может запускать команды от рута.
Заметка:
Чтобы считать и вывести информацию о пользователе в развёрнутом виде из /etc/passwd используйте
chage -l user
Так же chage позволяет записать информацию в /etc/passwd
Группы
Тперь откроем файл, который хранит информацию о группах.
tail /etc/group
Найдите группу одноимённую с вашим пользователем. Данная строка имеет следующий синтаксис
имя_группы:служебное поле:id_группы:
pam.d
Pluggable authetication modules Смените директорию на
cd /etc/pam.d
и посмотрите на список файлов ls -l. Среди всех файлов вы найдёте одноимённый файл настройки команды su. Откройте его командой
nano su
Найдите следующие строки
Первая область предлагает раскомментировать строку ниже, чтобы пользователя группы wheel могли запускать команду su без запроса пароля.
Вторая область предлагает раскомментировать, строку ниже, чтобы пользователя группы wheel могли запускать команду su, но будет запрашиваться пароль пользователя на которого происходит попытка переключения.
Давайте создадим пользователя harry и присвоим его группу wheel.
useradd -m -g wheel harry
-m создать домашнюю директорию -g добавить в группу.
Если группы wheel не существует, вам будет выдано соответствующее предупреждение. useradd: group ‘wheel’ does not exist. Все существующие группы можно увидеть в файле
less /etc/group
После создания пользователя сразу же задайте ему пароль командой
passwd harry
Если вы не зададите пароль, пользователь даже не сможет войти в систему.
Теперь добавим ещё одного пользователя, но не будем присваивать его группе. Не забудьте установить ему пароль.
useradd -m ron
Переходим в /etc/pam.d и открываем файл su
cd /etc/pam.d
nano su
раскоментировав строку показанную на картинке
Вы разрешите участникам группы wheel выполнять команду su без запроса пароля пользователя на которого вы переключаетесь. Сохраните файл.
Переключаемся между пользователями
Находясь в root режиме, введите команду id для вывода подробной информации. Смените пользователя на ron, командой.
su - ron
Опять введите команду id, убедитесь, что вы действительно действуете от имени ron.
Теперь, из под ron, введите команду su — root
su -
если не указывать пользователя, система будет пытаться зайти из под рута.
Обратите внимание на то, что система запрашивает у вас пароль.
Сменим пользователя на harry
su - harry
whoami
и попытаемся выполнить команду su будучи harry. Не спрашивая пароля, система сразу нам предоставляет root пользователя. Более того, будучи пользователем harry, мы можем действовать от имени любого пользователя, достаточно прописать его в команде.
su - ron
И вот теперь мы не harry, а ron.
Добавляем уже существующего пользователя в группу wheel.
Давайте добавим пользователя ron в группу wheel. Зайдите в root и выполните такую команду.
usermod -a -G wheel ron
Если не поставить флаг -a, то весь список групп пользователя ron заменится на одну группу wheel
Теперь при вызове команды su, ron не должен вводить пароль.
Введите команду
less /etc/group
вы увидите, что к списку пользователей группы wheel добавилось имя пользователя ron. А где harry? Обратите внимание на id группы.
Откройте файл
less /etc/passwd
Найдите harry. 4-я позиция — это id группы пользователя, которая совпадает с id wheel. 3-я позиция — это id пользователя. В большинстве случаев они совпадают. Дело в том что пользователь не может существовать без группы. И поэтому, если в момент создания пользователя, ему не присвоена группа, создаётся одноимённая группа с id пользователя. Посмотрите к какой группе принадлежит ron. Группа может существовать без пользователя.
group=nosu
Добавим нового пользователя malfoy
adduser -m malfoy
Не забываем устанавливать пароль
- Добавим группу nosu
groupadd nosu
- Включим malfoy в группу nosu
usermod -a -G nosu malfoy
если не поставить -a, тогда все текущие группы будут заменены на nosu
- Откроем файл /etc/pam.d/su
nano /etc/pam.d/su
- Добавьте следующую строчку и сохраните файл. auth required pam_wheel.so deny group=nosu use_uid
- Смените пользователя на malfoy
su - malfoy
- Попробуйте сменить пользователя с malfoy на другого.
su - harry
Даже если вы введёте правильный пароль, вам выдаст предупреждение, о невозможности выполнить операцию
Password:
su: Permission denied
Выйдите из под пользователя malfoy.
exit
sudo
Если команда su устанавливает текущего пользователя, то команда sudo выполняет команду от имени указанного пользователя, если ему эта команда доступна.
Перейдите под своего пользователя и введите команду
sudo -u ron whoami
вы пытаетесь выполнить команду whoami от имени пользователя ron находясь в своём аккаунте. В результате вы увидите надпись ron.
sudo -u malfoy whoami
то же самое, находясь под своим пользователем, мы выполняем команду whoami от имени malfoy.
Теперь посложнее.
sudo -u malfoy su ron
поскольку пользователь malfoy находится в группе, которой запрещено выполнять команду su, мы получим предупреждение «permission denied».
Если флаг -u не устанавливать, команда будет выполнена от имени root.
/etc/sudoers
Настройки утилиты sudo находятся в файле /etc/sudoers. Попробуйте открыть его командой
less /etc/sudoers
Скорее всего вы получите ошибку доступа. А теперь введите
sudo less /etc/sudoers
!!! ВАЖНО !!! Ни в коем случае не редактируйте этот файл обычным текстовым редактором. Лучше используйте утилиту visudo
visudo
не забудьте зайти в root режим. Утилита visudo не даст сохранить вам файл, если вы допустите в нём критические ошибки.
Отройте редактор visudo и под строкой %wheel ALL=(ALL:ALL) ALL Добавьте строку.
%gryffindor ALL=(ALL:ALL) NOPASSWD: /usr/bin/whoami
% — указывает на группу
первое ALL — указывает на имя компьютера (hostname) второе ALL — от имени какого пользователя можно выполнять программу третья ALL — какие команды можно запускать (перед запрещёнными командами ставить !)
Таким образом, мы всем пользователям группы gryffindor разрешили запускать утилиту whoami от имени любого пользователя, без запроса пароля. Осталось создать группу gryffindor.
groupadd gryffindor
Взгляните на файл /etc/group
tail /etc/group
в него добавилась информация о новой группе и автоматически присвоился id.
Добавим harry и ron в группу gryffindor.
usermod -a -G gryffindor harry
usermod -a -G gryffindor ron
Убедимся, что harry и ron состоят в gryffindor.
tail /etc/group
Смените пользователя на ron или harry и попытайтесь выполнить команду
sudo -u malfoy whoami
Команда успешно выполнится, но при этом все остальные команды будут выполняться только по запросу пароля. Если же вы войдёте под пользователем malfoy, то не сможете выполнить ни одну команду, потому-что по умолчанию linux запрещает выполнение команд одними пользователями из под других пользователей (кроме пользователей группы root).
чтобы посмотреть что позволяет сделать команда sudo текущему пользователю введите команду sudo -l
Check-point
- убедитесь, что малфой не может изменять файл /etc/passwd.
nano /etc/passwd
Файл откроется, но он будет недоступен для записи.
А теперь попробуйте открыть тот же файл через суперпользователя
sudo nano /etc/passwd
На этот раз вы получите предупреждение:
malfoy is not in the sudoers file. This incident will be reported.
Мы видим предупреждение, что зафиксирована попытка неавторизированного входа. Историю действий команда sudo записывает в лог /var/log/secure
sudo tail /var/log/secure
- Суперпользователем добавим пользователя malfoy в файл /etc/sudoers, но c правом редактировать только один файл /etc/resolv.conf (На самом деле без разницы какой файл вы разрешите редактировать, на конечный результат это никак не повлияет). Предоставьте пользователю malfoy запускать редактор nano для файла /etc/resolv.conf без запроса пароля. Найдите строчку root ALL=(ALL) ALL и под ней добавьте следующую строку.
malfoy ALL=(ALL) NOPASSWD: /bin/nano /etc/resolv.conf
malfoy — на имя какого пользователя пишется правило для команды sudo. Первая ALL — указывает на каких компьютерах (хостах) будет действовать это правило. Вторая ALL указывает от имени каких пользователей можно запускать команды через sudo. В строчке с root пользователем присутствует ещё и третья ALL — она говорит о том, какие команды можно запускать. В случае с malfoy мы указываем программу и файл.
- Откройте новый терминал. Переключитесь на пользователя malfoy.
- Убедитесь, что файлы из каталога /etc/ ,malfoy редактировать не может.(/etc/passwd, /etc/shadow, /etc/sudoers)
- Теперь откройте файл, на который есть разрешение в файле sudoers командой
sudo nano /etc/resolv.conf
. Сортите его, но не сохраняйте. - Нажмите Ctrl+R и введите /etc/sudoers. Тем самым вы только что считали информацию с /etc/sudoers в текущий файл.
- Замените строчку
malfoy ALL=(ALL) NOPASSWD:/bin/nano /etc/resolv.conf
наmalfoy ALL=(ALL) NOPASSWD:ALL
- Нажмите Ctrl+O , НО вместо resolv.conf введите sudoers. Подтвердите, что вы хотите переписать файл.
- Наслаждайтесь. Теперь malfoy может запускать абсолютно любые программы через sudo без запроса пароля.
- Откройте файл /etc/passwd. И в самый конец добавьте строку
volandemort:x:1098:1098::/home/malfoy:/bin/bash
- Сохраните файл и введите в терминал команду
sudo passwd volandemort
Установите пароль.
- Откройте файл group и добавьте нового пользователя volandemort в группу wheel.
На этом казалось бы всё, но при попытке зайти в учётную запись volandemort…
sudo su - volandemort
Вы получите ошибку, которая скажет, что у вас не достаточно прав для доступа к домашнему каталогу. Как решить данную проблему вы можете почитать в описании команды chmod .
Задачи
- Сделать доступным редактор sumlime пользователю root и группе gryffindor
- Сейчас каждый пользователь не имеет доступ к папке другого. Сделайте так, чтобы каждая папка была доступна для чтения основной группе владельца папки. Группа могла бы её только просматривать. Другим доступ полностью отключен.
- Запретите harry использовать утилиту su без запроса пароля.
- Добавьте несколько пользователей по своему усмотрению (hermiona, dambldor).
—Расширение
- Найти следы пребывания другого пользователя в файловой структуре из архива.
- Создайте группу hogwarts, в которую будут по-умолчанию добавляться все новые пользователи.
- Каталог hogwarts c папками room переместите в /home и установите его домашним каталогом каждому новому пользователю, если не указать иначе при создании пользователя.
Hints
- Если вы захотите удалить пользователя, используйте команду userdel -r username
- Для редактирования пользователя используйте usermod
- Для работы с группами используется утилита groupmod
- Конфигурационные файлы настроек при добавлении пользователя
- /etc/login.defs — общий файл настроек утилит, работающих с пользователями и группами
- /etc/default/useradd — файл настройки утилиты useradd
- Файлы которые будут добавлены в домашнюю дирректорию /etc/skel
- Для редактирования /etc/passwd используйте vipw
- /etc/shadow используйте vipw -s
- /etc/group -> vigr
Вам так же может пригодиться
- chmod — команда для изменения прав доступа к файлам
- useradd — команда для добавления пользователей в систему
- расширенные атрибуты доступа
- специальные разрешения