gpt4 book ai didi

macos - 在 OS X (10.7) 中编辑 sudoers

转载 作者:行者123 更新时间:2023-12-01 02:33:39 25 4
gpt4 key购买 nike

我有一个脚本(由我的前任编写),可以在运行 OS X 10.6 的 Mac 上成功编辑 sudoers 文件;它是这样的:

#!/bin/sh

if [ -z "$1" ]; then
export EDITOR=$0 && sudo -E visudo
else
echo "%staff ALL=NOPASSWD: /sbin/shutdown" >> $1
fi

但是,在运行 10.7 的 Mac 上运行时,它不会将行添加到 sudoers 文件,而是“交互式”启动 visudo。它似乎在任何时候都没有进入“else”子句。我怀疑第 4 行(“export...”)的适当语法已更改,但我似乎无法找出如何更改。任何指针?

因为有人会问:我们有一个精心设计的(不可否认,有点傻,但必然如此)强制重启补丁计划。如果用户没有在截止日期前任意重启,应用程序将在 5 分钟倒计时(或立即重启的选项)下启动,此时将发出“sudo shutdown -r now”命令。为了我的理智,请不要让我为这种安排的性质辩护。这超出了我的控制范围。

最佳答案

if [ -z "$1" ];是一种常见的习惯用法,用于检查是否没有给脚本提供任何参数。当不带参数调用时,您的脚本将采用第一个路径,启动编辑器(在这种情况下应该是这个脚本本身)。给定一个文件名作为参数,else -branch 被采用,并以非交互方式将一行附加到文件中(在 visudo 上下文中)。

假设脚本是在没有参数的情况下从外部调用的,sudo 开始清除 EDITOR 环境变量,或者(如@twalberg 指出的)visudo 现在忽略 EDITOR。

要修复,请调整 sudoers 文件以保留 EDITOR,并通过设置 env_editor 允许任何程序作为编辑器,或将脚本(以及任何其他编辑 sudoers 文件的脚本)添加到 editor多变的。

Defaults    env_keep += "EDITOR"
# UNSAFE
#Defaults env_editor
# better
Defaults editor = "/usr/bin/vi:/path/to/script" # ... possibly more

如果您不想这样做(或不能以非交互方式这样做)并且可以安全地假设不会发生同时编辑,您可以执行以下操作:
cp -p /etc/sudoers /etc/sudoers.tmp
echo "%staff ALL=NOPASSWD: /sbin/shutdown" >> /etc/sudoers.tmp
if visudo -cqf /etc/sudoers.tmp; then
mv /etc/sudoers.tmp /etc/sudoers
else
rm /etc/sudoers.tmp
echo "update failed"
fi

关于macos - 在 OS X (10.7) 中编辑 sudoers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11562434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com