• 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 次失败的登录尝试。

    成功了! 

    坚持!
  • 相关阅读:
    VirtualBox安装
    记一次修改fstab挂载参数
    Debian其实有提供附带了各种桌面的安装镜像
    记一次使用unzip命令
    记一次给iPhone 6越狱
    浅谈.Net中内置的一种特殊的引用类型 -- String类型
    .Net中的静态类和非静态类、静态成员和非静态成员
    .Net子窗体给父窗体传值的几种方法
    int、float、double In .Net之相互转换
    车厢重组
  • 原文地址:https://www.cnblogs.com/doubilaile/p/7752942.html
Copyright © 2020-2023  润新知