一、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. root root 10月 : /home/test2/
[root@ruanwenwu01 test1]# tail -n3 /etc/passwd
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
test1:x::::/home/test1:/bin/bash
test2:x::::/home/test2:/bin/bash
[root@ruanwenwu01 test1]# tail -n3 /etc/group
test1:x::
grp2:x::
test2:x::
[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命令,应该这样配置:

 ## Allow root to run any commands anywhere
root ALL=(ALL) ALL
test1 ALL=(ALL) NOPASSWD: /bin/ls, /bin/mv, /bin/su

现在看看配置之后的使用:

[root@ruanwenwu01 ~]# su - test1
上一次登录:一 10月 :: CST 2017pts/ 上
[test1@ruanwenwu01 ~]$ ls /root
ls: 无法打开目录/root: 权限不够
[test1@ruanwenwu01 ~]$ sudo ls /root/
anaconda-ks.cfg

发现配置完成之后,可以用sudo命令来执行ls进入/root/目录。

如果我们需要让一个用户组都可以执行ls命令怎么配置呢?看代码:

visudo:

 ## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
%grp2 ALL=(ALL) NOPASSWD: /bin/ls
[root@ruanwenwu01 ~]# visudo
[root@ruanwenwu01 ~]# tail -n3 /etc/group
test1:x::
grp2:x::
test2:x::
[root@ruanwenwu01 ~]# tail -n3 /etc/passwd
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
test1:x::::/home/test1:/bin/bash
test2:x::::/home/test2:/bin/bash
[root@ruanwenwu01 ~]# su - test1
上一次登录:一 10月 :: CST 2017pts/ 上
[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举例具体配置:

 ## Allow root to run any commands anywhere
root ALL=(ALL) ALL
test1 ALL=(ALL) NOPASSWD: /bin/ls, /bin/mv, /bin/su

我们在92行,把/bin/su命令加进来了。

[root@ruanwenwu01 ~]# su - test1
上一次登录:一 10月 :: CST 2017pts/ 上
[test1@ruanwenwu01 ~]$ su -
密码: ^[csu: 鉴定故障
[test1@ruanwenwu01 ~]$
[test1@ruanwenwu01 ~]$
[test1@ruanwenwu01 ~]$ sudo su -
上一次登录:一 10月 :: CST 2017pts/ 上
最后一次失败的登录:一 10月 :: CST 2017pts/ 上
最有一次成功登录后有 次失败的登录尝试。

这说明visudo的配置已经成功了,现在我们要关闭ssh配置的root登录:

修改/etc/ssh/sshd_config:

#LoginGraceTime 2m
PermitRootLogin no
[root@ruanwenwu01 ~]# tail -n3 /etc/passwd
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
test1:x::::/home/test1:/bin/bash
test2:x::::/home/test2:/bin/bash
[root@ruanwenwu01 ~]# tail -n3 /etc/shadow
sshd:!!:::::::
test1:$$0eyKLd.F$KIslV0NC4ZRyrNtvdMemweo8c/.BhEDEWSDXCzRhjb1yfOzwvo646L1lcJFzXc.C9P2XZwgMYMDOGM6P6wcme/:::::::
test2:!!:::::::
[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月 :: CST 2017从 192.168..1pts/ 上
最后一次失败的登录:一 10月 :: CST 2017从 192.168..1ssh:notty 上
最有一次成功登录后有 次失败的登录尝试。

成功了!

Linux学习(十二)mkpasswd、su、sudo、限制root远程登录的更多相关文章

  1. Linux centosVMware su命令、sudo命令、限制root远程登录

    一.su命令 Linux系统中有些事情只有root用户才能做,普通用户不能做,这时候就需要临时切换到root身份了. [root@davery ~]# whoamiroot [root@davery ...

  2. Linux学习之二-Linux系统的目录结构

    Linux学习之二-Linux系统的目录结构 在Linux的根目录下,有很多的目录,但是需要记住,对于Linux而言,一切皆文件.因此此处的目录也是文件.用ls / 命令就能看到根目录下的各类不同的目 ...

  3. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  4. Linux学习笔记(二) 文件管理

    了解 Linux 系统基本的文件管理命令可以帮助我们更好的使用 Linux 系统,以下介绍几个常用的文件管理命令 1.pwd pwd 是 Print Working Directory 的简写,用于显 ...

  5. 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录

    3.7 su命令 3.8 sudo命令 3.9 限制root远程登录 su命令 切换用户 [root@centos_1 ~]# su - xiaobo [root@centos_1 ~]# su - ...

  6. su命令、sudo命令、限制root远程登录 使用介绍

    第3周第3次课(4月4日) 课程内容:3.7 su命令3.8 sudo命令3.9 限制root远程登录 3.7 su命令 [root@jimmylinux-002 ~]# su - jimmy     ...

  7. linux下禁止root远程登录和添加新用户

    https://www.cnblogs.com/jianz/p/7979250.html 一.添加和root权限一样的用户 1. adduser admin passwd  admin (修改密码) ...

  8. linux下禁止root远程登录

    一.添加和root权限一样的用户 1. adduser admin passwd  admin (修改密码) 2.修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示 ...

  9. 【Linux】Linux中在mate桌面和gnome桌面root自动登录设置

    [Linux]Linux中在mate桌面和gnome桌面root自动登录设置 GLL_ 2020-03-05 11:41:40  762  收藏 1 分类专栏: Linux 文章标签: linux 版 ...

随机推荐

  1. Eclipse插件springsource-tool-suite在线和离线安装步骤

    springsource-tool-suite插件是一个基于Eclipse的开发环境,为开发Spring应用程序而定制.它提供了一个即用的环境来实现,调试,运行和部署Spring应用程序,包括Pivo ...

  2. OC——关于KVC

    我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方 ...

  3. composer设置忽略版本匹配

    composer install 时遇到错误: Your requirements could not be resolved to an installable set of packages. 原 ...

  4. css左右布局的几种实现方式和优缺点

    记录一下左右布局的实现方式,实现的具体效果是,左侧固定宽度,高度适中等于父元素的高度,父元素的高度由右侧内容决定: html代码如下: <div class="parent" ...

  5. Ansible(二) - 配置及命令简介

    Ⅰ. Ansible Inventory Hosts文件配置 # mkdir /etc/ansible # touch /etc/ansible/hosts # cat /etc/hosts 127. ...

  6. fitnesse - Variables and Symbols

    fitnesse - Variables and Symbols 2017-09-30 目录 1 Variables(静态变量)  1.1 定义及使用  1.2 Variable作用域    1.2. ...

  7. [Unity]Unity3D编辑器插件扩展和组件扩展

    1. 插件扩展 1.1. 命名空间 using UnityEditor; using UnityEngine; //非必需,常用到 1.2. 使用语法 [MenuItem("Assets/M ...

  8. Python内置类型(2)——布尔运算

    python中bool运算符按优先级顺序分别有or.and.not, 其中or.and为短路运算符 not先对表达式进行真值测试后再取反 not运算符值只有1个表达式,not先对表达式进行真值测试后再 ...

  9. zabbix部署

    zabbix部署 ----2016年年终总结 二 服务器端安装   yum install zabbix-server 客户端安装 yum install zabbix-agent 配置Server ...

  10. (图文实例)用VB.net操作SQLite数据库

    转载请注明出处:HateMath归来(http://www.cnblogs.com/hatemath/) 环境: Visual Studio 社区版 64位 Windows 7系统 新建的解决方案基于 ...