目錄linux
如何在普通用戶的狀況下,完成平常工做?
1)su
切換用戶,使用普通用戶登陸,而後使用su命令切換到root。
優勢:簡單,方便
缺點:須要知道root密碼,不安全,切換到root沒有日誌審計功能shell
2)sudo
提權,當須要使用root權限時,進行提權,而無需切換至root用戶。
優勢:安全,方便
缺點:複雜vim
交互式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的配置文件保存用戶的工做環境 我的配置文件: ~/.bash_profile ~/.bashrc 全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc profile類文件, 設定環境變量, 登錄前運行的腳本和命令 bashrc 類文件, 設定本地變量, 定義命令別名 全局配置和我的配置設置衝突, 優先使用我的配置準
//登陸式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命令後面跟-
表明進入登錄式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
[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
bash
[root@zls ~]# usermod zls -G wheel //日誌審計 [root@zls ~]$ sudo tail -f /var/log/secure
#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
#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
#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,這樣設置很是麻煩。因此能夠進行以下設置 %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 ~]#
1.普通用戶執行sudo命令, 會檢查/var/db/sudo是否存在時間戳緩存
2.若是存在則不須要輸入密碼, 不然須要輸入用戶與密碼
3.輸入密碼會檢測是否該用戶是否擁有該權限
4.若是有則執行,不然報錯退出測試