Linux使用者切換命令的使用——su、sudo
阿新 • • 發佈:2019-01-11
一. su
- su用於使用者之間的切換,但是切換前的使用者依然保持登入狀態。如果是root向普通切換則不需要密碼,反之普通使用者切換到其它任何使用者則都需要密碼驗證。
- su不加任何引數預設切換到root使用者,但沒有轉到root使用者根目錄下;su 加引數-,表示預設切換到 root 使用者,並轉到 root 使用者根目錄下。
- su的明顯不足在於如果某個使用者需要使用 root 許可權、則必須要把root密碼告訴此使用者。
- 退出返回之前的使用者: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的許可權