2007年11月12日 星期一

終於搞懂 sudo 了

原來 sudo 不只有我想像的這麼多而已
相關連結可以參考 鳥哥 的網站
主要用途在於多人管理同一台主機的時候,可以依照每個人負責領域的不同
而各自有其相對應的部分 root 權限
舉例來說, 管 DNS 的人,大概只會動到以下需要 root 才能執行的指令
  • 重新啟動服務: /etc/init.d/named
  • 修改設定檔: /usr/bin/vim /var/named/*
這時就可以考慮用 sudo 限制他可以以 root 身分執行以上兩個命令,其他的不行
User_Alias DNSMASTER = vbird, dmtsai
Cmnd_Alias DNSCMD = /etc/init.d/named, /usr/bin/vim /var/named/*
DNSMASTER ALL = DNSCMD
visudo 指令格式說明:
使用者或Alias 從哪裡登入=(允許以這個身分執行,缺省值是 root) 指令1,指令2:(允許以這個身分執行,缺省值是 root) 指令3,指令4:...

參數說明:
-l 顯示出自己(執行 sudo 的使用者)的權限
-v 因為 sudo 在第一次執行時或是在 N 分鐘內沒有執行(N 預設為五)會問密碼,這個參數是重新做一次確認(update the user's timestamp),如果超過 N 分鐘,也會問密碼
-k 將會強迫使用者在下一次執行 sudo 時問密碼(不論有沒有超過 N 分鐘)
-b 將要執行的指令放在背景執行
-p prompt 可以更改問密碼的提示語,其中 %u 會代換為使用者的帳號名稱, %h 會顯示主機名稱
-u username/#uid 不加此參數,代表要以 root 的身份執行指令,而加了此參數,可以以 username 的身份執行指令(#uid 為該 username 的使用者號碼)
-s 執行環境變數中的 SHELL 所指定的 shell ,或是 /etc/passwd 裡所指定的 shell
-H 將環境變數中的 HOME (家目錄)指定為要變更身份的使用者家目錄(如不加 -u 參數就是系統管理者 root )
command 要以系統管理者身份(或以 -u 更改為其他人)執行的指令
範例:
$ sudo -l 列出目前的權限
User ppc52776 may run the following commands on this host:
(cocolee) ALL
(ppc52776) ALL
(root) /bin/su -

不過我 來源設定 好像都不能運作??只有設定為ALL的會顯示出來

完整範例:

設定:
$ visudo
User_Alias ADMINS = ppc52776, admin2
User_Alias WEBADM = webadmin1, webadmin2
#以下允許ADMINS直接 su - 到 root
ADMINS ALL=/bin/su -
#以下允許 WEBADM 以 root 啟動apache,並以 apache 編輯網頁
WEBADM ALL=/etc/init.d/apache:ALL=(apache) /bin/vim /var/htdocs/*

結果:
webadmin1@www: $ sudo -l
User webadmin1 may run the following commands on this host:
(root) /etc/init.d/apache
(apache) /bin/vim /var/htdocs/*

啟動apache: sudo /etc/init.d/apache start
改網頁: sudo -u apache vi /var/htdocs/index.htm

其他注意事項:
  • Alias必須全為大寫字串
  • 允許執行的指令,必須為完整路徑
  • 允許執行的指令,sudo 只會檢查到你允許的部分,後面他要加什麼參數都可以
  • 如以上範例 /etc/init.d/apache ,他後面可以自行接 start or stop 的參數
所以好好善用 sudo ,可以方便規劃每個管理員有各自該有的權限,而不用每個人都需要知道 root 密碼
其他範例: http://www.study-area.org/tips/sudo.htm

沒有留言:

Related Posts Plugin for WordPress, Blogger...