Doas — это программа для повышения привилегий, аналогичная sudo. Изначально она была разработана для OpenBSD и позволяет пользователям выполнять команды от имени другого пользователя (например, root). Благодаря своей простоте и уникальным функциям, doas была адаптирована для множества других Linux-систем.
Два ключевых преимущества doas перед sudo заключаются в том, что она имеет меньший размер, пустой конфигурационный файл и более простой, легко запоминающийся синтаксис, что значительно облегчает аудит.
Если вы когда-либо редактировали конфигурационный файл sudo с помощью visudo, который открывает файл /etc/sudoers в безопасном режиме, вы заметили, что этот файл полон сложного синтаксиса. Даже небольшие изменения требуют тщательной проверки на наличие потенциальных синтаксических ошибок.
Несмотря на то, что sudo является мощным инструментом для системных администраторов, для большинства пользователей настольных компьютеров, которые используют его только для установки программ и работы со своими системами, редактирование конфигурационного файла может быть сложным и неудобным. В таких случаях doas может стать отличной альтернативой.
Инструмент командной строки doas очень популярен, а его пакет доступен в большинстве репозиториев Linux, что упрощает его установку через менеджер пакетов.
Debian/Ubuntu
$ sudo apt install doas
Red Hat/Fedora
$ sudo dnf install opendoas
ArchLinux
$ sudo pacman -S opendoas
Void Linux
$ sudo xbps-install opendoas
После установки убедимся в успешной установке, запустив:
$ doas
Вывод команды:
Теперь, когда doas установлен, возникает вопрос, как его использовать. Если запустить команду, добавив ее к другой команде, можно увидеть, что произойдет.
$ doas ls /
Получим:
Выводится ошибка doas is not enabled (doas не включен). Как говорилось выше, doas не имеет предустановленный файл конфигурации. Поэтому придется вручную создать новый файл конфигурации /etc/doas.conf, который будет соответствовать нашим потребностям.
В конфигурационном файле doas доступно множество различных и, при этом, простых настроек. Одна из важных — разрешить одному пользователю или пользователям из группы «wheel» выполнять команды от имени пользователя root. Ниже перечислены все остальные настройки, которые необходимо знать.
Первым шагом будет создание файла doas.conf с помощью предпочитаемого вами текстового редактора (для меня это Nano), используя приведенную ниже команду, которая также запросит пароль вашей учетной записи.
$ sudo nano /etc/doas.conf
Чтобы создать правило, позволяющее пользователям выполнять действия от имени администратора, необходимо добавить следующую строку (замените «testuser» на реальное имя пользователя).
permit testuser as root
Важно отметить, что настройки, сделанные в конфигурационном файле doas, применяются только к указанному пользователю (в данном случае «linuxtldr»). Однако если несколько пользователей используют одну и ту же систему и вы хотите, чтобы они использовали doas в качестве замены sudo, вам следует использовать группу типа «wheel» или «sudo», членами которой уже являются эти пользователи, и предоставить им root-доступ в этой группе, используя следующее правило:
permit :wheel as root
или
permit :sudo as root
Сохраните и закройте файл, и при выполнении любой команды с doas в качестве пользователя root он предложит вам ввести пароль учетной записи пользователя. В случае указания непосредственно пользователя, он должен находится в группе sudo. Соответственно в случае указания группы, пользователи должны быть в указанной группе.
Однако doas при каждом выполнении, в одной и той же терминальной сессии (в отличии от sudo), перед выполнением команды запрашивает пароль учетной записи пользователя, разберемся с этим.
doas предлагает функцию persist, которая сохраняет состояние после успешной аутентификации пользователя, временно освобождая от запросов пароля. По умолчанию эта функция отключена. Чтобы активировать её для пользователя или группы, достаточно добавить опцию «persist» после оператора «permit».
Сохранение состояния пользователя testuser
permit persist testuser as root
Сохранение состояния пользователей группы wheel
permit persist :wheel as root
Если вы используете какую-либо команду многократно и хотите обойтись без ввода паролей, вы можете легко сделать это как для пользователей, так и для членов группы. Например, первая строка ниже позволит пользователю testuser запускать команду mc без пароля в качестве пользователя root, а вторая строка даст всем пользователям группы wheel возможность запускать команду apt без пароля в качестве пользователя root.
permit nopass testuser as root cmd mc permit nopass :wheel as root cmd apt
После редактирования конфигурационного файла doas установите права на файл пользователю root, а разрешения на файл 0400, что можно сделать, выполнив команду :
$ sudo chown -c root:root /etc/doas.conf $ sudo chmod -c 0400 /etc/doas.conf
Наконец, проверим файл «/etc/doas.conf» на наличие синтаксических ошибок следующей командой:
$ sudo doas -C /etc/doas.conf && echo "All good" || echo "There is an error"
Увидим наличие или отсутствие синтаксических ошибок. Так что, если полностью заменить sudo, предварительно необходимо проверить синтаксис при изменении конфигурационного файла doas.
От этой привычки использовать команду sudo можно постепенно избавиться, создав псевдоним «sudo» для команды «doas». Не стоит беспокойться о совместимости, «doas» практически совместима с «sudo».
Чтобы создать псевдоним, необходимо отредактировать файл конфигурации оболочки («~/.bashrc» для bash) и добавив в конец следующую строку:
alias sudo='doas' alias sudoedit='doas rnano'
После завершения сохраните и закройте файл, теперь при использовании команды sudo будет выполняться команда doas.
Чтобы позволить Bash обрабатывать аргументы как отдельные команды (и использовать настройки автодополнения других команд), добавьте следующую строку в файл конфигурации «~/.bashrc»:
complete -cf doas
Сохраните и закройте файл. Для введите несколько начальных символов любой команды и нажмите «Tab», чтобы отобразить список предложенных команд.
В основном команда doas используется для выполнения команды от имени пользователя root. Однако существуют и другие способы использования doas, например, выполнение команды от имени другого пользователя.
$ doas -u user command
Чтобы запустить стандартную оболочку от имени root, вы можете использовать:
$ doas -s
Чтобы сделать пароль забываемым даже после его ввода, вы можете использовать:
$ doas -L
После выполнения вышеуказанной команды запуск другой предложит вам повторно ввести пароль учетной записи пользователя, что полезно, когда кто-то требует немедленного доступа к вашей системе.