用戶基本操做(三)

用戶身份切換

如何在普通用戶的狀況下,完成平常工做?
1)su 切換用戶,使用普通用戶登陸,而後使用su命令切換到root。
優勢:簡單,方便
缺點:須要知道root密碼,不安全,切換到root沒有日誌審計功能shell

2)sudo 提權,當須要使用root權限時,進行提權,而無需切換至root用戶。
優勢:安全,方便
缺點:複雜vim

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
[zls_zls@zls.com]#

建立用戶,並登陸系統

[root@zls ~]# useradd zls
[root@zls ~]# echo "123"|passwd --stdin zls

//使用zls用戶登陸當前Linux系統
➜  ~ ssh zls@192.168.56.111
zls@192.168.56.111's password:
[zls@zls ~]$

//可使用whoami查看當前登陸用戶
[zls@zls ~]$ whoami
zls

切換用戶,使用命令su [-] username

su命令後面跟-表明進入登錄式shell 若是su命令後不加-表明進入非登錄式shell,他們之間的區別在於加載的環境變量不同。centos

注意:普通用戶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/sudoersbash

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帳戶ssh

//禁止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 root@192.168.56.11
root@192.168.56.11's password:
Permission denied, please try again.

//使用普通用戶登錄服務器
➜  ~ ssh zls@192.168.56.11
zls@192.168.56.11'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.若是有則執行,不然報錯退出測試

img

相關文章
相關標籤/搜索