Permissions

使用 sudo 讀取特定文件的權限

  • July 23, 2019

由於某些原因,我需要/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文件中添加哪些最小權限才能允許腳本讀取文件?

Sudo 用於執行而不是讀取文件。如果有人使用 sudo 執行該 python 腳本,則整個腳本將具有 root 權限,並且讀取文件沒有問題。但它也沒有問題添加密鑰,或更改 root 密碼,或者只是執行 rm -rf /*。

如果您只想使用 sudo 授予對特定文件的讀取訪問權限,最好的方法是授予使用者 sudo 權限以將該文件列印到標準輸出。

例如,您可以編寫一個腳本,它只對文件進行分類。把這個放在/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.shor sudo cat /root/.ssh/authorized_keys)並讀取其輸出。

引用自:https://serverfault.com/questions/834394