9月21日任務centos
3.7 su命令bash
3.8 sudo命令ssh
3.9 限制root遠程登陸centos7
對於Linux而言,權限的重要性毋庸置疑!對於普通用戶而言沒法執行那些只有root用戶纔能有效的命令,致使工做沒法有效進行;spa
系統管理員又不能將root密碼告知普通用戶,由於容易致使管理的混亂,並可能形成部分嚴重後果。經過su命令和sudo命令能夠有效的解決這些問題!操作系統
Linux系統是一個多用戶的操做系統,經常須要切換不一樣用戶以實現多個需求。su 命令就是實現用戶切換登陸的3d
(root用戶切換其餘用戶不要密碼,反過來須要密碼)rest
使用方法:su [-] USERcode
添加-參數時,在切換到USER身份登陸的同時,會加載其配置文件、環境變量,並切換到用戶家目錄;ip
如何在不切換用戶的前提下,使用其餘用戶的身份執行命令
su - -c "command" USER
[root@localhost ~]# su - -c "touch /home/castiel/test.log; ls -l /home/castiel/test.log" castiel -rw-rw-r--. 1 castiel castiel 0 ... /home/castiel/test.log # 執行su命令後,當前用戶仍是root,並無切換成castiel [root@localhost ~]# whoami root
使用su -命令切換用戶,當該用戶家目錄不存在時,會切換用戶登陸,但不會切換工做目錄,且提示符將爲 -bash-4.2$
[root@localhost ~]# useradd -M user1 [root@localhost ~]# su - user1 su: 警告:沒法更改到 /home/user1 目錄: 沒有那個文件或目錄 -bash-4.2$ pwd /root -bash-4.2$ whoami user1
經過手動建立家目錄並拷貝模板配置文件/etc/skel/.bash*,實現用戶完整切換
[root@localhost ~]# mkdir /home/user1 [root@localhost ~]# cp /etc/skel/.bash* /home/user1 [root@localhost ~]# chown -R user1.user1 /home/user1 [root@localhost ~]# ls -ld /home/user1 drwxr-xr-x. 2 user1 user1 62 ... /home/user1 # 驗證切換 [root@localhost ~]# su - user1 上一次登陸:一 ... CST 2017pts/0 上 [user1@localhost ~]$
系統模板文件 /etc/skel/.bash*
[root@centos7 ~]# ls -l /etc/skel/.bash* -rw-r--r--. 1 root root 18 ... /etc/skel/.bash_logout -rw-r--r--. 1 root root 193 ... /etc/skel/.bash_profile -rw-r--r--. 1 root root 231 ... /etc/skel/.bashrc
編輯sudo的配置文件最好使用visudo命令(會檢測語法),不要直接去修改其配置文件 /etc/sudoers
其中修改的最核心的一行代碼
## Syntax: ## ## user MACHINE=COMMANDS ## ## The COMMANDS section may have other options added to it. ## ## Allow root to run any commands anywhere root ALL=(ALL) ALL # 在這行後新添加用戶user1的sudo命令 user1 ALL=(ALL) /usr/bin/ls, /usr/bin/cat
3個ALL的含義:
第一個ALL:主機、ip
小括號內的ALL:user1將以什麼用戶身份執行
後面的ALL:能夠執行的命令
後面的命令必須是絕對路徑表示,不然容易出錯,多個命令能夠以逗號和一個空格鏈接
# 使用visudo命令,當編輯錯誤時會校驗出來 [root@localhost ~]# visudo visudo:>>> /etc/sudoers:syntax error 在行 92 附近<<< 如今作什麼? 選項有: 從新編輯 sudoers 文件(e) 退出,不保存對 sudoers 文件的更改(x) 退出並將更改保存到 sudoers 文件(危險!)(Q) # 輸入e編輯修改 如今作什麼?e
常規設置的規則,初次執行時須要輸入用戶user1的密碼,短期內再次執行不須要再次輸入密碼!
經過在command前加"NOPASSWD:",能夠實現免密碼執行。
user1 ALL=(ALL) NOPASSWD: /usr/bin/ls, /usr/bin/cat
須要注意的是:在執行sudo命令時提示輸入的密碼時執行sudo命令的當前用戶的密碼,而不是root等其餘用戶的密碼!
主機別名
## Host Aliases # 能夠寫ip,也能夠也主機名 Host_Alias TESTSERVERS = 192.168.65.130, 192.168.65.133 # 配合核心代碼使用 user1 TESTSERVERS=(ALL) ALL
## User Aliases User_Alias TESTS = user1, test # 配合核心代碼使用 TESTS ALL=(ALL) ALL
## Command Aliases Cmnd_Alias TEST = /usr/bin/ls, /usr/bin/cat # 配合核心代碼使用 user1 ALL=(ALL) TEST
## 容許wheel組內的用戶執行任意命令;容許test組內的用戶執行ls,cat命令 %wheel ALL=(ALL) ALL %test ALL=(ALL) /usr/bin/ls, /usr/bin/cat
sudo -i
避免執行sudo時頻繁輸入密碼。提示輸入密碼爲當前帳戶的密碼。沒有時間限制。
執行後進入root帳戶,退回執行「exit」或「logout」 。
[user1@localhost ~]$ sudo -i [sudo] password for user1: [root@localhost ~]# whoami root
sudo /bin/bash
會切換到root的bash下,但不能徹底擁有root的全部環境變量,能夠擁有root用戶的權限。這個命令等同於sudo -s。
[user1@localhost ~]$ sudo /bin/bash [sudo] password for user1: [root@localhost user1]# whoami root
[user1@localhost ~]$ sudo -s [sudo] password for user1: [root@localhost user1]# whoami root [root@localhost user1]# pwd /home/user1
sudo su
登陸到root,但並未切換到root的環境變量。
[user1@localhost ~]$ sudo su [sudo] password for user1: [root@localhost user1]# whoami root [root@localhost user1]# pwd /home/user1
sudo su -
切換爲root,能夠使用root環境變量。等價於先切換爲root,再執行su -命令。
[user1@localhost ~]$ sudo su - [sudo] password for user1: 上一次登陸:二 ... CST ...從 192.168.65.1pts/1 上 [root@localhost ~]# whoami root [root@localhost ~]# pwd /root
不知道root用戶密碼,沒法登陸root,可是能夠經過登陸普通用戶user
在visudo內編輯user用戶執行su命令時不須要密碼
user ALL=(ALL) NOPASSWD: /bin/su
在普通用戶下執行 sudo su - root,這樣就能夠登陸到root了
編輯/etc/sshd/sshd_config文件
找到"#PermitRootLogin yes"這一行(個人文件時第49行)
修改成 「PermitRootLogin no」,保存後退出
重啓sshd服務
[root@localhost ~]# systemctl restart sshd.service
這裏須要注意的是配置文件是sshd_config,而非ssh_config!
限制了root遠程登陸,能夠經過登陸普通用戶,再結合su命令來執行部分root權限。以此實現root用戶權限的合理使用。