一、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. 微信公众号开发——关于“WeixinJSBridge.call('closeWindow');”无效的问题

    最近在做微信公众号的开发,再做一个jsp的用户绑定页面,设置了一个timestamp,想实现的是当链接超时时alert一个窗口提示然后关闭网页窗口 但是呢,在jsp页面内直接 out.print(&q ...

  2. YYHS-NOIP2017Training0928-ZCC loves Isaac

    题目描述 [背景]ZCC又在打Isaac.这次他打通了宝箱关进入了表箱关.[题目描述]表箱关有一个房间非常可怕,它由n个变异天启组成.每个天启都会在进入房间后吐出绿弹并炸向某一个位置且范围内只有一个天 ...

  3. Java常用异常整理

    填坑,整理下Java的常用异常.正确使用异常在实际编码中非常重要,但面试中的意义相对较小,因为对异常的理解和应用很难通过几句话或几行代码考查出来,不过我们至少应答出三点:异常类的继承关系.常用异常类. ...

  4. 混合高斯模型(Mixtures of Gaussians)和EM算法

    这篇讨论使用期望最大化算法(Expectation-Maximization)来进行密度估计(density estimation). 与k-means一样,给定的训练样本是,我们将隐含类别标签用表示 ...

  5. swiper拖拽之后不自动滑动问题

    //swiper轮播图 var mySwiper = new Swiper('.swiper-container',{ initialSlide :0, autoplay : 3000, direct ...

  6. JDFS:一款分布式文件管理系统,第五篇(整体架构描述)

    一 前言 截止到目前为止,虽然并不完美,但是JDFS已经初步具备了完整的分布式文件管理功能了,包括:文件的冗余存储.文件元信息的查询.文件的下载.文件的删除等.本文将对JDFS做一个总体的介绍,主要是 ...

  7. php中常用的字符串比较函数strcmp()实例解释

    int strcmp ( string $str1 , string $str2 ) 以二进制方式进行比较以该函数比较时区分大小写返回值,如果str1小于str2返回<0,如果str1大于str ...

  8. C语言判断电脑的大、小端机

    #include int main() { int x = 0x1234; if (char(x) == 0x34)  {   printf("小端机!\n");  }  else ...

  9. Log4j按级别输出日志到不同文件配置分析 (转:projava)

    关于LOG4J 按照级别输出日志,并按照级别输出到不同文件中的说法有很多, 网上贴的最多的log4j.properties的设置是这样的 log4j.rootLogger=info,stdout,in ...

  10. Java面向对象 网络编程 上

     Java面向对象 网络编程 上 知识概要:                     (1)网络模型 (2)网络通讯要素 (3)UDP TCP 概念 (4)Socket (5)UDP TCP 传输 ...