1. 程式人生 > >su 與sudo

su 與sudo

su和sudo

  1.1 su

作用:切換到其他使用者賬戶進行登入。

注意事項:

  (1)root使用者切換到普通使用者是不需要輸入密碼確認。普通使用者切換至root需要輸入root密碼確認,普通使用者相互切換需要對方的密碼

 (2)如果su不帶任何選項及引數,預設切換到root賬戶且不改變shell環境

 (3)使用su時一定要帶- 即su – 要不然對於一個運維來說是非常low的表現

 

   實驗 :su和 su -的區別

[[email protected] ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[
[email protected]
 ~]# pwd /root [[email protected] ~]# su desperadochn [[email protected] root]$ pwd /root   #還是root的家目錄 [[email protected] root]$ echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin  #還是root的環境變數 [
[email protected]
 root]$ su - desperadochn 密碼: 上一次登入:五 4月 29 23:28:37 CST 2016pts/1 上 [[email protected] ~]$ pwd /home/desperadochn   #這時家目錄對了 [[email protected] ~]$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/desperadochn/.local/bin:/home/desperadochn/bin  #這才是desperadochn的環境變數

 

 因此我們可以得出結論:

      (1)su不帶- 只切換使用者不會切換環境變數及家目錄等使用者獨有的設定。這可能會產生問題

      (2)一定要用su –

 

1.2、sudo

         當我們需要在執行一些不得不執行的命令但是這些命令只有root才能執行時,又不想或者不能切換成root(root許可權太高,要慎用)這時我們就需要sudo

        首先sudo需要由root授權,root將那個使用者可以使用哪種命令進行授權,即對/etc/sudoers檔案進行修改。

        當普通使用者需要使用獲得授權的只有用root才能使用的命令時,在前面帶上sudo,之後輸入自己使用者的密碼,之後就能以root許可權使用該命令了,密碼有效期5分鐘,在5分鐘內再次使用sudo將不需要密碼。

     許多發行版甚至預設不允許root使用者直接登入,但是可以用sudo操作只有root才能完成的操作。

           特點:

              (1)sudo能限制使用者只能在某一臺主機上執行指定命令。

              (2)sudo提供了豐富的日誌

              (3)sudo的配置檔案是 /etc/sudoers

實現:

     1、檢視sudo軟體是否安裝

[[email protected] ~]$ rpm -q sudo
sudo-1.8.6p7-16.el7.x86_64

  2、/etc/sudoers 檔案詳解

## Host Aliases    定義主機別名
## Groups of machines. You may prefer to use hostnames (perhaps using 
## wildcards for entire domains) or IP addresses instead.
# Host_Alias     FILESERVERS = fs1, fs2   #格式型別
# Host_Alias     MAILSERVERS = smtp, smtp2  #格式型別
  
## User Aliases   #使用者別名
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname 
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem   格式型別
  
  
## Command Aliases  定義命令別名
 
##
##     user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere 
root    ALL=(ALL)  ALL    #設定sudo部分,這一條表示root使用者可以在任何主機執行任意命令
  
## Allows members of the 'sys' group to run networking, software, 
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS 這一條表示sys組成員可以在任何主機執行網路、軟體方面的命令
  
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)   ALL    #%wheel組成員可以在任何主機上執行任何命令
  
## Same thing without a password
# %wheel   ALL=(ALL)   NOPASSWD: ALL    #%wheel組成員可以在任何主機上執行任何命令,且不需要密碼
  
## Allows members of the users group to mount and unmount the 
## cdrom as root
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom  允許%user組使用者執行sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom命令
  
## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now     允許%user組成員可以在本機執行/sbin/shutdown -h now  命令
  
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

雖然我們可以通過vim等工具修改/etc/sudoers檔案,有專門的命令設定sudo許可權——visudo他的優點是帶語法檢查。

   命令格式:

            visudo [選項]

            -c:啟用check—only 模式,sudoers檔案將被檢查語法錯誤、所有者和模式

            -q:不進行語法檢查

            -s:啟用嚴格檢查sudoers檔案

使用visudo編輯/etc/sudoers檔案

[[email protected] ~]# visudo

檢查:

[[email protected] ~]# visudo -c
/etc/sudoers:解析正確

sudo命令      命令格式:                sudo [選項] [命令]                    

                 -l:列出使用者能執行的命令

 

實驗:

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
desperadochn  ALL=(root)        /usr/sbin/useradd

試一下:

[[email protected] ~]# su - desperadochn
上一次登入:六 9月 30 03:30:43 CST 2018pts/1 上
[[email protected] ~]$ sudo -l
匹配此主機上 desperadochn 的預設條目:
    requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
  
使用者 desperadochn 可以在該主機上執行以下命令:
    (root) /usr/sbin/useradd
[[email protected] ~]$ useradd xxx
-bash: /usr/sbin/useradd: 許可權不夠
[[email protected] ~]$ sudo  /usr/sbin/useradd baibudonghei
[[email protected] ~]$ id baibudonghei
uid=1003(baibudonghei) gid=1003(baibudonghei) 組=1003(baibudonghei)
    • 絕對在任何時候不要將sudosetUidsetGid許可權賦予工具型命令如vimvi

    • sudu許可權設定時最好帶上命令詳細引數