需要(某些)根訪問權限的腳本
我有一個關於系統管理腳本的一般性問題,這些腳本需要以 root 訪問權限執行“某些”命令,而其他命令則需要以普通非 root 使用者(即 myusername 等)身份執行。我應該提到我在 Linux Red Hat 4 系統上使用 Ruby 1.8.6。到目前為止我看到的建議是:
- 允許從 sudoers 訪問:
USERNAME = NOPASSWD: /path/to/script, /etc/init.d/httpd, /path/to/somethingelse
這個語法正確嗎?如果是這樣,我是否正確,我想在腳本中列出我不想被提示輸入密碼的所有特定命令? 2. 設置 suid
http://www.wellho.net/mouth/733_Perl-for-Systems-Admin-suid-scripts.html
以 root 權限執行 Perl 腳本:
a) 將腳本的所有者設置為 root
b) 設置文件上的 suid 位 (chmod u+s 文件名)
c) 關閉讀取權限,並對除 root 以外的所有人執行文件權限 (chmod go=x)
但其他研究表明,您只能在二進製文件上設置 suid後來的 Linux 系統(我的腳本實際上將在舊版本的 RH4 上執行,但我們最終可能會升級,所以我希望向前兼容)。我不認為我想為此創建一個二進製文件! 3. ‘將 ssh 與生成的公鑰/私鑰一起使用。可以將密鑰配置為僅允許使用它執行某些命令。 4. 將任何需要 root 的腳本命令留在 sudo 中:
system ‘sudo rake ts:rebuild’ (當然,這有所有這些密碼提示的缺點!) 5. 以root身份執行腳本
但是我想以普通使用者身份執行的命令呢? 6. 以root身份執行 su username (對於需要以普通使用者執行的任務)
‘以root身份執行腳本,以root身份執行一堆任務,su newUser以newUser身份執行一堆任務,exit(退出回root使用者) 以 root 身份執行更多任務。(下面由詹姆斯提出)
我為沒有更好地掌握這個主題而感到羞恥,但我有點驚訝於我提到的有多少 Ruby“腳本書籍”沒有解決這個問題!我想這更像是一個’nix’的事情,但似乎做任何有實質性用途的事情,你可能會遇到這個。
編輯:像mysql這樣的一些東西我可以在命令中使用選項,比如–password,所以我用它來做到這一點:
puts "Remote Password: " system('stty -echo') password = STDIN.gets.chomp puts "Mysql Password (local): " mysql_local_password = STDIN.gets.chomp system('stty echo')
然後我可以在腳本中使用這些密碼,但它們永遠不會被視為明文。但這當然不適用於所有事情。
我應該提到的另一件事是需要以不同使用者身份執行的命令(除了 root 和一個普通使用者之外,可能還有一個“建構”使用者等)
問題:請幫助我理解這些(以及任何其他建議或更好的解決方案)的利弊。此外,如果有一本權威的書籍、連結、手冊頁等,可以說明腳本如何與底層系統的權限互動,你可以參考我,那也很好。
謝謝大家!
你有沒有為你的任務研究過capistrano、puppet、ansible或chef之類的東西?
你沒有提到你的工作範圍是什麼,所以我不知道它們是否對你有用。
我會不惜一切代價避免“suid”。安裝 sudo 使用它是沒有意義的,這似乎是您執行具有不同權限/使用者 ID(‘sudo -u user2 command2’等)的命令的要求的最佳選擇。
此外,您可能希望在基於密鑰的 ssh 會話(ssh sshkeyaccessonlyuser@yourhost ‘sudo command’)中執行一些無密碼的 sudo 命令作為允許的命令。如果您不想在 sudo 中有更長的密碼記憶體,這可以解決記憶體問題,並且您的腳本將無法及時完成執行 sudo 命令。