[toc] 用戶身份切換 如何在普通用戶的情況下,完成日常工作? 1) 切換用戶,使用普通用戶登錄,然後使用su命令切換到root。 優點:簡單,方便 缺點:需要知道root密碼,不安全,切換到root沒有日誌審計功能 2) 提權,當需要使用root許可權時,進行提權,而無需切換至root用戶。 優點 ...
目錄
- 用戶身份切換
- bash shell配置文件
- shell配置文件應用順序
- 如果全局配置和個人配置出現衝突, 那麼如何驗證呢?
- 創建用戶,並登錄系統
- 切換用戶,使用命令su [-] username
- .以某個用戶的身份執行某個服務,使用命令su -c username
- 用戶身份提權
- centos7提權
- centos6提權
- 普通用戶驗證sudo許可權
- sudo免密碼配置選項
- sudo配置組
- sudo執行流程
用戶身份切換
如何在普通用戶的情況下,完成日常工作?
1)su
切換用戶,使用普通用戶登錄,然後使用su命令切換到root。
優點:簡單,方便
缺點:需要知道root密碼,不安全,切換到root沒有日誌審計功能
2)sudo
提權,當需要使用root許可權時,進行提權,而無需切換至root用戶。
優點:安全,方便
缺點:複雜
shell分類
互動式shell //等待用戶輸入執行的命令(終端操作,需要不斷提示)
非互動式shell //執行shell腳本, 腳本執行結束後shell自動退出
登陸shell //需要輸入用戶名和密碼才能進入shell su - zls
非登陸shell //不需要輸入用戶和密碼就能進入,比如執行sh, bash, su username
//查看登陸shell
[root@zls ~]# pstree
//臨時設置,永久設置需要寫配置文件
[root@zls ~]# export PS1='[\h@\u \t]#'
[zls@root 02:06:28]
bash shell配置文件
Bash的配置文件保存用戶的工作環境
個人配置文件: ~/.bash_profile ~/.bashrc
全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc
profile類文件, 設定環境變數, 登陸前運行的腳本和命令
bashrc 類文件, 設定本地變數, 定義命令別名
全局配置和個人配置設置衝突, 優先使用個人配置準
shell配置文件應用順序
//登錄式shell配置文件執行順序
/etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc
//非登陸式shell配置文件執行順序
~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh
#驗證登陸shell和非登陸shell配置文件執行順序, 在每個配置文件加入一段 “echo”即可。
#最後通過登陸shell和非登錄shell方式登陸linux, 即可驗證執行順序。
如果全局配置和個人配置出現衝突, 那麼如何驗證呢?
編輯全局配置 /etc/profile 新增一行: PS1='[\h@\u \t]#'
[zls@root 02:16:57]# //當前終端shell環境
編輯個人配置 ~/.bash_profile 新增一行: PS1='[\u@\H]#'
[zls@root 02:18:27]#su zls_zls
[zls_zls@zls root]$
[zls@root 02:18:34]# su - zls_zls
[[email protected]]#
創建用戶,並登錄系統
[root@zls ~]# useradd zls
[root@zls ~]# echo "123"|passwd --stdin zls
//使用zls用戶登錄當前Linux系統
➜ ~ ssh [email protected]
[email protected]'s password:
[zls@zls ~]$
//可以使用whoami查看當前登錄用戶
[zls@zls ~]$ whoami
zls
切換用戶,使用命令su [-] username
su命令後面跟-
代表進入登陸式shell
如果su命令後不加-
代表進入非登陸式shell
,他們之間的區別在於載入的環境變數不一樣。
註意:普通用戶su -
代表直接切換至root
用戶身份, 但需要輸入root
用戶密碼。
超級管理員root
用戶使用su - username
切換普通用戶不需要輸入任何密碼。
[zls@zls ~]$ pwd
/home/zls
//不加 '-' 切換到root賬戶下時,當前目錄沒有變化
[zls@zls ~]$ su
密碼:
[root@zls zls]# pwd
/home/zls
[root@zls zls]# exit
exit
//加 '-'切換到root賬戶,當前目錄為root賬戶的家目錄。
[zls@zls ~]$ su -
密碼:
[root@zls ~]# pwd
/root
.以某個用戶的身份執行某個服務,使用命令su -c username
[root@zls ~]# su - zls -c 'ifconfig'
[root@zls ~]# su - zls -c 'ls ~'
用戶身份提權
su
命令在切換用戶身份時,如果每個普通用戶都能拿到root
用戶的密碼,當其中某個用戶不小心泄漏了root
的密碼,那系統會變得非常不安全。
為了改進這個問題,從而產生了sudo
這個命令。
sudo
執行一個僅有root
身份才能執行的命令是可以辦到的,但是需要輸入密碼,這個密碼並不是root
的密碼而是用戶自己的密碼。
預設只有root
用戶能使用sudo
命令,普通用戶想要使用sudo
需要root
預先設定,即使用 visudo
命令去編輯相關的配置文件/etc/sudoers
centos7提權
[root@zls ~]# usermod zls -G wheel
//日誌審計
[root@zls ~]$ sudo tail -f /var/log/secure
centos6提權
#1.系統安裝後就有sudo命令,如果沒有sudo命令,可通過如下方式安裝
[root@zls ~]# yum install -y sudo
#2.使用`visudo`命令編輯sudo配置文件, 相當於 vim /etc/sudoers`配置文件
[root@zls ~]# visudo #會對配置進行驗證
zls ALL=(ALL) /bin/rm, /bin/cp #新增
#3.配置選項詳解
1.用戶名 2.主機名 3.角色名 4.命令名
root ALL= (ALL) ALL
zls ALL 使用最高角色執行 /bin/rm, /bin/cp #允許使用sudo執行命令
zls ALL=(ALL) NOPASSWD:/bin/cp, /bin/rm //不需要密碼使用rm、cp命令
#4.使用visudo -c檢查配置文件
[root@zls ~]# visudo -c
/etc/sudoers: parsed OK
普通用戶驗證sudo許可權
#1.切換普通用戶
[root@zls ~]# su - zls
#2.檢查普通用戶sudo許可權明細
[zls@zls ~]$ sudo -l
...
User zls may run the following commands on this host:
(ALL) /bin/rm, (ALL) /bin/cp
#3.普通用戶刪除opt目錄,刪除失敗
[zls@zls ~]$ rm -rf /opt/
rm: cannot remove `/opt': Permission denied
#4.使用sudo提權,驗證用戶許可權是否可用,需要輸入普通用戶的密碼
[zls@zls ~]$ sudo rm -rf /opt
sudo免密碼配置選項
#1.普通用戶執行sudo不需要輸入密碼配置
[root@zls ~]# visudo
zls ALL=(ALL) /bin/rm, /bin/cp #預設
zls ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp #修改後
#2.預設普通用戶無權刪除
[zls@zls ~]$ rm -f /root/002
rm: cannot remove `/root/002': Permission denied
#3.驗證sudo免密碼執行許可權
[zls@zls ~]$ sudo rm -f /root/002
sudo配置組
//如果每增加一個用戶需配置一行sudo,這樣設置非常麻煩。所以可以進行如下設置
%zls ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp #新增組
//group1這個組的所有用戶都擁有sudo的權力。接下來只需要將用戶加入該組即可。
//創建用戶加入該組
[root@zls ~]# groupadd zls
[root@zls ~]# useradd zls1 -g zls
[root@zls ~]# useradd zls2 -g zls
//root用戶建立目錄
[root@zls ~]# mkdir /root/zls_sudo
//切換用戶並刪除測試
[root@zls ~]# su - zls1
[zls1@zls ~]$ rm -rf /root/zls_sudo
rm: cannot remove `/root/zls_sudo': Permission denied
//使用sudo
[zls1@zls ~]$ sudo rm -rf /root/zls_sudo
當然配置文件/etc/sudoers
包含了諸多配置項,可以使用命令man sudoers
來獲得幫助信息。
下麵介紹一個很實用的案例,我們的需求是將Linux
伺服器設置成如下:
1.僅允許使用普通賬戶登陸Linux
伺服器,禁止root直接登錄
2.可以讓普通用戶不輸入密碼就能sudo su -
切換到root
賬戶
//禁止root用戶登陸
[root@zls ~]# sed -i 's@#PermitRootLogin yes@PermitRootLogin no@g' /etc/ssh/sshd_config
[root@zls ~]# systemctl restart sshd
//配置sudo許可權
[root@zls ~]# visudo
User_Alias USER_SU = zls1,zls2,zls
Cmnd_Alias SU = /bin/su
USER_SU ALL=(ALL) NOPASSWD:SU
//使用root登陸伺服器失敗
➜ ~ ssh [email protected]
[email protected]'s password:
Permission denied, please try again.
//使用普通用戶登陸伺服器
➜ ~ ssh [email protected]
[email protected]'s password:
Last login: Mon Oct 30 09:28:21 2017 from 192.168.56.2
//使用sudo提權至root用戶
[zls@zls ~]$ sudo su -
[root@zls ~]#
sudo執行流程
1.普通用戶執行sudo命令, 會檢查/var/db/sudo是否存在時間戳緩存
2.如果存在則不需要輸入密碼, 否則需要輸入用戶與密碼
3.輸入密碼會檢測是否該用戶是否擁有該許可權
4.如果有則執行,否則報錯退出