1. 程式人生 > >day13:權限管理su/sudo及限制root用戶登錄

day13:權限管理su/sudo及限制root用戶登錄

su sudo

3.7:su命令:(切換後無時間限制)

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用戶登錄