1. 程式人生 > >Linux使用者切換命令的使用——su、sudo

Linux使用者切換命令的使用——su、sudo

一. su

  1. su用於使用者之間的切換,但是切換前的使用者依然保持登入狀態。如果是root向普通切換則不需要密碼,反之普通使用者切換到其它任何使用者則都需要密碼驗證。
  2. su不加任何引數預設切換到root使用者,但沒有轉到root使用者根目錄下;su 加引數-,表示預設切換到 root 使用者,並轉到 root 使用者根目錄下。
  3. su的明顯不足在於如果某個使用者需要使用 root 許可權、則必須要把root密碼告訴此使用者。
  4. 退出返回之前的使用者:exit

切換到git使用者

[root@iZ2ze9twtxjrbirmldp9owZ ~]# su git
[git@iZ2ze9twtxjrbirmldp9owZ
root]$ pwd /root [git@iZ2ze9twtxjrbirmldp9owZ root]$ exit exit [root@iZ2ze9twtxjrbirmldp9owZ ~]#

以下操作是使用haha使用者登入客戶端操作的

[haha@centos6-1 ~]$ su
Password: 
[root@centos6-1 haha]# pwd
/home/haha
[root@centos6-1 haha]# exit
exit
[haha@centos6-1 ~]$ su -
Password: 
[root@centos6-1 ~]# pwd
/root
[root@centos6
-1 ~]#

二. sudo

sudo是為所有想使用root許可權的普通使用者設計的,可以讓普通使用者具有臨時使用root許可權的權利,只需輸入自己賬戶的密碼即可。當然這個普通使用者必須在/etc/sudoers檔案中有配置項才具有使用sudo的權利。

沒有配置許可權之前,普通使用者無法進行 root 許可權操作:

[haha@centos6-1 ~]$ pwd
/home/haha
[haha@centos6-1 ~]$ ll /root/
ls: cannot open directory /root/: Permission denied
[haha@centos6-1 ~]$ 

沒有配置許可權之前,不能使用sudo

[haha@centos6-1 ~]$ sudo ls /root/
[sudo] password for haha: 
haha is not in the sudoers file.  This incident will be reported.
[haha@centos6-1 ~]$ 

使用root使用者登入配置haha使用者的sudo許可權,命令列輸入 visudo,開啟/etc/sudoers 檔案。注意,官方不建議直接vi /etc/sudoers對其進行修改

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL     //在檔案中找到這一行
haha    ALL=(ALL)       ALL     //並在其下面新增此行,這樣haha就可以使用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

用haha使用者再次登入客戶端操作,發現成功了

[haha@centos6-1 ~]$ sudo ls /root/
[sudo] password for haha: 
anaconda-ks.cfg  install.log  install.log.syslog  license  notice
[haha@centos6-1 ~]$ 

sudo的工作過程如下:

1. 當用戶執行 sudo 時,系統會主動尋找/etc/sudoers 檔案,判斷該使用者是 否有執行 sudo 的許可權
2. 確認使用者具有可執行 sudo 的許可權後,讓使用者輸入使用者自己的密碼確認
3. 若密碼輸入成功,則開始執行 sudo 後續的命令

/etc/sudoers檔案中配置的含義

haha ALL=(ALL) ALL
第一個 ALL 是指網路中的主機,我們可以指定主機名,這樣 haha 只可以 在此主機上執行後面的命令。第二個括號裡的 ALL 是指目標使用者,也就是以誰的 身份去執行命令。最後一個 ALL 是指命令名了。

haha centos6-1=(zaomianbao)/bin/kill //只允許haha使用者以zaomianbao使用者的身份在centos6-1上執行kill命令
haha centos6-1=NOPASSWD:/bin/ls, /bin/cat  //只允許haha使用者以root身份在centos6-1上執行ls 、cat命令

我們修改haha為第二個形式haha centos6-1=NOPASSWD:/bin/ls, /bin/cat

[haha@centos6-1 ~]$ sudo ls /root/
anaconda-ks.cfg  install.log  install.log.syslog  license  notice
[haha@centos6-1 ~]$ sudo cat /root/anaconda-ks.cfg
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
cdrom
[haha@centos6-1 ~]$ sudo vi /root/anaconda-ks.cfg
[sudo] password for haha: 
Sorry, user haha is not allowed to execute '/bin/vi /root/anaconda-ks.cfg' as root on centos6-1.
[haha@centos6-1 ~]$

可以看到,haha使用者具有ls和cat的許可權,但是沒有vi的許可權