在使用Linux系統中,有時候還需要做身份切換,這是為什麼? 使用普通賬號 :系統日常操作的好習慣 雖然使用root對系統進行各種操作不受許可權等方面的限制,但卻存在重大的安全隱患,假如有人不小心輸入的命令 rm rf / 。因此為了安全,一般都建議儘量以普通 ...
在使用Linux系統中,有時候還需要做身份切換,這是為什麼?
- 使用普通賬號:系統日常操作的好習慣
雖然使用root對系統進行各種操作不受許可權等方面的限制,但卻存在重大的安全隱患,假如有人不小心輸入的命令 rm -rf /。因此為了安全,一般都建議儘量以普通用戶身份來進行系統日常操作,而在需要用戶超級許可權來管理和配置系統時才需要切換到 root用戶。 - 用較低許可權啟動系統服務
相對於系統安全,我們必須要以某些系統賬號執行某些程式。如MySQL,我們則可以新建一個mysql賬號來專門執行MySQL服務或程式。這樣可以最大限度的保證系統安全。 - 系統安全策略限制
為了系統安全,禁止遠程以root賬戶登錄系統是基本的安全策略手段
基於以上考慮,在日常應用中都是使用普通賬戶進行登錄和常用操作。如果需要維護系統或安裝、更新軟體時,則需要切換到root身份進行操作。而常用的方式主要有兩個:
- su:可以切換到指定的用戶,如果切換到root,則需要知道root的密碼
- sudo:提前設置好sudo許可權,執行以sudo 命令,則可以以root身份執行命令,相比於su而言,可以保證root密碼不會泄漏。
su
su全稱為:switch user,其主要功能為進行任何身份的切換,其常用用法如下所示:
基本用法
su [選項] [用戶名]
su -c 命令
常用選項如下所示:
選項 | 解釋 |
---|---|
-,-l | 切換身份的同時初始化HOME/SHELL/USER/LOGNAME/PATH等變數 |
-c command | 僅執行一次指定的命令,而後恢複原來的身份 |
-m | 使用當前的環境設置而不讀取新用戶的配置文件 |
-s SHELL | 運行指定的SHELL,僅支持/etc/shells中支持的SHELL |
su註意事項
- 若要完整切換到新用戶的環境,必須要使用su - username或su -l username。這種功能類似於Windows註銷當前用戶再登錄到指定用戶
- su -,-l:如果後面不指定用戶名,則預設切換至root賬戶。
- 使用root切換到任意其他賬戶,不需要輸入密碼,而反過來則需要輸入密碼。
用法示例
1、切換到root
[admin@localhost ~]$ su -
密碼:
上一次登錄:六 8月 18 18:10:46 CST 2018pts/2 上
最後一次失敗的登錄:六 8月 18 18:17:04 CST 2018從 58.218.92.37ssh:notty 上
最有一次成功登錄後有 142 次失敗的登錄嘗試。
[root@localhost ~]# id
uid=0(root) gid=0(root) 組=0(root)
root用戶的尾碼是 # ,而普通用戶為 $
2、執行指定命令行後即返回原來的身份
[admin@localhost ~]$ head -n 2 /etc/shadow
head: 無法打開"/etc/shadow" 讀取數據: 許可權不夠
[admin@localhost ~]$ su - -c "head -n 2 /etc/shadow"
密碼:
root:$6$UbRYE8f8cxI757Lw$BJjLlD./2Om51RcIQadxZ8LbKpWzaVDISDpXd5rNPergZQWH2VAPF7LXRp/HCjx95xk2rd.Lw2Tiggs8Cr1WG0::0:99999:7:::
bin:*:17632:0:99999:7:::
sudo
su使用起來非常方便,但同樣也存在安全隱患。在一臺伺服器上面,如果有多人使用,在使用su命令切換到root後,則大家都知道了root密碼,那麼以後其他用戶均可以以root用戶身份登錄和維護伺服器,則安全策略形同虛設了。那該如何是好?Linux系統中則提供了另外一個命令sudo。
基本用法
sudo主要功能是以其他用戶身份執行命令,而要輸入的密碼也僅僅是當前用戶身身的密碼而非root賬戶密碼,類似於Windows系統中的以管理員身份運行。其常用用法如下所示:
sudo [選項] [命令]
常用選項如下所示:
選項 | 解釋 |
---|---|
-b | 在後臺執行指定的命令 |
-u | 以指定用戶身份運行,如不指定則預設為root |
-e | 編輯文件而不是運行命令 |
執行流程
- 1、當用戶執行sudo時,系統會在/etc/sudoers文件查找該用戶是否有執行sudo的許可權。
- 2、若用戶擁有執行sudo許可權後,則輸入用戶自身的密碼確認
- 3、若密碼確認成功,即可執行sudo後面的命令
- 4、若切換身份與執行者身份相同,則無需要輸入密碼
基於以上流程,能否使用sudo則要看/etc/sudoers中的設置
基本配置
- 1、單一用戶可執行root所有命令
[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root ALL=(ALL) ALL # 系統預設
admin ALL=(ALL) ALL # 用戶增加
各項解釋如下所示:
root/admin:用戶賬號,指定哪些賬號可使用sudo命令
ALL=(ALL):登錄者的來源主機名=可切換的身份
登錄者的來源主機名:設置賬號可由哪一臺網路主機連接過來,即設置可信任主機。
可切換的身份:賬號可以切換成什麼身份來執行後續的命令
ALL:可執行的命令:這個路徑必須以絕對路徑來填寫
ALL是特殊關鍵字,代表任何身份、任何主機和任何命令的意思。
- 2、利用用戶組和免密碼的功能
相比較於通過單個用戶而言,通過用戶組來控制更加方便靈活。
# 修改用戶的屬組,只用戶屬於wheel則可以執行sudo命令
[root@localhost ]# usermod -a -G wheel admin
[root@localhost ~]# visudo
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL # %wheel:代表任何組
# 使用sudo 命令而不需要輸入密碼
%wheel ALL=(ALL) NOPASSWD: ALL
- 3、有限制的命令操作
以上兩種方法,可以方便用戶利用root身份執行任何事情,如果想給用戶分配部分許可權執行命令,該如何配置?
[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
# 該用戶僅有執行 ls 的許可權,路徑必須為絕對路徑
admin ALL=(ALL) /usr/bin/ls
# 添加用戶的執行sudo命令的排除許可權,! 表示不可執行
admin ALL=(ALL) !/usr/bin/ls,!/usr/bin/passwd,!/usr/bin/passwd root
- 4、通過別名批量設置許可權
[root@localhost ~]# visudo
# 批量設置別名
# User_Alias ADMINS = jsmith, mikem
User_Alias ADMINS = admin,test,surpassme
# 批量設置命令許可權
## Command Aliases
Cmnd_Alias SOFTWARE = !/usr/bin/rpm,!/usr/bin/up2date,!/usr/bin/yum
# 設置sudo的限制命令
ADMINS ALL=(root) SOFTWARE
通過別名進行許可權設置均需要使用大寫字元
- 5、搭配su使用
在很多時間我們需要大量執行很多root的工作,所以一直使用sudo會覺得很麻煩,那有沒有簡單的辦法使sudo搭配su,一次性轉換為root,而且還是用戶自身的密碼?方法如下所示:
[root@localhost ~]# visudo
# 批量設置別名
# User_Alias ADMINS = jsmith, mikem
User_Alias ADMINS = admin,test,surpassme
# 設置sudo的限制命令
ADMINS ALL=(root) /usr/bin/su -
# 使用按以下輸入即可,即可直接切換為root用戶
[root@localhost ~]# sudo su -
本文同步在微信訂閱號上發佈,如各位小伙伴們喜歡我的文章,也可以關註我的微信訂閱號:woaitest,或掃描下麵的二維碼添加關註: