Перейти к основному содержимому

Часть 2. Права, пользователи, su и sudo

Становимся root

Станьте суперпользователем (root-ом) с помощью утилиты sudo -i. Так как пароль root не задан - мы пока не можем стать им с помощью su.

к сведению

Root (англ. root — корень; читается "рут"), или суперпо́льзователь — это специальный аккаунт и группа пользователей в UNIX-подобных системах с идентификатором UID 0 (User IDentifier), владелец которого имеет право на выполнение всех без исключения операций. Суперпользователь UNIX-систем имеет логин "root" только по умолчанию и легко переименовывается при необходимости, часто встречается переименование в "toor" для усложнения подбора паролей автоматическими сканерами.

su (англ. Substitute User, Set UID, Switch User*, Super User* — замена пользователя, переключение пользователя, суперпользователь) — команда Unix-подобных операционных систем, позволяющая пользователю войти в систему под другим именем, не завершая текущий сеанс. Обычно используется для временного входа суперпользователем для выполнения административных работ. По умолчанию предполагается работа от имени пользователя root. Если первый аргумент su — дефис - , среда будет установлена такой же, как при регистрации заданного пользователя. Иначе передается текущая среда, за исключением значения $PATH, которое задается переменными PATH и SUPATH в файле /etc/default/su.

sudo (англ. Substitute User and do, дословно "подменить пользователя и выполнить") — программа для системного администрирования UNIX-систем, позволяющая делегировать те или иные привилегированные ресурсы пользователям с ведением протокола работы.

Основная идея — дать пользователям как можно меньше прав, но при этом достаточных для решения поставленных задач.

Редактируем sudoers

Далее с помощью утилиты visudo можно отредактировать файл /etc/sudoers(через утилиту - чтобы ничего не сломать, она создает временный файл и перед применением изменений проверяет синтаксис) - разрешить группе wheel делать sudoс паролем.

к сведению

В GNU/Linux CTRL часто обозначается как ^:

  • Сохранить в nano: ^O.
  • Выйти из nano: ^X.
  • Поиск по файлу: ^W.

Этого можно добиться добавив строку %wheel ALL=(ALL:ALL) ALL:

  • %wheel ALL=(ALL:ALL) ALL

    Первое поле показывает имя пользователя или группы, к которым будет применяться правило, в данном случае к группе wheel, для пользователя нужно убрать %.

  • %wheel ALL=(ALL:ALL) ALL

    Первое "ALL" означает, что данное правило применяется ко всем хостам.

  • %wheel ALL=(ALL:ALL) ALL

    Данное "ALL" означает, что пользователь группы wheel может запускать команды от лица всех пользователей.

  • %wheel ALL=(ALL:ALL) ALL

    Данное "ALL" означает, что пользователь группы wheel может запускать команды от лица всех групп.

  • %wheel ALL=(ALL:ALL) ALL

    Последнее "ALL" означает, что данные правила применяются всем командам.

Хорошая статья о sudoers файле тут.

Добавим пользователя, группу и изменим права

к сведению

Материал для дополнительного изучения: Пользователи в Linux.

  1. Создаем пользователя ansible с домашней директорией /home/ansible/. Например, с помощью утилиты adduser.

    к сведению

    Хорошая статья о создании пользователей.

  2. Меняем пользователю ansible пароль с помощью passwd ansible.

  3. Меняем root пароль с помощью passwd.

  4. Создаем группу wheel с помощью groupadd wheel.

    предупреждение

    В GNU/Linux нет магии, все происходит максимально логично. Так, добавление пользователя сводится к изменению файлов /etc/passwd и /etc/shadow. Исторически файл /etc/passwd содержал информацию о пользователях и их зашифрованные (чаще всего - хешированные) пароли. Однако, для того,чтобы пользователь мог взаимодействовать с системой - запускать программы от лица других пользователей, просматривать права доступа и так далее, нам необходимо, чтобы этот файл был доступен для чтения всем. А значит, в теории, пароли других пользователей можно было бы подобрать перебором, ведь они нам были бы тоже доступны. Для того, чтобы избежать проблем с утечкой паролей - их вынесли в отдельный файл /etc/shadow. Больше о формате этих файлов стоит узнать в справочных материалах.

    image38

  5. Создать директорию /admin c помощью mkdir /admin.

  6. Читаем про систему прав.

  7. Сделать owner-ом директории /admin пользователя ansible и выдать права группе wheel:

    chown ansible:wheel /admin
  8. Выдать на права на чтение и редактирование пользователю ansible,а группе wheel только не чтение:

    chmod 640 /admin

History

Настроим для root сохранение истории, добавим это в конец /root/.bashrc, чтобы история незамедлительно сливалась в файл (а не при завершении сессии):

shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

Аналогичное действие проведите для .bashrc вашего пользователя, с помощью которого вы подключаетесь на хост.

Для синхронизации history между сессиями можно добавить в текущий env (либо также добавить в .bashrc, но не советую, т.к. при вводе нескольких команд с разных консолей одновременно - может перетирать историю, которая не успела сохраниться на диск, но если вас не очень заботит мультипоточность можно):

export PROMPT_COMMAND='history -a;history -c;history -r'

А теперь перестаньте уже быть root, это вредно - наберите команду exit или нажмите комбинацию ^D (CTRL+D).

Демонстрация некоторых командна некотором сервере, просто для ознакомления, не руководство к действию:

image40