對于 su , su - , sudo的理解
su 與 su - 的相同點(diǎn)與區(qū)別
su全稱是switch user藕咏,意思就是切換用戶的功能.
當(dāng)我們需要使用更高的權(quán)限去執(zhí)行命令時(shí)笋熬,則需要先獲取root權(quán)限凡橱。因此su 思币、su - 這樣的命令也就誕生了。
- 相同點(diǎn): 默認(rèn)情況下 su 與 su - 都是切換成root用戶 (有一個(gè)關(guān)于root密碼的知識點(diǎn) 下面將講解)
nieyh@nieyh-QTJ5:~$ su
密碼:
root@nieyh-QTJ5:/home/nieyh#
nieyh@nieyh-QTJ5:~$ su -
密碼:
root@nieyh-QTJ5:/home/nieyh#
- 不同點(diǎn):su 切換用戶卻不切換工作環(huán)境 , su - 同是切換用戶與工作環(huán)境, 如果Shell環(huán)境不一樣將會出現(xiàn)下面的無法找到對應(yīng)命令的問題。
nieyh@nieyh-QTJ5:~$ su
密碼:
root@nieyh-QTJ5:/home/nieyh# pwd
/home/nieyh
root@nieyh-QTJ5:/home/nieyh# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
root@nieyh-QTJ5:/home/nieyh# adb
程序 'adb' 已包含在下列軟件包中:
* adb
* android-tools-adb
請嘗試:apt install <選定的軟件包>
nieyh@nieyh-QTJ5:~$ su - root
密碼:
root@nieyh-QTJ5:~# pwd
/root
root@nieyh-QTJ5:~# echo $PATH
/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/nieyh/Android/Sdk/platform-tools/:/home/nieyh/Android/Sdk/tools/
root@nieyh-QTJ5:~# adb
Android Debug Bridge version 1.0.39
Revision 3db08f2c6889-android
Installed as /home/nieyh/Android/Sdk/platform-tools/adb
global options:
-a listen on all network interfaces, not just localhost
-d use USB device (error if multiple devices connected)
-e use TCP/IP device (error if multiple TCP/IP devices available)
-s SERIAL
use device with given serial number (overrides $ANDROID_SERIAL)
-p PRODUCT
name or path ('angler'/'out/target/product/angler');
default $ANDROID_PRODUCT_OUT
-H name of adb server host [default=localhost]
-P port of adb server [default=5037]
-L SOCKET listen on given socket for adb server [default=tcp:localhost:5037]
su的缺點(diǎn)造就了sudo的誕生
由于用戶通過 su root 命令直接獲取root權(quán)限,從而造成用戶的權(quán)限太大静汤,也就可能給系統(tǒng)造成危險(xiǎn)。
為了既保證系統(tǒng)的安全又可以執(zhí)行相應(yīng)命令居凶,sudo 也就以此誕生虫给。
sudo 通過配置文件來限制用戶的權(quán)限 (以下就是 /etc/sudoers 文件)
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
可以看到上面的配置 %sudo ALL=(ALL:ALL) ALL, sudo 可以執(zhí)行任何命令,所以下面的命令也沒有報(bào)錯(cuò)侠碧。
nieyh@nieyh-QTJ5:~$ sudo apt-get clean
[sudo] nieyh 的密碼:
nieyh@nieyh-QTJ5:~$
當(dāng)我將配置改成這樣子,
# Allow members of group sudo to execute any command
%sudo ALL=/sbin/mount
#ALL=(ALL:ALL) ALL
就會出現(xiàn)下面的錯(cuò)誤提示
nieyh@nieyh-QTJ5:~$ sudo apt-get
[sudo] nieyh 的密碼:
對不起抹估,用戶 nieyh 無權(quán)以 root 的身份在 nieyh-QTJ5 上執(zhí)行 /usr/bin/apt-get。
所以通過 /etc/sudoers 配置文件來限制用戶的權(quán)限使用弄兜,可以達(dá)到安全可控的目的棋蚌。(更多的文件配置方法請自行百度或者等待作者更新)
總結(jié)
一般的使用情況下,最好使用sudo來執(zhí)行命令挨队,避免自己誤操作破壞了系統(tǒng)。
如果是存在多用戶使用同一個(gè)系統(tǒng)的話蒿往,主用戶可以使用root權(quán)限來配置 /etc/sudoers 文件來指派不同用戶不同的權(quán)限盛垦,從而保證系統(tǒng)的安全。
額外的補(bǔ)充下root密碼的問題
如果用戶忘記了root密碼, 并且sudo能獲取到最高權(quán)限瓤漏,則可以通過一下命令來修改密碼 (如果沒有root權(quán)限的話, 只能通過操作系統(tǒng)來清空密碼)
root@nieyh-QTJ5:~# sudo passwd
輸入新的 UNIX 密碼:
重新輸入新的 UNIX 密碼:
passwd:已成功更新密碼
此為作者的理解腾夯,如有不對的地方請指正颊埃。
如果覺得喜歡本片篇文章的話,↓↓↓↓↓↓↓請點(diǎn)擊下面的喜歡蝶俱,或者給予打賞(這樣的話我會更加努力去寫更好的文章的)↓↓↓↓↓↓↓