限制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用户权限的合理使用。

相关文章
相关标签/搜索