linux的su,su - 和sudo的區別
有錯的地方,或者不同意見的,煩請留言,或者發郵箱。
郵箱地址:[email protected]
—————————————————————————————————
su,就是switch user,即轉換使用者的意思。
sudo的出現只是為了讓su安全一點,rm命令用起來爽,代價可大了。
gyz是home下的一個使用者。
1,先看終端表面上的區別:
a,從普通使用者gyz切換到超級使用者root(後面不跟root使用者名稱)
a1.........su:(允許操作)
[[email protected] ~]$ ls
公共 模板 視訊 圖片 文件 下載 音樂 桌面 job work
[ [email protected] ~]$ su
密碼:
[[email protected] gyz]# ls
公共 模板 視訊 圖片 文件 下載 音樂 桌面 job work
[[email protected] gyz]# pwd
/home/gyz
[[email protected] gyz]#
a2.........su -:(允許操作)
[[email protected] ~]$ ls
公共 模板 視訊 圖片 文件 下載 音樂 桌面 job work
[[email protected] ~]$ su -
密碼:
[ [email protected] ~]# ls
[[email protected] ~]# pwd
/root
[[email protected] ~]#
a3.........sudo:(半允許操作)
[[email protected] ~]$ ls
公共 模板 視訊 圖片 文件 下載 音樂 桌面 job work
[[email protected] ~]$ 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 ...
[ [email protected] ~]$
b,從普通使用者gyz切換到超級使用者root(後面跟root使用者名稱)
b1.........su root:(允許操作)
[[email protected] ~]$ ls
公共 模板 視訊 圖片 文件 下載 音樂 桌面 job work
[[email protected] ~]$ su root
密碼:
[[email protected] gyz]# ls
公共 模板 視訊 圖片 文件 下載 音樂 桌面 job work
[[email protected] gyz]# pwd
/home/gyz
[[email protected] gyz]#
b2.........su - root:(允許操作)
[[email protected] ~]$ ls
job work 下載 公共 圖片 文件 桌面 模板 視訊 音樂
[[email protected] ~]$ su - root
Password:
[[email protected] ~]# ls
[[email protected] ~]# pwd
/root
[[email protected] ~]#
b3.........sudo root:(無此操作)
[[email protected] ~]$ ls
job work 下載 公共 圖片 文件 桌面 模板 視訊 音樂
[[email protected] ~]$ sudo root
[sudo] password for gyz:
sudo: root: command not found
[[email protected] ~]$
從上面的a1和b1是等效的,a2和b2也是等效的,事實上,su和su -後面不加root的話,預設就是root。
2,從普通使用者gyz到普通使用者tester
home下沒有tester這個使用者的,可以新增一個tester:
[[email protected] home]$ ls
gyz tester
[[email protected] home]$ mkdir tester
mkdir: 無法建立目錄 “tester”: 檔案已存在
[[email protected] home]$ sudo useradd -d /home/tester -s /bin/bash tester
useradd:使用者“tester”已存在
[[email protected] home]$ sudo passwd tester
新的 密碼:
重新輸入新的 密碼:
passwd:已成功更新密碼
[[email protected] home]$
-d是指定/home/tester 為主目錄,-s是指定shell 指令碼。
a1.........su tester:(允許操作)
[[email protected] home]$ su tester
密碼:
[[email protected] home]$ ls
gyz tester
[[email protected] home]$ pwd
/home
[[email protected] home]$
a2.........su - tester:(允許操作)
[[email protected] home]$ su - tester
Password:
[[email protected] ~]$ ls
[[email protected] ~]$ pwd
/home/tester
[[email protected] ~]$
a3.........sudo tester:(不允許操作)
[[email protected] home]$ sudo tester
sudo: tester:找不到命令
[[email protected] 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。
推薦一個QQ群:374738050