惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
量子位
D
DataBreaches.Net
博客园 - 司徒正美
J
Java Code Geeks
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
B
Blog
The Cloudflare Blog
D
Docker
I
InfoQ
爱范儿
爱范儿
MongoDB | Blog
MongoDB | Blog
腾讯CDC
月光博客
月光博客
Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
小众软件
小众软件
S
SegmentFault 最新的问题
GbyAI
GbyAI
有赞技术团队
有赞技术团队

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
用 doas 替代 sudo - 少数派
2021-01-29 · via 少数派

就在前不久,sudo 再一次曝出 安全问题,允许用户绕过权限管理,就可以直接获取 root 权限。最新的更新已经修复了这一漏洞,但是面对不断曝光出漏洞的 sudo,我们是否应当考虑寻找它的替代品呢?

本文对使用 MacOS 的用户而言用处不大,但如果想要了解一下也是可以接着往下看的。

几乎可以在所有的 Linux 服务器上找到 sudo。它能够方便地让用户获取到 root 权限,在不用登陆为 root 用户时就修改一些敏感内容。当然这只是 sudo 强大功能的冰山一角,它能够构建出一套非常复杂的权限管理系统,只是作为普通用户,我们几乎不会应用到这么多。

而作为如此强大的一个工具,其绝大部分的功能对于普通的管理员来说,都是多余的:我们用不着配置如此强大的权限管理系统,在绝大多数情况下,我们所需要的只是一句 sudo command 或是 sudo -i 罢了。因此,sudo 的优点几乎被抵消殆尽,而它的缺点就被无限放大了。

为了实现如此复杂的功能,sudo 的源码非常复杂,而这就带来了非常严重而又现实的问题,即代码中存在漏洞的可能性非常之高。同时,由于它几乎默认安装于所有的 Linux 与 Mac 上,破解带来的收益又非常高。一旦找到提权的漏洞,且用户没有及时更新,所带来的后果可能是非常严重的。

使用 doas 替代 sudo

因此,可以使用 doas 替代 sudo。相对于 sudo,doas 的配置更为简单易懂,非常便于使用。同时,doas 的代码量非常小,出现漏洞的概率也随之降低。因而,对于个人使用的服务器而言,doas 已然够用,无需 sudo 那些复杂的功能。

下载,安装与配置

doas 可以从 GitHub 上下载其源码。
默认情况下,它将被安装到 /usr/local/bin 下,而其配置文件的位置为 /usr/local/etc/doas.conf 。如果想要更改这些设置,就需要编辑 Makefile,修改其中的 PREFIX 与 DOAS_CONF 两项。例如,我要把配置文件的位置改为 /etc/doas.conf,只要将 DOAS_CONF 中的 $(PREFIX) 删除即可。

随后,使用 sudo make clean install 命令进行安装 (没错,你还是需要用到一下 sudo 命令的,之后的安装过程中可能还会再用到,不过等配置完成后就不再需要了)。

需要先通过 root 权限创建 doas.conf 文件,然后编辑。

doas.conf 的内容非常简单易懂。

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

其中,options 包括:

  1. nopass,执行命令时不需要输入密码
  2. nolog,命令执行成功时不会记录
  3. persist,授权后,一段时间内不会要求再次输入密码
  4. keepenv,如果没有其他说明,保持环境变量不变
  5. setenv,设置临时的环境变量,具体方法为 setenv { -ENV PS1=$DOAS_PS1 SSH_AUTH_SOCK }

而 [as target] 意为以某个用户的身份,如果不写,默认为全体用户,即任意身份。 cmd 部分同理,不写则默认可以执行任意命令。

因此,一个最简单的 doas.conf 文件会是这样的 (假设用户名称为 test)

permit test

意思即为:允许 test 用户以任意身份执行任意命令。

另外值得一提的是,就像 sudo 有着 visudo 这条命令一样,doas 同样有着 vidoas 命令。它要求以 root 用户执行,并且在保存时会进行格式检查,防止出错。建议在修改该文件时,可以通过这条命令进行修改。

有些 Linux 发行版,以及 MacOS,默认情况下会阻止 doas 使用 PAM 认证。因此还需要运行以下命令

cp /etc/pam.d/sudo /etc/pam.d/doas

来确保 doas 能够正常工作。

需要注意的地方

首先是编译所需要安装的
如果使用的是 Ubuntu,那么需要运行以下命令安装编译所需的软件

sudo apt install build-essential make bison flex libpam0g-dev 

如果是 MacOS,则改为这句

xcode-select --install

如果使用的是 OpenSUSE,那么至少需要安装这个包(可能其他需要的包我之前已经安装过了,没有测试)

sudo zypper in bison

其次是,每次修改完源代码需要编译安装时,千万记得要 clean,即要么

make clean
sudo make install

要么直接

sudo make clean install

最后最后,千万不要在完全确定 doas 可以替代 sodo 之前,或是没有给 root 用户设定密码之前,就 visudo 把当前用户删掉,不然拯救起来是非常麻烦的一件事情,而且心态可能会爆炸。

别问我怎么知道的。

解决方法是,如果是 MacOS 用户,通过 finder 找到 /private/etc/sudoers 文件,右键选择 Get Info,在最下方的 Sharing & Permissions 中修改权限,使自己有权限更改(最后的更改好像必须在终端里进行,直接双击打开更改好像还是有问题)。

MacOS 的解决方案

如果是 Linux 用户,如果有实体机那 Live CD 直接 mount 后就能修改,如果是服务器,那只能希望服务商有修改 root 密码这一功能了。

其它一些想说的内容

对于个人电脑而言,最重要的保护还是开启防火墙,定时清理杀毒,不连接不认识的网络,同时保证不会被不怀好意的人有物理接触。上述的内容主要还是针对于服务器,特别是 Linux 服务器而言的。

每天我的服务器都会被扫描无数次,尝试登陆并失败的 log 文件一天甚至就能涨到 1M 大,这还是我服务器上挂的网站没啥名气,没什么人会愿意来攻击的结果。因此服务器才需要如此强调安全性。其实许多安全问题都不是我们能解决的,我们只能是在漏洞被修复后,尽快更新,并希望在此期间没有造成严重后果罢了。