Macos 我正在编写Mac Apple Management的脚本有问题
我是一名管理10台Mac电脑的技术员。我没有和MDM来管理它们。我手动一个接一个地管理它们。。。我有一些Mac电脑,即使它们不是管理员,它们的托管帐户也会变成管理员 我将编写一个脚本,以防止他们成为管理员 这是我的剧本:Macos 我正在编写Mac Apple Management的脚本有问题,macos,scripting,sh,Macos,Scripting,Sh,我是一名管理10台Mac电脑的技术员。我没有和MDM来管理它们。我手动一个接一个地管理它们。。。我有一些Mac电脑,即使它们不是管理员,它们的托管帐户也会变成管理员 我将编写一个脚本,以防止他们成为管理员 这是我的剧本: PASSWORD=$(echo U2FsdGVkX1+6JWRG1T9hsA/DIOfb2OZdXBf9uVcYTxY= | openssl enc -aes-128-cbc -a -d -salt -pass pass:wtf) echo $PASSWORD | sudo -
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”处。该行有几个问题
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
运行命令administrator
,变量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
),以避免与具有特殊含义的各种大写名称冲突,并运行脚本并更正它指出的内容。不是administrator
?(请原谅我的盎格鲁中心主义观点;-))。祝你好运