FreeBSD doas 命令提升权限
doas("do as"的缩写)是以另一个用户的身份运行指定的命令,它是一个轻量、简洁的权限提升工具,类似于sudo。最初由 OpenBSD 开发,后来移植到了 FreeBSD 系统。
默认情况下,以另一个用户运行命令时,会创建一个新的 shell 环境,不同的环境变量赋值的方式不一样:
- 环境变量
HOME、LOGNAME、PATH、SHELL、USER以及umask(2)会被设置为目标用户的值 - 环境变量
DOAS_USER被设置为执行doas的用户名。 - 环境变量
DISPLAY和TERM会从当前环境中继承。
环境变量的赋值方式可以通过配置文件进行修改。
工作目录不会更改。
安装 doas
可以使用 pkg 或者 ports 两种方式在 freebsd 系统中安装 doas:
1)通过 pkg 安装 doas 软件包:
pkg install doas
2)通过 ports 安装doas 软件包:
# 首先要转到 doas 的软件包目录
cd /usr/ports/security/doas
# 安装软件包
make install clean
注:也可以使用 opendoas 软件包,其基本的使用方式基本一致。
为用户配置 doas 权限
如果你只是想为用户配置 doas 权限,可以以 root 权限执行命令,只需添加如下配置。
打开配置文件
以 root 用户权限打开配置文件:
vi /usr/local/etc/doas.conf
添加配置
可以有两种方式,可以任选一种方式:
1)直接为特定用户设置以 root 权限执行命令,假设你的用户名是 fu:
permit fu
2)允许 wheel 组的用户以 root 权限运行命令
permit :wheel
把需要以 root 权限运行命令的用户 fu 添加到 whell 组,运行命令:
pw groupmod wheel -m fu # 修改你系统中的用户名
想进一步学习 doas 命令,可以继续往下看。
创建配置
安装 doas 后,默认没有创建配置文件,给了一个配置文件的示例文件 /usr/local/etc/doas.conf.sample。可以参考示例文件中的配置,创建自己的配置文件。在创建配置文件之前,先介绍一下权限配置的规则。
权限配置结构
在配置文件中一行为一个权限配置,基本的结构形式为:
permit|deny [options] identity [as target] [cmd command [args ...]]
各部分的解释说明:
1)permit|deny:在匹配该条规则是所执行的动作:
permit为允许执行deny为拒绝执行。
2)options:执行命令时的条件,可以使用的选项有:
nopass:无需输入密码,示例:permit nopass :wheel # wheel组执行命令时无需密码nolog:不把成功执行的命令记录到syslogd中-
keepenv:保留当前用户的环境变量值,创建新 shell 时不为环境变量赋新值,示例:permit keepenv :wheel # wheel组成员保留自己的环境变量 -
persist:缓存密码,默认时长为 5分钟,示例:permit persist fu # 5分钟内只需输一次密码 setenv:设置特定环境变量,示例:permit setenv { EDITOR=/usr/bin/vim } fu
3)identity:为用户身份标识,可以指定为用户或组:
- 用户名,示例:
permit fu # fu 为用户名 - 添加
uid前缀,指定用户 ID,示例:permit uid 1001 # 1001 为用户 id - 使用
:组名指定组,示例:permit :wheel # 指定 wheel 组可以执行命令 - 添加
gid前缀,指定组 ID,示例:permit gid 1001 # 1001 为组 id - 指定登录类别,示例:
permit loginclass staff
4)as target 指定以 target 目标用户运行,默认为 root 用户
5)cmd command 指定可以运行 command 命令,示例:permit fu as root cmd pkg
6)args 参数 为 command 命令指定 参数,当只提供 args 没有提供参数时,命令只能以无参数形式运行,示例:permit fu as root cmd pkg args upgrade
创建配置文件
需要以 root 用户权限运行如下的命令:
vi /usr/local/etc/doas.conf
可添加如下配置:
1)允许 wheel 组的用户以 root 权限运行命令
permit :wheel
2)允许 wheel 组用户执行命令时无需输入密码:
permit nopass :wheel
3)允许特定用户执行所有命令:
permit fu
4)允许用户执行特定命令:
permit fu cmd pkg
doas 命令语法
doas 命令的基本使用语法形式为:
doas [-nSs] [-a style] [-C config] [-u user] command [args]
解释说明:
- -n:非交互模式。在
nopass选项时,才能够正常执行 -S:与-s选项的功能相同,但会模拟完整的登录过程,将根据目标用户的登录类别(login class)应用相应的资源限制。当未指定KEEPENV选项时,会清除目标用户的环境变量。-s:执行SHELL环境变量指定的 shell 或/etc/passwd中指定的对应用户的 shell-a style:使用/etc/login.conf文件中指定认证方式进行用户验证,可以在/etc/login.conf中添加auth-doas条目来配置专用于doas的认证方法列表。-C config:解析并检查配置文件config,然后退出。如果同时提供了command,doas还会检查命令,根据命令的具体配置,标准输出上显示permit、permit nopass或deny。-u user:以指定的user身份执行命令,默认为 root 用户command:为需要执行的命令args:命令需要使用的参数
当指定了 -C、-S 或 -s 选项,可以不指定 command 参数。
doas 命令使用示例
如下给出几个 doas 的使用示例,如果没有执行权限会报错:
1)以 root 身份执行命令
doas vi /etc/rc.conf
2)以特定用户身份执行
doas -u www whoami
总结
doas 是 FreeBSD 上的一个优秀的权限管理工具,它使用起来非常的方便。