Часть 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.
-
Создаем пользователя
ansibleс домашней директорией/home/ansible/. Например, с помощью утилитыadduser.к сведениюХорошая статья о создании пользователей.
-
Меняем пользователю
ansibleпароль с помощьюpasswd ansible. -
Меняем
rootпароль с помощьюpasswd. -
Создаем группу
wheelс помощьюgroupadd wheel.предупреждениеВ GNU/Linux нет магии, все происходит максимально логично. Так, добавление пользователя сводится к изменению файлов
/etc/passwdи/etc/shadow. Исторически файл/etc/passwdсодержал информацию о пользователях и их зашифрованные (чаще всего - хешированные) пароли. Однако, для того,чтобы пользователь мог взаимодействовать с системой - запускать программы от лица других пользователей, просматривать права доступа и так далее, нам необходимо, чтобы этот файл был доступен для чтения всем. А значит, в теории, пароли других пользователей можно было бы подобрать перебором, ведь они нам были бы тоже доступны. Для того, чтобы избежать проблем с утечкой паролей - их вынесли в отдельный файл/etc/shadow. Больше о формате этих файлов стоит узнать в справочных материалах.
-
Создать директорию
/adminc помощьюmkdir /admin. -
Сделать owner-ом директории
/adminпользователяansibleи выдать права группеwheel:chown ansible:wheel /admin -
Выдать на права на чтение и редактирование пользователю
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).
Демонстрация некоторых командна некотором сервере, просто для ознакомления, не руководство к действию:
