doas

来自 Arch Linux 中文维基

OpenDoas 是 OpenBSD 的 doas 命令的便携版本,与 sudo 相比,它以体积小而闻名。与 sudo 一样,doas 用于假定系统中另一个用户的身份。

安装[编辑 | 编辑源代码]

安装 opendoas

使用[编辑 | 编辑源代码]

要以非特权用户的身份开始使用 doas,必须对它进行适当配置。参见#配置

要使用 doas,只需在命令及其参数前加上 doas 和一个空格:

$ doas cmd

例如,要使用 pacman

$ doas pacman -Syu

要进入具有 root 提示的交互式 shell:

$ doas -s

更多内容参见 doas(1)

配置[编辑 | 编辑源代码]

安装 OpenDoas 会附带 PAM 模块,但没有包括默认配置或示例。

为了允许 wheel 组的成员以其他用户的身份运行命令,请创建一份具有以下内容的配置文件:

/etc/doas.conf
permit :wheel

注意: 配置文件必须以换行结束。

/etc/doas.conf 的所有者和组应均是 0,文件权限应设置为 0400

# chown -c root:root /etc/doas.conf
# chmod -c 0400 /etc/doas.conf

要检查 /etc/doas.conf是否存在语法错误,请运行:

# doas -C /etc/doas.conf && echo "config ok" || echo "config error" 
警告: 必须保证 /etc/doas.conf 没有语法错误!

允许 plugdev 组的成员作为根用户无需密码运行 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 提供持久化支持:在用户成功认证后,在一段时间内不再要求输入密码。默认情况下是禁用的,用 persist 选项启用它:

/etc/doas.conf
permit persist :wheel
注意: 持久化默认禁用,因为它比较新,有潜在的危险。在最初的 doas 中,一个内核 API 被用来设置和清除超时。这个 API 是 OpenBSD 特有,其他操作系统上没有类似的 API。作为一种变通方法,持久化是使用类似于 sudo 的时间戳文件实现。

从 sudo 平滑过渡到 doas[编辑 | 编辑源代码]

为了从 sudo 平滑过渡到 doas 并保持向下兼容,可以在环境中添加:

alias sudo='doas'
alias sudoedit='doas rnano'

或者,将 doas 链接到 sudo 通常所在位置(但是它无法提供sudoedit命令):

# ln -s $(which doas) /usr/bin/sudo

doas-sudo-shimAUR 或许可以帮您平滑过渡,可惜无法提供sudoedit命令。

注意: 默认情况下 sudo 会保留一些环境变量,而 doas 不会,最明显的是 XAUTHORITY、LANG 和 LC_ALL。这意味着你将无法在 X 下启动图形应用程序,也无法在没有额外配置的情况下访问用户的区域设置。例如,要允许 wheel 组的成员运行图形应用程序,并使用 setenv 访问用户的 locale:
/etc/doas.conf
permit setenv { XAUTHORITY LANG LC_ALL } :wheel

Bash tab 补全[编辑 | 编辑源代码]

默认情况 Bash 只对当前或参考目录下的文件和目录进行 tab 补全。要让 Bash 像完成单独的命令一样完成参数(同时利用其他命令的 tab 补全设置),可以在用户的 .bashrc 或全局的 /etc/bash.bashrc 中添加以下内容:

~/.bashrc
complete -cf doas