限制root遠程登陸 su和sudo命令

9月21日任務centos

3.7 su命令bash

3.8 sudo命令ssh

3.9 限制root遠程登陸centos7

 

 

對於Linux而言,權限的重要性毋庸置疑!對於普通用戶而言沒法執行那些只有root用戶纔能有效的命令,致使工做沒法有效進行;spa

系統管理員又不能將root密碼告知普通用戶,由於容易致使管理的混亂,並可能形成部分嚴重後果。經過su命令和sudo命令能夠有效的解決這些問題!操作系統

su命令

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 命令

編輯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等其餘用戶的密碼!

sudo別名

  • 主機別名

## 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命令參數

  • 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
  • sudo -s : 如上
[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用戶密碼,沒法登陸root,可是能夠經過登陸普通用戶user

  • 在visudo內編輯user用戶執行su命令時不須要密碼

user ALL=(ALL) NOPASSWD: /bin/su
  • 在普通用戶下執行 sudo su - root,這樣就能夠登陸到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用戶權限的合理使用。

相關文章
相關標籤/搜索