su命令

切换到其他用户 格式: su - [用户名] su - user005

[root@shu-test ~]# su - user005
上一次登录:三 12月 27 18:01:41 CST 2017pts/0 上
[user005@shu-test ~]$ pwd
/home/user005
[user005@shu-test ~]$ whoami
user005
[user005@shu-test ~]$

注意:加-保证完整的切换到user005的家目录下,不加-则切换到user005账号,但是当前目录却是之前用户的家目录;


sudo命令

让普通用户使用指定用户的身份去执行一条命令(ls,mv,cat) 让user005使用root的身份去执行一条命令

visudo命令

此命令实际上编辑的是/etc/sudoers文件 在sudo文件中给指定用户赋予其他用户的身份 此命令在语句有错误的条件下退出会提示你错误;

[root@shu-test ~]# visudo
>>> /etc/sudoers: 语法错误 near line 93 <<<
现在做什么?
选项有:
  重新编辑 sudoers 文件(e)
  退出,不保存对 sudoers 文件的更改(x)
  退出并将更改保存到 sudoers 文件(危险!)(Q)

比如user005使用root身份 在文档中找到这一行,并在下面添加相同格式一行;

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
user005  ALL=(root)       ALL

或者赋予具体的命令(必须使用绝对路径,逗号前加空格)

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
user005  ALL=(ALL)       /usr/bin/ls, /usr/bin/mv, /usr/bin/cat

保存退出

使用sudo测试

[user005@shu-test ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[user005@shu-test ~]$ sudo ls /root/
abc  anaconda-ks.cfg  awk  grep  sed
[user005@shu-test ~]$
[user005@shu-test ~]$ sudo /usr/bin/ls /root/
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。
[sudo] user005 的密码:
abc  anaconda-ks.cfg  awk  grep  sed
[user005@shu-test ~]$ sudo /usr/bin/ls /root/
abc  anaconda-ks.cfg  awk  grep  sed
[user005@shu-test ~]$

我们会发现可以使用ls 查看/root/目录

使用命令时不输入密码

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
user005  ALL=(ALL)       NOPASSWD:/usr/bin/ls, /usr/bin/mv, /usr/bin/cat

限制root远程登录

条件:限制root无法远程登录,不透露root密码; 思路:限制root无法远程登录,意味着很多命令无法使用;那么我们可以使用su切换到root需要密码;我们可以通过sudo中加一条使用命令时不输入密码; 也就是使用su命令切换到root下不需要使用密码;这样限制了root无法远程登录,但是我们可以通过sudo 中的visudo文件来实现免密码切换到root用户下; 也就是visudo命令下编辑加入一条 user005 ALL=(ALL) NOPASSWD: /usr/bin/su

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
user005  ALL=(ALL)      NOPASSWD: /usr/bin/su

测试:在user005用户下使用su - root切换需要密码,而使用sudo su -root后 不用密码就可以切换到root账号;

[root@shu-test ~]# visudo
[root@shu-test ~]# su - user005
上一次登录:三 12月 27 18:36:11 CST 2017pts/0 上
[user005@shu-test ~]$ whoami
user005
[user005@shu-test ~]$ su - root
密码:
[user005@shu-test ~]$ sudo su - root
上一次登录:三 12月 27 19:18:52 CST 2017pts/0 上
[root@shu-test ~]# ls /root/
abc  anaconda-ks.cfg  awk  grep  sed
[root@shu-test ~]# whoami
root
[root@shu-test ~]#

限制root远程登录

编辑文件/etc/ssh/sshd_config vi /etc/ssh/sshd_config 将文档中的 #PermitRootLogin yes 改为 PermitRootLogin no 一定要去除#,#代表是注释的意思;

改完文件后记得重启sshd服务 systemctl restart sshd.service

重新登录测试发现服务器拒绝使用root远程登录 使用user005正常登录成功,然后使用sudo su - root命令成功切换到root用户下

Last login: Wed Dec 27 19:21:46 2017
[user005@shu-test ~]$ sudo su - root
上一次登录:三 12月 27 19:34:33 CST 2017从 192.168.188.1pts/0 上
最后一次失败的登录:三 12月 27 19:36:36 CST 2017从 192.168.188.1ssh:notty 上
最有一次成功登录后有 1 次失败的登录尝试。
[root@shu-test ~]#