doas
OpenDoas 是 OpenBSD 的 doas 命令的可移植版本,以其尺寸远小于 sudo 而闻名。与 sudo 类似,doas 用于以系统中另一个用户的身份执行命令。
安装
安装 opendoas 软件包。
用法
要开始以非特权用户身份使用 doas,必须正确配置它。请参阅 #配置。
要使用 doas,只需在命令及其参数前加上 doas
和一个空格
$ doas cmd
例如,要使用 pacman
$ doas pacman -Syu
要以其他用户身份进入交互式 shell(省略 -u user
将默认为 root)
$ doas -su user
某些命令需要以其他用户身份登录,请参阅 Sudo#登录 Shell。
更多信息,请参阅 doas(1)。
配置
安装 OpenDoas 后,它将与 PAM 关联,但没有包含默认配置或示例。
要允许 wheel 组的成员以其他用户身份运行命令,请创建包含以下内容的配置文件
/etc/doas.conf
permit setenv {PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin} :wheel
- 配置文件必须以换行符结尾。
setenv
选项解决了 OpenDoas 的 BSD 来源引起的 问题,其中额外的系统软件包存储在/usr/local/bin
下。在 Linux 中,/usr/local/bin
通常用于覆盖可执行文件,因此它位于包含软件包中可执行文件的/usr/bin
之前。
/etc/doas.conf
的所有者和组都应为 0
,文件权限应设置为 0400
# chown -c root:root /etc/doas.conf # chmod -c 0400 /etc/doas.conf
要检查 /etc/doas.conf
是否存在语法错误,请运行
# if doas -C /etc/doas.conf; then echo "config ok"; else echo "config error"; fi
/etc/doas.conf
必须没有语法错误!要允许 plugdev
组的成员在没有密码的情况下以 Root 用户 身份运行 smartctl
/etc/doas.conf
permit nopass :plugdev as root cmd /usr/bin/smartctl
/etc/doas.conf
的通用语法形式为
permit|deny [options] identity [as target] [cmd command [args ...]]
最后匹配的规则决定了采取的动作,因此规则必须相应排序。
更多详情请阅读 doas.conf(5)。
技巧与诀窍
doas 持久化特性
doas 提供持久化特性:用户成功通过身份验证后,在 5 分钟内将不会再次提示输入密码。默认情况下禁用,使用 persist
选项启用它
/etc/doas.conf
permit persist setenv {PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin} :wheel
执行 doas -L
会在自动超时之前清除持久化的身份验证。
从 sudo 平滑过渡到 doas
为了从 sudo 平滑过渡到 doas 并保持向下兼容,您可以添加到您的环境中
alias sudo='doas' alias sudoedit='doas rnano'
或者,将 doas 符号链接到 sudo 通常所在的位置(但它不提供 sudoedit
命令)
# ln -s $(which doas) /usr/bin/sudo
另一种方法是安装 doas-sudo-shimAUR,它模拟了 sudo 的一些选项。
/etc/doas.conf
permit setenv { XAUTHORITY LANG LC_ALL } :wheel
Bash Tab 补全
默认情况下,Bash 将仅对当前或引用的目录中的文件和目录进行 Tab 补全。要告诉 Bash 将参数视为单独的命令进行补全(也利用其他命令的 Tab 补全设置),可以将以下内容添加到用户的 .bashrc
或全局 /etc/bash.bashrc
中
~/.bashrc
complete -cf doas
如果安装了 bash-completion,则可以使用以下命令来允许对目标命令进行额外的补全
~/.bashrc
complete -F _command doas