Linux学习(十二)mkpasswd、su、sudo、限制root远程登录
一、mkpasswd
mkpasswd用来生成随机密码字符串。可以指定长度和特殊字符的长度:
[root@ruanwenwu01 ~]# mkpasswd
O7.alw5Wq
[root@ruanwenwu01 ~]# mkpasswd -l 12 -s 2
Jc;be0vpkT6=
-l 12代表长度是12,-s2代表包含两个特殊字符。
二、su
su用来切换用户。
[root@ruanwenwu01 ~]# su test1
[test1@ruanwenwu01 root]$ pwd
/root
直接用su test1,发现切换完成后,目录还在/root下,这说明并没有完全切换。要完全切换,就要这样:
[root@ruanwenwu01 ~]# su - test1
上一次登录:一 10月 30 07:34:43 CST 2017pts/0 上
[test1@ruanwenwu01 ~]$ pwd
/home/test1
[test1@ruanwenwu01 ~]$ ls -la
总用量 16
drwx------. 2 test1 grp2 83 10月 30 07:28 .
drwxr-xr-x. 3 root root 19 10月 29 20:45 ..
-rw-------. 1 test1 grp2 201 10月 30 07:28 .bash_history
-rw-r--r--. 1 test1 grp2 18 8月 3 2016 .bash_logout
-rw-r--r--. 1 test1 grp2 193 8月 3 2016 .bash_profi
其实,完全切换,就是在切换时加载用户的环境变量.bash_history,.bash_logout,.bash_profile。
我们还可以通过-c参数来不切换用户,以这个用户的身份来执行一些命令:
[test1@ruanwenwu01 ~]$ su - -c 'touch /tmp/b.txt' root
密码:
[test1@ruanwenwu01 ~]$ ls -l /tmp/b.txt
-rw-r--r--. 1 root root 0 10月 30 07:38 /tmp/b.txt
发现我们在test1的环境下,以root身份创建了b.txt这个文件。
有一种情况,用户没有家目录,那么su到它这个用户的时候,肯定也不能加载环境变量,也就不会变到它的家目录。这时候如果我们想恢复它的家目录怎么操作呢?答案就是,在/etc/skel/目录下有环境变量模板,我们直接拿过来用。
[test1@ruanwenwu01 skel]$ useradd -M test2
-bash: /usr/sbin/useradd: 权限不够
[test1@ruanwenwu01 skel]$ su root
密码:
[root@ruanwenwu01 skel]# useradd -M test2
[root@ruanwenwu01 skel]# cd /home/test2
bash: cd: /home/test2: 没有那个文件或目录
[root@ruanwenwu01 skel]# su test2
bash-4.2$ pwd
/etc/skel
bash-4.2$
没有家目录的用户,一su成bash-4.2$了。现在我们通过skel来恢复:
[root@ruanwenwu01 test1]# cp -r /etc/skel/ /home/test2/ [root@ruanwenwu01 test1]# ls -ld /home/test2/ drwxr-xr-x. 2 root root 62 10月 30 07:49 /home/test2/ [root@ruanwenwu01 test1]# tail -n3 /etc/passwd sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin test1:x:1000:1001::/home/test1:/bin/bash test2:x:1001:1002::/home/test2:/bin/bash [root@ruanwenwu01 test1]# tail -n3 /etc/group test1:x:1000: grp2:x:1001: test2:x:1002: [root@ruanwenwu01 test1]# chown -R test2:test2 /home/test2 [root@ruanwenwu01 test1]# su test2 [test2@ruanwenwu01 test1]$
三、sudo
sudo命令的作用是让指定的用户能用别的身份(一般是root)来运行一些指定的命令。
配置sudo,使用visudo这个命令。比如我们现在给test1用户以root的身份运行ls命令,应该这样配置:
90 ## Allow root to run any commands anywhere 91 root ALL=(ALL) ALL 92 test1 ALL=(ALL) NOPASSWD: /bin/ls, /bin/mv, /bin/su
现在看看配置之后的使用:
[root@ruanwenwu01 ~]# su - test1 上一次登录:一 10月 30 07:36:10 CST 2017pts/0 上 [test1@ruanwenwu01 ~]$ ls /root ls: 无法打开目录/root: 权限不够 [test1@ruanwenwu01 ~]$ sudo ls /root/ anaconda-ks.cfg
发现配置完成之后,可以用sudo命令来执行ls进入/root/目录。
如果我们需要让一个用户组都可以执行ls命令怎么配置呢?看代码:
visudo:
98 ## Allows people in group wheel to run all commands 99 %wheel ALL=(ALL) ALL 100 %grp2 ALL=(ALL) NOPASSWD: /bin/ls
[root@ruanwenwu01 ~]# visudo [root@ruanwenwu01 ~]# tail -n3 /etc/group test1:x:1000: grp2:x:1001: test2:x:1002: [root@ruanwenwu01 ~]# tail -n3 /etc/passwd sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin test1:x:1000:1001::/home/test1:/bin/bash test2:x:1001:1002::/home/test2:/bin/bash [root@ruanwenwu01 ~]# su - test1 上一次登录:一 10月 30 09:12:37 CST 2017pts/0 上 [test1@ruanwenwu01 ~]$ ls /root ls: 无法打开目录/root: 权限不够 [test1@ruanwenwu01 ~]$ sudo ls /root [sudo] password for test1: anaconda-ks.cfg
四、限制root用户远程登录
如果root用户的密码被盗窃了,而你的服务器又没有限制使用密匙登录,那么久悲剧了。所以,限制root远程登录还是有一定的必要性的。那么怎么操作呢?
我们想一想,首先ssh那里应该禁止掉。但是禁止掉那里的话,我们想用root用户进行一些操作怎么办呢?对,可以用su命令切换过去,但是我们知道,在切换的时候需要输入密码,而我们root的密码又不能随便给普通用户。这时候我们想到了sudo命令,它里面有一个NOPASSWD选项,可以避免我们输入密码。
以下以test1用户能su到root举例具体配置:
90 ## Allow root to run any commands anywhere 91 root ALL=(ALL) ALL 92 test1 ALL=(ALL) NOPASSWD: /bin/ls, /bin/mv, /bin/su
我们在92行,把/bin/su命令加进来了。
[root@ruanwenwu01 ~]# su - test1 上一次登录:一 10月 30 09:20:07 CST 2017pts/0 上 [test1@ruanwenwu01 ~]$ su - 密码: ^[csu: 鉴定故障 [test1@ruanwenwu01 ~]$ [test1@ruanwenwu01 ~]$ [test1@ruanwenwu01 ~]$ sudo su - 上一次登录:一 10月 30 09:27:03 CST 2017pts/0 上 最后一次失败的登录:一 10月 30 09:28:44 CST 2017pts/0 上 最有一次成功登录后有 1 次失败的登录尝试。
这说明visudo的配置已经成功了,现在我们要关闭ssh配置的root登录:
修改/etc/ssh/sshd_config:
#LoginGraceTime 2m
PermitRootLogin no
[root@ruanwenwu01 ~]# tail -n3 /etc/passwd sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin test1:x:1000:1001::/home/test1:/bin/bash test2:x:1001:1002::/home/test2:/bin/bash [root@ruanwenwu01 ~]# tail -n3 /etc/shadow sshd:!!:17455:::::: test1:$6$0eyKLd.F$KIslV0NC4ZRyrNtvdMemweo8c/.BhEDEWSDXCzRhjb1yfOzwvo646L1lcJFzXc.C9P2XZwgMYMDOGM6P6wcme/:17468:0:99999:7::: test2:!!:17468:0:99999:7::: [root@ruanwenwu01 ~]# vim /etc/ssh/ssh ssh_config ssh_host_ecdsa_key.pub ssh_host_rsa_key sshd_config ssh_host_ed25519_key ssh_host_rsa_key.pub ssh_host_ecdsa_key ssh_host_ed25519_key.pub [root@ruanwenwu01 ~]# vim /etc/ssh/sshd_config [root@ruanwenwu01 ~]# systemctl restart sshd.service
现在登出,然后看还能否登录:
然后换成test1登录,看是否能su到root:
[test1@ruanwenwu01 ~]$ su root 密码: ^C [test1@ruanwenwu01 ~]$ sudo su - root 上一次登录:一 10月 30 09:31:11 CST 2017从 192.168.38.1pts/0 上 最后一次失败的登录:一 10月 30 09:34:38 CST 2017从 192.168.38.1ssh:notty 上 最有一次成功登录后有 1 次失败的登录尝试。
成功了!