day13:權限管理su/sudo及限制root用戶登錄
1.1、su命令是來切換用戶:變更為其他使用者的身份:變更時需要輸入用戶名及密碼:
語法: su [ - ] 用戶名
“-”加上後:表示同時切換到用戶的環境變量下,如下:
“-”不加:不切換用戶的環境的變量:半切換:
[root@localhost ~]# su yuanhh #半切換到yuanhh用戶:
[yuanhh@localhost root]$ pwd #查看當前用戶的所屬目錄還是root.
/root
[yuanhh@localhost root]$ su root #當普通用戶切換至root用戶,則需要輸入密碼:
密碼:
[root@localhost ~]# pwd #切換到root後。
/root
[root@localhost ~]# su - yuanhh #全切換到yuanhh用戶:
上一次登錄:四 11月 2 01:10:33 CST 2017pts/0 上
[yuanhh@localhost ~]$ pwd #則用戶的所屬目錄則變成了用戶的家目錄。
/home/yuanhh
註:普通用戶是無法查看root用戶的文件:
1.2、在root用戶登錄的時候,以某個用戶的身份去執行某一條命令,並且不登錄用戶:
[root@localhost ~]# su - -c "touch /tmp/zzz" yuanhh #以yuanhh用戶的身份來執行。
[root@localhost ~]# ls -ld /tmp/zzz #用ls命令來查看:則屬於yuanhh這個用戶:
-rw-rw-r-- 1 yuanhh yuanhh 0 11月 2 01:22 /tmp/zzz
註:su - yuanhh -c "ls /tmp/"
1.3、在創建用戶的同時,未創建用戶的家目錄,則需要手動創建家目錄,並且拷貝環境變量:
[root@localhost ~]# useradd -M user3 #創建用戶user3,不創建用戶的家目錄:
[root@localhost ~]# su - user3 #切換到用戶user3下:
su: 警告:無法更改到 /home/user3 目錄: 沒有那個文件或目錄 #提示家目錄不存在,無法切換:
[root@localhost~]#mkdir /home/user3;chown user3:user3 /home/user3 #創建家目錄並更改權限,很重要,否則無法使用:
[root@localhost ~]# ls -a /etc/skel/.bash #此目錄的.bash開頭的為系統默認的環境變量:
.bash_logout .bash_profile .bashrc
[root@localhost ~]# cp /etc/skel/.bash* /home/user3 #拷貝至家目錄yuanhh目錄下:
[root@localhost ~]# chown -R user3:user3 /home/user3 #更改user3家目錄下文件級聯:
[root@localhost ~]# su - user3 #切換user3.
[user3@localhost~]$ pwd #所屬組正常:
/home/user3
3.8:sudo命令: 只有超級用戶root可以使用:(切換後有時間限制)
1.1:語法:su [ 選項 ] 參數
選項如下:
-b:在後臺執行指令;
-h:顯示幫助;
-H:將HOME環境變量設為新身份的HOME環境變量;
-k:結束密碼的有效期限,也就是下次再執行sudo時便需要輸入密碼;
-l:列出目前用戶可執行與無法執行的指令;
-p:改變詢問密碼的提示符號;
-s:執行指定的shell;
-u<用戶>:以指定的用戶作為新的身份。若不加上此參數,則預設以root作為新的身份;
-v:延長密碼有效期限5分鐘;
-V :顯示版本信息
1.2:sudo命令:讓其他用戶來執行命令,預設用戶為root,使用時需輸入密碼,5分鐘後超時重新輸入密碼:
由於sudo的配置文件為sudoers比較重要,不建議直接編輯,可以用visudo(可檢測語法錯誤)來操作,如下:
[root@localhost ~]# visudo #編輯visudo
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere #核心的配置文件:修改此處即可:
##授權的用戶 授權客戶端IP=(賦予它系統中哪些用戶) 賦予哪些命令給他使用。
root ALL=(ALL) ALL(絕對路徑)
yuanhh ALL=(ALL) /usr/bin/ls,/usr/bin/cp,/usr/bin/cat
#註:命令要使用絕對路徑,否則會報錯,如下:
>>> /etc/sudoers: 語法錯誤 near line 93 <<<
現在做什麽?
選項有:
重新編輯 sudoers 文件(e)
退出,不保存對 sudoers 文件的更改(x)
退出並將更改保存到 sudoers 文件(危險!)(Q)
以上信息表示:授予yuanhh用戶(任何地方的主機IP),系統中所有用戶的權限,可以用ls,cp,cat等命令:
測試如下:
[root@localhost ~]# su - yuanhh #第一次用su全切換到yuanhh下。
[yuanhh@localhost ~]$ ls /root/ #查看時權限不足:
ls: 無法打開目錄/root/: 權限不夠
[yuanhh@localhost ~]$ sudo /usr/bin/ls /root/ #
[sudo] yuanhh 的密碼: #第一次使用時需要輸入密碼:此處為yuanhh的用戶密碼:
txt 1.txt.bak 2.txt.bak anaconda-ks.cfg yuanhh 重要事宜.txt
1.3:如果不想讓普通用戶使用時輸入密碼:可以修改如下:
[root@localhost ~]# visudo #編輯
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
yuanhh ALL=(ALL) /usr/bin/ls,/usr/bin/cp,/usr/bin/cat
user3 ALL=(ALL) NOPASSWD: /usr/bin/ls,/usr/bin/cp,/usr/bin/cat
#加上"NOPASSWD:" 則下次使用時不需要輸入密碼:
[root@localhost ~]# su - user3
[user3@localhost ~]$ sudo ls /root/
txt 1.txt.bak 2.txt.bak anaconda-ks.cfg yuanhh 重要事宜.txt
1.4:在配置文件裏面三個非常重要的配置文件分別是
Host Alias :通過主機名別名稱來限制:
User Alias :通過用戶名別名稱限制:
Command Alias :通過命令別名來限制。
編輯visudo:添加如下內容:
Cmnd_Alias YUANHH_CMD = /usr/bin/ls, /usr/bin/cat
修改用戶的配置:
yuanhh ALL=(ALL) YUANHH_CMD
測試:
[root@localhost ~]# su - yuanhh
[yuanhh@localhost ~]$ sudo ls /root/
[sudo] yuanhh 的密碼:
txt 1.txt.bak 2.txt.bak anaconda-ks.cfg yuanhh 重要事宜.txt
3.9:限制root用戶的登錄:
註:該方法只適用於來root用戶的登錄:
思路如下:
1、首先修改sshd的配置文件,限制root用戶登錄系統:
2、給普通用戶sudo授權,通過讓普通用戶臨時擁有root的權限來執行:
3、通過普通用戶直接sudo su - root下即可:
註:當時普通用戶sudo到root用戶下,必須要知道root用戶的密碼我們可以通NOPASSWD設置,如下
1、需要修改配置文件:/etc/ssh/sshd_config #限制root用戶登錄
vi /etc/ssh/sshd_config
PermitRootLogin yes #將yes修改為no,
systemctl restart sshd.service #重啟服務即可:
#修改後則不允許root用戶登錄,只能先登錄普通用戶,然後su過來。
2、修改visudo文件:
[root@localhost ~]# visudo
# User_Alias ADMINS = jsmith, mikem
User_Alias YUANHHS = yuanhh, user1 #通過用戶名別名來添加多個用戶:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
yuanhh ALL=(ALL) YUANHH_CMD
YUANHHS ALL=(ALL) NOPASSWD: /usr/bin/su #讓普通用戶無密碼使用su命令:
測試:此時會發現root用戶無法登錄,登錄普通用戶,並跳轉到root用戶來測試。
[yuanhh@localhost ~]$ sudo su - root
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# pwd
/root
[root@localhost ~]# id
uid=0(root) gid=0(root) 組=0(root)
測試結果如上:
附記:以下內容網上查找整理:
擴展
sudo與su比較 http://www.apelearn.com/bbs/thread-7467-1-1.html
sudo配置文件樣例 www.opensource.apple.com/source/sudo/sudo-16/sudo/sample.sudoers
sudo -i 也可以登錄到root嗎? http://www.apelearn.com/bbs/thread-6899-1-1.html
1、su的優缺點;
su的確為管理帶來方便,通過切換到root下,能完成所有系統管理工具,只要把root的密碼交給任何一個普通用戶,他都能切換到root來完成所有的系統管理工作;但通過su切換到root後,也有不安全因素;比如系統有10個用戶,而且都參與管理。如果這10個用戶都涉及到超級權限的運用,做為管理員如果想讓其它用戶通過su來切換到超級權限的root,必須把root權限密碼都告訴這10個用戶;如果這10個用戶都有root權限,通過root權限可以做任何事,這在一定程度上就對系統的安全造成了威協;想想Windows吧,簡直就是惡夢;“沒有不安全的系統,只有不安全的人”,我們絕對不能保證這 10個用戶都能按正常操作流程來管理系統,其中任何一人對系統操作的重大失誤,都可能導致系統崩潰或數據損失;所以su 工具在多人參與的系統管理中,並不是最好的選擇,su只適用於一兩個人參與管理的系統,畢竟su並不能讓普通用戶受限的使用;超級用戶root密碼應該掌握在少數用戶手中,這絕對是真理!所以集權而治的存在還是有一定道理的;
2、sudo -i: 為了頻繁的執行某些只有超級用戶才能執行的權限,而不用每次輸入密碼,可以使用該命令。提示輸入密碼時該密碼為當前賬戶的密碼。沒有時間限制。執行該命令後提示符變為“#”而不是“$”。想退回普通賬戶時可以執行“exit”或“logout” 。
3、
sudo su - 約等於 sudo -i
sudo -s 完全等於 sudo /bin/bash 約等於 sudo su
day13:權限管理su/sudo及限制root用戶登錄