一、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. 【Debian 8.8】Java 8 安装以及环境变量配置

    事实上可以分为简单的三个步骤: 下载 JDK 压缩包 解压压缩包 配置环境变量 需要注意的是: 所有命令默认在 root 权限下进行! 演示环境是 Debian 8.8 64位 (阿里云学生机) 1. ...

  2. [python学习笔记] py2exe 打包

    遇坑 之前经过折腾,pyinstaller打包文件可以在别的windows7上运行.但是,mfk, 客户说是xp系统.崩溃 使用pyinstaller各种折腾,打包出来的依然是不是有效的win32程序 ...

  3. Pagination(分页) 从前台到后端总结

    一:效果图 下面我先上网页前台和管理端的部分分页效果图,他们用的是一套代码.                                   回到顶部(go to top) 二:上代码前的一些知识 ...

  4. 如何关闭eclipse对js xml的验证

    经常会发现导入一些js框架,eclipse会编译报错 这是eclipse对js的瞎验证,如何解决呢? 关闭eclipse对js,xml的验证即可: 菜单Window - > Preference ...

  5. sql sever 基础知识及详细笔记

    第六章:程序数据集散地:数据库 6.1:当今最常用的数据库 sql  server:是微软公司的产品 oracle:是甲骨文公司的产品 DB2:数据核心又称DB2通用服务器 Mysql:是一种开发源代 ...

  6. JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)

    函数节流,简单地讲,就是让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数执行后过了你规定的时间间隔,才能进行下一次该函数的调用. 函数节流的原理挺简单的,估计大家都想到了,那就是定时器.当我 ...

  7. HashMap实现原理

    学习笔记之HashMap篇,简单学习了解HashMap的实现原理和扩容. 大家都知道HashMap处理数据很快,时间复杂度O(1),那么是怎么做到的呢?那就先了解一下常见数据结构. 一般来说,我们把存 ...

  8. 关于Android SDK Manager无法获取更新列表的正确设置

    1.以"管理员身份运行"SDK Manager. 2.Android SDK Manager"=>"Tools"=>"Optio ...

  9. NSTimer的问题

    iOS开发中,涉及到定时的问题,我们通常使用NSTimer来解决,例如下面的代码. SFClass.h #import <Foundation/Foundation.h> @interfa ...

  10. Java简单知识梳理

    1. Java是单根继承结构:每个类都继承于Object类 ,这也就保证了每个对象都具备某些功能 2. Java类权限关键字: public -> protected -> default ...