【问题标题】:Trouble with a script I am writing Mac Apple Management我正在编写的脚本遇到问题 Mac Apple 管理
【发布时间】:2020-03-22 13:00:05
【问题描述】:

我是一名管理 10 台 Mac 电脑的技术人员。我没有和 MDM 来管理它们。我一个一个地手动管理它们......我有一些 Mac 电脑,即使将它们设置为非管理员,他们的托管帐户也会重新成为管理员。

我正要写一个脚本来防止他们沦为管理员。

这是我的脚本:

PASSWORD=$(echo U2FsdGVkX1+6JWRG1T9hsA/DIOfb2OZdXBf9uVcYTxY= | openssl enc -aes-128-cbc -a -d -salt -pass pass:wtf)
echo $PASSWORD | sudo -u administrateur adminUsers=$(dscl . -read Groups/admin GroupMembership | cut -c 18-)
for user in $adminUsers
do
    if [ "$user" != "root" ]  && [ "$user" != "administrateur" ]
    then
        dseditgroup -o edit -d $user -t user admin
        if [ $? = 0 ]; then echo "Removed user $user from admin group"; fi
    else
        echo "Admin user $user left alone"
    fi
done

加密命令有效,但我的第二个命令(第 2 行)无法使用我的变量 $PASSWORD,我有这个:

sudo: administrateur: command not found

脚本卡在第 2 行的“管理员”处。

【问题讨论】:

  • 不是administrator? (请原谅我的以盎格鲁为中心的观点;-))。祝你好运!

标签: macos scripting sh


【解决方案1】:

线路有几个问题

echo $PASSWORD | sudo -u administrateur adminUsers=$(dscl . -read Groups/admin GroupMembership | cut -c 18-)

首先,$PASSWORD 不在双引号中,因此几个特殊字符可能会造成麻烦。其实echo在特殊字符方面有自己的问题,所以printf '%s\n' "$PASSWORD"会可靠得多。

除了sudo 不接受标准输入的密码,所以管道无论如何都不会工作。

此外,您不能在sudo 命令中进行变量赋值。好吧,你可以,但它没用,因为它会像另一个用户一样创建一个子进程,在那个子进程中设置变量......然后退出子进程,这样变量就会随之消失。

而且评估的顺序都是错误的。 shell 扩展$( ) 部分之前 运行任何命令(并作为当前用户)。所以它扩展为:

 echo pwgoeshere | sudo -u administrateur adminUsers=root administrateur

...这将告诉sudo 运行命令administrateur 并将变量adminUsers 设置为“root”。根本不是你想要的。

但有个好消息:dscl 可以从任何用户帐户读取组成员身份,因此您不需要sudo 或任何其他内容。只需使用:

adminUsers=$(dscl . -read Groups/admin GroupMembership | cut -c 18-)

另一方面,dseditgroup 确实需要特殊的访问权限来更改组成员身份。该脚本以什么用户身份运行?如果它已经以root 运行,它就可以工作。如果没有,您可以使用sudo(将密码传递给它的复杂性),或者更简单地将管理员凭据作为参数传递,使用-u 和`-P 选项:

dseditgroup -o edit -u administrateur -P "$PASSWORD" -d "$user" -t user admin

另外两个建议:使用小写变量名(例如password 而不是PASSWORD)以避免与各种具有特殊含义的各种全大写名称发生冲突,并通过shellcheck.net 运行脚本并更正错误它指出了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    相关资源
    最近更新 更多