The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

          Linux系統中,有時候普通用戶有些事情是不能做的,除非是root用戶才能做到。這時就需要用su命令臨時切換到root身份來做事了。

          su:substitute['s?bst?tju?t]代替 user
          su 的語法為:
          su [OPTION選項參數] [用戶]
          -, -l, --login 登錄并改變到所切換的用戶環境;
          -c, --commmand=COMMAND 執行一個命令,然后退出所切換到的用戶環境;

          用su命令切換用戶后,可以用 exit 命令或快捷鍵[Ctrl+D]可返回原登錄用戶。

          例子:
          su 在不加任何參數,默認為切換到root用戶,但沒有轉到root用戶家目錄下,也就是說這時雖然是切換為root用戶了,但并沒有改變root登錄環境;用戶默認的登錄環境,可以在/etc/passwd 中查得到,包括家目錄,SHELL定義等;
          su 加參數 - ,表示默認切換到root用戶,并且改變到root用戶的環境;


          用su是可以切換用戶身份,如果每個普通用戶都能切換到root身份,如果某個用戶不小心泄漏了root的密碼,那豈不是系統非常的不安全?沒有錯,為了改進這個問題,產生了sudo這個命令。使用sudo執行一個root才能執行的命令是可以辦到的,但是需要輸入密碼,這個密碼并不是root的密碼而是用戶自己的密碼。默認只有root用戶能使用sudo命令,普通用戶想要使用sudo,是需要root預先設定的,即,使用visudo命令去編輯相關的配置文件/etc/sudoers。如果沒有visudo這個命令,請使用 "yum install -y sudo" 安裝。

          默認root能夠sudo是因為這個文件中有一行” root ALL=(ALL) ALL”

          sudo 的適用條件:
          由于su對切換到超級權限用戶root后,權限的無限制性,所以su并不能擔任多個管理員所管理的系統。如果用su來切換到超級用戶來管理系統,也不能明 確哪些工作是由哪個管理員進行的操作。特別是對于服務器的管理有多人參與管理時,最好是針對每個管理員的技術特長和管理范圍,并且有針對性的下放給權限, 并且約定其使用哪些工具來完成與其相關的工作,這時我們就有必要用到 sudo。
          通過sudo,我們能把某些超級權限有針對性的下放,并且不需要普通用戶知道root密碼,所以sudo 相對于權限無限制性的su來說,還是比較安全的,所以sudo 也能被稱為受限制的su ;另外sudo 是需要授權許可的,所以也被稱為授權許可的su;
          sudo 執行命令的流程:是當前用戶切換到root(或其它指定切換到的用戶),然后以root(或其它指定的切換到的用戶)身份執行命令,執行完成后,直接退回到當前用戶;而這些的前提是要通過sudo的配置文件/etc/sudoers來進行授權;

          從編寫 sudo 配置文件/etc/sudoers開始
          sudo的配置文件是/etc/sudoers ,我們可以用他的專用編輯工具visodu ,此工具的好處是在添加規則不太準確時,保存退出時會提示給我們錯誤信息;配置好后,可以用切換到您授權的用戶下,通過sudo -l 來查看哪些命令是可以執行或禁止的;
          /etc/sudoers 文件中每行算一個規則,前面帶有#號可以當作是說明的內容,并不執行;如果規則很長,一行列不下時,可以用\號來續行,這樣看來一個規則也可以擁有多個行;
          /etc/sudoers 的規則可分為兩類;一類是別名定義,另一類是授權規則;別名定義并不是必須的,但授權規則是必須的;

          sudo授權規則(sudoers配置):
          授權用戶 主機=命令動作
          這三個要素缺一不可,但在動作之前也可以指定切換到特定用戶下,在這里指定切換的用戶要用( )號括起來,如果不需要密碼直接運行命令的,應該加NOPASSWD:參數,但這些可以省略;舉例說明;

          sudoers的缺省配置:
          Html代碼  收藏代碼
          #############################################################  
          # sudoers file.  
          #  
          # This file MUST be edited with the 'visudo' command as root.  
          #  
          # See the sudoers man page for the details on how to write a sudoers file.  
          #  
          # Host alias specification  
          # User alias specification  
          # Cmnd alias specification  
          # Defaults specification  
          # User privilege specification  
          root    ALL=(ALL) ALL  
          # Uncomment to allow people in group wheel to run all commands  
          # %wheel        ALL=(ALL)       ALL  
          # Same thing without a password  
          # %wheel        ALL=(ALL)       NOPASSWD: ALL  
          # Samples  
          # %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom  
          # %users  localhost=/sbin/shutdown -h now  
          ##################################################################  

          1. 最簡單的配置,讓普通用戶support具有root的所有權限
          執行visudo之后,可以看見缺省只有一條配置:
          root    ALL=(ALL) ALL
          那么你就在下邊再加一條配置:
          support ALL=(ALL) ALL
          這樣,普通用戶support就能夠執行root權限的所有命令
          以support用戶登錄之后,執行:
          sudo su -
          然后輸入support用戶自己的密碼,就可以切換成root用戶了
          2. 讓普通用戶support只能在某幾臺服務器上,執行root能執行的某些命令
          首先需要配置一些Alias,這樣在下面配置權限時,會方便一些,不用寫大段大段的配置。Alias主要分成4種
          Host_Alias
          Cmnd_Alias
          User_Alias
          Runas_Alias
          1) 配置Host_Alias:就是主機的列表
          Host_Alias      HOST_FLAG = hostname1, hostname2, hostname3
          2) 配置Cmnd_Alias:就是允許執行的命令的列表,命令前加上!表示不能執行此命令.
          命令一定要使用絕對路徑,避免其他目錄的同名命令被執行,造成安全隱患 ,因此使用的時候也是使用絕對路徑!
          Cmnd_Alias      COMMAND_FLAG = command1, command2, command3 ,!command4
          3) 配置User_Alias:就是具有sudo權限的用戶的列表
          User_Alias USER_FLAG = user1, user2, user3
          4) 配置Runas_Alias:就是用戶以什么身份執行(例如root,或者oracle)的列表
          Runas_Alias RUNAS_FLAG = operator1, operator2, operator3
          5) 配置權限
          配置權限的格式如下:
          USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG
          如果不需要密碼驗證的話,則按照這樣的格式來配置
          USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG
          配置示例:
          Html代碼  收藏代碼
          ############################################################################  
          # sudoers file.  
          #  
          # This file MUST be edited with the 'visudo' command as root.  
          #  
          # See the sudoers man page for the details on how to write a sudoers file.  
          #  
          # Host alias specification  
          Host_Alias      EPG = 192.168.1.1, 192.168.1.2  
          # User alias specification  
          # Cmnd alias specification  
          Cmnd_Alias      SQUID = /opt/vtbin/squid_refresh, !/sbin/service, /bin/rm 
           
          Cmnd_Alias      ADMPW = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd, !/usr/bin/passwd root  
          # Defaults specification  
          # User privilege specification  
          root    ALL=(ALL) ALL  
          support EPG=(ALL) NOPASSWD: SQUID  
          support EPG=(ALL) NOPASSWD: ADMPW 
          # Uncomment to allow people in group wheel to run all commands  
          # %wheel        ALL=(ALL)       ALL  
          # Same thing without a password  
          # %wheel        ALL=(ALL)       NOPASSWD: ALL  
          # Samples  
          # %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom  
          # %users  localhost=/sbin/shutdown -h now  
          ############################################################### 

          posted on 2015-07-13 11:54 Eric_jiang 閱讀(245) 評論(0)  編輯  收藏 所屬分類: Linux
          主站蜘蛛池模板: 宁陕县| 宁城县| 德庆县| 县级市| 高雄市| 建平县| 邹平县| 英超| 东莞市| 故城县| 平舆县| 灵丘县| 宁陵县| 洞口县| 布拖县| 蕉岭县| 宾阳县| 蓬安县| 全州县| 宣城市| 永安市| 高唐县| 南乐县| 乳山市| 方城县| 霞浦县| 合阳县| 永新县| 淮安市| 台湾省| 咸丰县| 南宫市| 富宁县| 南昌县| 安宁市| 海伦市| 六枝特区| 同江市| 宣城市| 简阳市| 乐都县|