1. 程式人生 > >linux的su,su - 和sudo的區別

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