数据
- 我希望这台机器上的操作员用户挂载他们自己的 cifs 共享
- 该
sudoers
文件已包含/bin/mount -t cifs //*/* /media/* -o username=*
所有操作员的命令 - 我希望用户通过脚本只输入一次密码来安装
cifs
共享,而不是两次。 - sudo 密码和 cifs 密码相同。
我已经拥有的
该脚本有效:
#!/bin/bash
sudo 'mount -t cifs //192.168.1.1/home /media/$USER/home -o username=$USER'
...但它要求用户输入相同的密码两次!
- 一次为
sudo
- 一次用于安装本身
这也可以:
#!/bin/bash
echo -n Password:
read -s szPassword
echo $szPassword | sudo -S sh -c 'echo $szPassword | mount -t cifs //192.168.1.1/home /media/$USER/home -o username=$USER'
...但这需要我允许所有操作员用户能够sudo sh
(主要安全问题)
问题
如何在不放入文件或创建永久/临时文件的情况下在 bash中挂载 cifs 共享???sh
sudoers
注 1:没有 python,perl,C,Go,...拜托?
注意2:我知道我可以通过sudoers
文件删除密码,但我试图加强安全性,而不是放松它,而不是放弃方便......
相反,您应该让用户调用 using sudo as
sudo script
。只需检查脚本是否以 root 身份运行,如果不要求它不要试图获取用户的密码。
我很笨!
以下脚本:
只是工作,并且:
执行此命令不需要
sudo
密码;密码提示mount
仍然存在。在
sudoers
中,包括类似的东西包含此内容后,
sudo
将不再要求此特定命令的密码;用户仍然需要为mount
命令提供密码。注意:我从您在问题中包含的内容中逐字获取命令;我没有检查它的通配符是否允许用户做一些讨厌的事情。阅读
sudoers
手册页以获取肮脏的示例。 特别要注意的是,这一行sudoers
允许用户添加任意数量的-o
开关或其他参数到mount
. 您可能需要重新考虑您的方法,例如通过添加诸如@Braiam 建议的脚本并允许在sudo
没有额外身份验证的情况下运行该脚本。然后,该脚本确保用户只能运行mount
您希望他们运行的特定形式。此外,除了允许所有用户这样做,您还可以将其限制为某个组的成员,例如,您可以创建一个组
cifsmount
,然后拥有这些问题的一般解决方案是将以下序言放在需要 sudo 的脚本的顶部:
显然,这有一个缺点,如果脚本中的某些命令不需要
sudo
运行,那么这里就有不必要的特权提升。无论如何,我想我会分享这个小技巧。最好的一点是,如果您已经是有效的 uid root(例如,如果您已经在 sudo 下调用它),它会优雅地做正确的事情。同样给出错误并强迫您重新输入/重新运行(使用 sudo)也不太友好。
您可能还想查看
timestamp_timeout
变量,man 5 sudoers
其中告诉sudo
记住用户凭据有限的分钟数(并且可以是分数)。