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。