由于某些原因,我需要/root/.ssh/authorized_keys
使用没有权限的用户进行读取。显然,我无法更改文件的权限(也不能更改 ACL),因为 ssh 不喜欢这样。
我使用 Python 访问该文件:
try:
with open("/root/.ssh/authorized_keys",'r') as f:
foo()
except EnvironmentError:
print 'Bad permissions and/or file not existing'
python 脚本将由具有 的非特权用户执行sudo
。我必须在sudoers
文件中设置哪些最低权限才能允许脚本读取文件?
答案1
Sudo 用于执行文件,而不是读取文件。如果有人使用 sudo 运行该 python 脚本,则整个脚本将具有 root 权限,并且可以毫无问题地读取文件。但它也可以毫无问题地向其中添加密钥、更改 root 密码,或者只是执行 rm -rf /*。
如果您只想使用 sudo 授予对特定文件的读取权限,最好的方法是授予用户 sudo 权限以将该文件打印到 stdout。
例如,您可以编写一个脚本,它只执行 cat 文件的操作。将其放入/usr/bin/get_root_authkeys.sh
:
#!/bin/sh
cat /root/.ssh/authorized_keys
(确保该文件是可执行的,但用户不可写入)。
然后将其放入 sudo 中:
username ALL= (root:root) NOPASSWD /usr/bin/get_root_authkeys.sh
一个稍微简单的解决方案:你可以给他们 cat 命令的 sudo 权限,例如
username ALL= (root:root) NOPASSWD cat /root/.ssh/authorized_keys
从那里,您不需要执行 fopen,而是执行 sudo 命令(例如sudo /usr/bin/get_root_authkeys.sh
或sudo cat /root/.ssh/authorized_keys
)并读取其输出。
答案2
尝试一下/etc/sudoers
:
username ALL = (root:root) NOPASSWD: /root/.ssh/authorized_keys