首页 > 教程 > FreeBSD 教程 > FreeBSD 基础 > 权限管理工具 > FreeBSD doas 命令提升权限

FreeBSD doas 命令提升权限

doas("do as"的缩写)是以另一个用户的身份运行指定的命令,它是一个轻量、简洁的权限提升工具,类似于sudo。最初由 OpenBSD 开发,后来移植到了 FreeBSD 系统。

默认情况下,以另一个用户运行命令时,会创建一个新的 shell 环境,不同的环境变量赋值的方式不一样:

  • 环境变量 HOMELOGNAMEPATHSHELLUSER 以及 umask(2) 会被设置为目标用户的值
  • 环境变量 DOAS_USER 被设置为执行 doas 的用户名。
  • 环境变量 DISPLAYTERM 会从当前环境中继承。

环境变量的赋值方式可以通过配置文件进行修改。

工作目录不会更改。

安装 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,然后退出。如果同时提供了 commanddoas 还会检查命令,根据命令的具体配置,标准输出上显示 permitpermit nopassdeny
  • -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 上的一个优秀的权限管理工具,它使用起来非常的方便。