使用 sudo 读取特定文件的权限

使用 sudo 读取特定文件的权限

由于某些原因,我需要/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.shsudo cat /root/.ssh/authorized_keys)并读取其输出。

答案2

尝试一下/etc/sudoers

username ALL = (root:root) NOPASSWD: /root/.ssh/authorized_keys

相关内容