You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

能否在sudoers文件中通过变量扩展实现用户仅挂载自身命名的磁盘(无需额外脚本)

能否在sudoers文件中通过变量扩展实现用户仅挂载自身命名的磁盘(无需额外脚本)

当然可以实现!你之前的sudoers配置没生效,核心原因是sudoers的变量扩展逻辑和普通shell不一样,不能直接用${SUDO_USER}这类shell环境变量,得用它内置的专用占位符才行。

问题根源

你写的${SUDO_USER}是shell层面的环境变量,但sudoers有自己独立的变量解析规则,它不会识别并替换这类shell变量,所以那条规则实际上无法匹配任何合法的mount命令。

正确的sudoers配置

把规则里的变量替换成sudo内置的%u占位符——这个符号会自动替换为执行sudo命令的当前用户名。修改后的完整规则如下:

ALL ALL=(ALL) NOPASSWD: /usr/bin/mount /dev/disk/by-id/user-disk-%u /mnt/%u

效果验证

  • 当用户testuser执行sudo mount /dev/disk/by-id/user-disk-testuser /mnt/testuser时,sudo会把%u替换为testuser,完全匹配规则,允许无密码执行挂载操作;
  • 如果testuser尝试挂载其他用户的磁盘(比如sudo mount /dev/disk/by-id/user-disk-alice /mnt/alice),路径和规则不匹配,sudo会直接拒绝,完美实现“用户只能挂载自己命名磁盘”的需求。

额外注意事项

要确保每个用户对应的/mnt/%u目录已经提前创建,否则mount命令会因目标目录不存在而失败。你可以手动批量创建这些目录,或者如果你的mount版本支持--mkdir参数,也可以把规则改成:

ALL ALL=(ALL) NOPASSWD: /usr/bin/mount --mkdir /dev/disk/by-id/user-disk-%u /mnt/%u

这样mount会自动创建不存在的目标目录。

备注:内容来源于stack exchange,提问作者Raviraj

火山引擎 最新活动