天天看點

linux的su,su - 和sudo的差別

su,就是switch user,即轉換使用者的意思。

sudo的出現隻是為了讓su安全一點,rm指令用起來爽,代價可大了。

gyz是home下的一個使用者。

1,先看終端表面上的差別:

a,從普通使用者gyz切換到超級使用者root(後面不跟root使用者名)

a1.........su:(允許操作)

[gyz@archlinux ~]$ ls
公共  模闆  視訊  圖檔  文檔  下載下傳  音樂  桌面  job  work
[gyz@archlinux ~]$ su
密碼:
[root@archlinux gyz]# ls
公共  模闆  視訊  圖檔  文檔  下載下傳  音樂  桌面  job  work
[root@archlinux gyz]# pwd
/home/gyz
[root@archlinux gyz]#      

a2.........su -:(允許操作)

[gyz@archlinux ~]$ ls
公共  模闆  視訊  圖檔  文檔  下載下傳  音樂  桌面  job  work
[gyz@archlinux ~]$ su -
密碼:
[root@archlinux ~]# ls
[root@archlinux ~]# pwd
/root
[root@archlinux ~]#      

 a3.........sudo:(半允許操作)

[gyz@archlinux ~]$ ls
公共  模闆  視訊  圖檔  文檔  下載下傳  音樂  桌面  job  work
[gyz@archlinux ~]$ sudo 
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user]
            [command]
usage: sudo [-AbEHknPS] [-C num] [-g group] [-h host] [-p prompt] [-T timeout]
            [-u user] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-C num] [-g group] [-h host] [-p prompt] [-T timeout]
            [-u user] file ...
[gyz@archlinux ~]$      

b,從普通使用者gyz切換到超級使用者root(後面跟root使用者名)

b1.........su root:(允許操作)

[gyz@archlinux ~]$ ls
公共  模闆  視訊  圖檔  文檔  下載下傳  音樂  桌面  job  work
[gyz@archlinux ~]$ su root
密碼:
[root@archlinux gyz]# ls
公共  模闆  視訊  圖檔  文檔  下載下傳  音樂  桌面  job  work
[root@archlinux gyz]# pwd
/home/gyz
[root@archlinux gyz]#      

b2.........su - root:(允許操作)

[gyz@archlinux ~]$ ls
job  work  下載下傳  公共  圖檔  文檔  桌面  模闆  視訊  音樂
[gyz@archlinux ~]$ su - root
Password: 
[root@archlinux ~]# ls
[root@archlinux ~]# pwd
/root
[root@archlinux ~]#      

b3.........sudo root:(無此操作)

[gyz@archlinux ~]$ ls
job  work  下載下傳  公共  圖檔  文檔  桌面  模闆  視訊  音樂
[gyz@archlinux ~]$ sudo root
[sudo] password for gyz: 
sudo: root: command not found
[gyz@archlinux ~]$      

從上面的a1和b1是等效的,a2和b2也是等效的,事實上,su和su -後面不加root的話,預設就是root。

2,從普通使用者gyz到普通使用者tester

home下沒有tester這個使用者的,可以添加一個tester:

[gyz@archlinux home]$ ls
gyz  tester
[gyz@archlinux home]$ mkdir tester
mkdir: 無法建立目錄 “tester”: 檔案已存在
[gyz@archlinux home]$ sudo useradd -d /home/tester -s /bin/bash tester
useradd:使用者“tester”已存在
[gyz@archlinux home]$ sudo passwd tester
新的 密碼:
重新輸入新的 密碼:
passwd:已成功更新密碼
[gyz@archlinux home]$      

-d是指定/home/tester 為主目錄,-s是指定shell 腳本。

a1.........su tester:(允許操作)

[gyz@archlinux home]$ su tester
密碼:
[tester@archlinux home]$ ls 
gyz  tester
[tester@archlinux home]$ pwd
/home
[tester@archlinux home]$      

a2.........su  - tester:(允許操作)

[gyz@archlinux home]$ su - tester
Password: 
[tester@archlinux ~]$ ls
[tester@archlinux ~]$ pwd
/home/tester
[tester@archlinux ~]$      

a3.........sudo tester:(不允許操作)

[gyz@archlinux home]$ sudo tester
sudo: tester:找不到指令
[gyz@archlinux home]$      

3,本質差別:

a,“su 使用者”隻是使用者身份切換了,但是環境沒有變,比如bash的配置,用的是切換前的使用者的,我們pwd的時候,也發現了,切換前後,路徑并沒有變;

b,“su -  使用者”不但使用者身份切換了,而且環境也跟着變了,此時bash的配置,使用的root的配置,pwd的時候,發現它跑到了它的主目錄下了,即我們cd ~的那個目錄;

c,“sudo 指令”隻是允許使用者以root身份執行該指令,權利僅僅限于此次指令的執行,在/etc/sudoers(這個檔案是only read的,可以先給個寫權限,寫完儲存,再取消寫權限,不過我看到說sudo visudo會保證該檔案的讀寫安全性,即你在修改時,别人不能修改)裡面修改;

d,“su 使用者”“su - 使用者”這裡輸入的密碼是要切換到的使用者的密碼(如果是root,則輸入root的密碼),"sudo 指令"隻是當且使用者的密碼;

e,“sudo 指令”也不牽扯切換使用者的說法,是以sudo雖然麻煩,但是比較安全;

f,su -比su多了一些操作,主要是讀取了root和系統的bash的配置檔案;

g,sudo在部分腳本或者軟甲内是不能用的,會看是不是全部的root身份;

h,su -等同于su過去後執行: bash /etc/profile和bash /root/.bashrc;

l,如果切換身份最好使用su - xxx。

繼續閱讀