doas用法简介

在OpenBSD环境下搭建各种服务器的相关讨论。

版主: lionuxchenjun天地乾坤

回复
头像
acheng
锌 Zn
帖子: 581
注册时间: 2011-07-07 21:52

doas用法简介

帖子 acheng » 2015-12-05 16:42

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

头像
unreal
银 Ag
帖子: 1083
注册时间: 2010-06-07 18:52

帖子 unreal » 2015-12-07 0:10

除了用wheel组用户关机,我基本不用sudo,在命令行需要权限时 su 到 root;在Xwindow就单独开一个root终端。《BSD Hakes》说到sudo的操作逻辑也有安全问题。

头像
unreal
银 Ag
帖子: 1083
注册时间: 2010-06-07 18:52

帖子 unreal » 2016-01-03 17:55

两天前把X61s装了 5.8,但是没看到 /etc 有doas.conf 配置文件。

头像
acheng
锌 Zn
帖子: 581
注册时间: 2011-07-07 21:52

Re: doas用法简介

帖子 acheng » 2016-04-14 19:24

默认没有/etc/doas.conf文件的,需要自己创建。

回复

在线用户

正浏览此版面之用户: 没有注册用户 和 1 访客