su命令

切换到其他用户
格式:

su - [用户名]
su - user2

[root@jinkai01 ~]# su - user2
上一次登录:一 8月 3 16:14:57 CST 2020pts/0 上
[user2@jinkai01 ~]$ pwd
/home/user2

su - -c "touch /tmp/aming.111"  username(用户名)
可以不用切换到 其他用户下 就可以指定某个用户创建文件

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

sudo命令

让普通用户使用指定用户的身份去执行一条命令(ls,mv,cat)
让user2使用root的身份去执行一条命令
visudo命令
此命令实际上编辑的是/etc/sudoers文件
在sudo文件中给指定用户赋予其他用户的身份
此命令在语句有错误的条件下退出会提示你错误;
比如user2使用root身份
在文档中找到这一行,并在下面添加相同格式一行;

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

(ALL)授予括号内用户的权限 第三个ALL 指定具体的命令
或者赋予具体的命令(必须使用绝对路径,逗号前加空格)

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

保存退出
使用sudo测试

[user2@jinkai01 ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[user2@jinkai01 ~]$ sudo ls /root/

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。

[sudo] user2 的密码:
1.txt 2 aa.txt abc anaconda-ks.cfg a.txt b.txt

我们会发现可以使用ls 查看/root/目录,已经有权限,但第一次需要输入密码

也有方法让使用命令时不输入密码

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

把需要添加sudo特权的用户可以统一加到 wheel组里,这就不用每天增加一个用户设置一行

Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL

只允许使用普通账户登录,而普通账户登录后,可以不输入密码就能用sudo切换到root账户。
配置方法,输入如下命令:

#visudo
然后在文件的最后加入如下3行:
User_Alias USER_SU =linuxprobe,user1,user2
Cmnd_Alias SU = /usr/bin/su
USER_SU ALL=(ALL) NOPASSWD: SU

第一行设定了一个user别名,其实这个USER_SU相当于是linuxprobe,user1和user2三个账户;
第二行设定了一个命令别名,SU相当于/usr/bin/su;
第三行前面介绍过。保存配置文件后,使用linuxprobe,user1和user2这3个账户登录Linux。执行命令sudo su -切换到root账户,获取root账户的所有权利,如下所示

[root@jinkai01 ~]# su - user1
上一次登录:四 8月 6 16:47:55 CST 2020从 192.168.111.1pts/1 上
[user1@jinkai01 ~]$ sudo su -
上一次登录:四 8月 6 16:54:07 CST 2020从 192.168.111.1pts/0 上
[root@jinkai01 ~]# whoami
root

限制root远程登录

条件:限制root无法远程登录,不透露root密码;
思路:限制root无法远程登录,意味着很多命令无法使用;那么我们可以使用su切换到root需要密码;我们可以通过sudo中加一条使用命令时不输入密码

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

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

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

[root@jinkai01 ~]# su - user1
上一次登录:一 8月 3 16:08:34 CST 2020pts/0 上
[user1@jinkai01 ~]$ su - root
密码:
[user1@jinkai01 ~]$ sudo su - root
上一次登录:四 8月 6 15:10:46 CST 2020从 192.168.111.1pts/1 上
[root@jinkai01 ~]# ls /root/
1.txt 2 aa.txt abc anaconda-ks.cfg a.txt b.txt

限制root远程登录

编辑文件/etc/ssh/sshd_config

[root@jinkai01 ~]# vim /etc/ssh/sshd_config
将文档中的
#PermitRootLogin yes
改为
PermitRootLogin no

**一定要去除#,#代表是注释的意思;
改完文件后记得重启sshd服务

[root@jinkai01 ~]# systemctl restart sshd

重新登录测试发现服务器拒绝使用root远程登录**

使用user1正常登录成功,然后使用sudo su - root命令成功切换到root用户下

Last login: Thu Aug 6 16:28:45 2020
[user1@jinkai01 ~]$ sudo su - root
上一次登录:四 8月 6 16:29:04 CST 2020pts/1 上
最后一次失败的登录:四 8月 6 16:32:23 CST 2020从 192.168.111.1ssh:notty 上
最有一次成功登录后有 1 次失败的登录尝试。
[root@jinkai01 ~]#