Permissions
使用 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
文件中添加哪些最小權限才能允許腳本讀取文件?
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.sh
orsudo cat /root/.ssh/authorized_keys
)並讀取其輸出。