Skip to content

OpenBSD上doas用法简介

doas是OpenBSD 5.8上开始出现的一个程序,用来代替sudo。相比sudo,它的好处是配置简单明了。坏处嘛我还不知道,估计功能上没有sudo那么全面吧。因为我都是用sudo的一些基本功能(指定那些用户可以切换到root),所以对sudo的优势了解并不全面。另外就是,doas的配置完全不兼容sudo,且目前只有OpenBSD上才有。

doas的配置文件是/etc/doas.conf,配置规则如下

permit|deny     [options]      identity     [as target]     [cmd command      [args ...]]

一个规则以permit(允许)或deny(拒绝)开头,  接下来是一些选项(options,非必须),然后是配置的用户名或用户组(identity部分),再接下来是这个用户(identity部分)可以(或不允许)以哪个用户(target)的身份来执行命令,用as关键词来表示。这也是可选的。如果省略,表示这个用户(identity)可以以任意用户的身份执行后面cmd关键词指定的命令;

 

cmd关键词用来指定允许(或拒绝)的命令,args关键词用来指定命令的参数; cmd 和args都是可选的。省略的话表示任意命令和参数。

选项(options)部分有一下两个选择:
a. nopass , 表示用户无需输入密码
b. keepenv  { [ variables … ] },表示用户的使用环境将会被保持,如果不指定的话,默认是会重置的(除了这些变量: DISPLAY, HOME, LOGNAME, MAIL, PATH, TERM, USER and USERNAME.)。keepenv还可以指定具体那些变量被保持。将需要保持的变量名称放在大括号中,多个时以空格分开。

组以冒号加上组名称来表示,如 :wheel。

注释以#开始,直至该行结束。

 

下面再以示例来说明一下。 比如我们常用的让一个用户(如acheng)切换到root而无需知道root密码的配置:

permit  acheng as root

这个规则让acheng用户可以以root身份执行任何命令,包括 ’su – ‘。 但是需要输入知己的密码。如果连这个也想省略掉,那就加上nopass选项:

permit nopass acheng as root

如果想要这个wheel组的成员都可以这样做,规则如下:

permit nopass :wheel as root

 

规则配置完成后,可以用doas的‘-C’参数来验证一下是否有错误:

doas -C /etc/doas.conf

 

在使用时,acheng用户可以使用下面的命令来切换到root:

doas su -

或者运行其它命令:

doas rcctl restart ntpd

 

如果需要以root用户之外的其它用户身份来执行命令,则要使用doas的 ‘-u username’参数。 当然,上面的例子中,只允许acheng切换到root用户,如果把其中的’as root’部分省略掉的话,则表示acheng可以以任意用户的身份执行命令。

最后,我们看一下doas.conf的手册中给出的几个例子:

The following example permits users in group wsrc to build ports, wheel to execute commands as any user while keeping the environment variables ENV, PS1, and SSH_AUTH_SOCK, permits tedu to run procmap as root without a password, and additionally permits root to run unrestricted commands as itself.

# Non-exhaustive list of variables needed to
# build release(8) and ports(7)
permit nopass keepenv { \
FTPMODE PKG_CACHE PKG_PATH SM_PATH SSH_AUTH_SOCK \
DESTDIR DISTDIR FETCH_CMD FLAVOR GROUP MAKE MAKECONF \
MULTI_PACKAGES NOMAN OKAY_FILES OWNER PKG_DBDIR \
PKG_DESTDIR PKG_TMPDIR PORTSDIR RELEASEDIR SHARED_ONLY \
SUBPACKAGE WRKOBJDIR SUDO_PORT_V1 } :wsrc
permit nopass keepenv { ENV PS1 SSH_AUTH_SOCK } :wheel
permit nopass tedu as root cmd /usr/sbin/procmap
permit nopass keepenv root as root

Avatar

专业Linux/Unix/Windows系统管理员,开源技术爱好者。对操作系统底层技术,TCP/IP协议栈以及信息系统安全有强烈兴趣。电脑技术之外,则喜欢书法,古典诗词,数码摄影和背包行。

Sidebar