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. 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远程登录的更多相关文章
- Linux centosVMware su命令、sudo命令、限制root远程登录
一.su命令 Linux系统中有些事情只有root用户才能做,普通用户不能做,这时候就需要临时切换到root身份了. [root@davery ~]# whoamiroot [root@davery ...
- Linux学习之二-Linux系统的目录结构
Linux学习之二-Linux系统的目录结构 在Linux的根目录下,有很多的目录,但是需要记住,对于Linux而言,一切皆文件.因此此处的目录也是文件.用ls / 命令就能看到根目录下的各类不同的目 ...
- (转)SpringMVC学习(十二)——SpringMVC中的拦截器
http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...
- Linux学习笔记(二) 文件管理
了解 Linux 系统基本的文件管理命令可以帮助我们更好的使用 Linux 系统,以下介绍几个常用的文件管理命令 1.pwd pwd 是 Print Working Directory 的简写,用于显 ...
- 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 - ...
- su命令、sudo命令、限制root远程登录 使用介绍
第3周第3次课(4月4日) 课程内容:3.7 su命令3.8 sudo命令3.9 限制root远程登录 3.7 su命令 [root@jimmylinux-002 ~]# su - jimmy ...
- linux下禁止root远程登录和添加新用户
https://www.cnblogs.com/jianz/p/7979250.html 一.添加和root权限一样的用户 1. adduser admin passwd admin (修改密码) ...
- linux下禁止root远程登录
一.添加和root权限一样的用户 1. adduser admin passwd admin (修改密码) 2.修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示 ...
- 【Linux】Linux中在mate桌面和gnome桌面root自动登录设置
[Linux]Linux中在mate桌面和gnome桌面root自动登录设置 GLL_ 2020-03-05 11:41:40 762 收藏 1 分类专栏: Linux 文章标签: linux 版 ...
随机推荐
- MongoDB 复制篇
mongoDB 复制篇 复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写 ...
- 在java中使用MongoDB数据库
Java 安装 要想在 Java 程序中使用 MongoDB,需要先确定是否安装了 MongoDB JDBC 驱动,并且要在机器上安装了 Java.查看 Java 教程来确保在机器上安装好 Java. ...
- MySQL的一点浅显知识
本人最近看了一本有关于MySQL的书籍<MySQL必知必会>,书中只写了一些基本知识,但是也基本涵盖了所有的MySQL的知识点.其余的比较高级的也只是在基础上进行扩展或者是优化,看完这本书 ...
- Linux Ubuntu从零开始部署web环境及项目-----搭建ssh环境(一)
linux搭建ssh环境 1,用户登录 成功输入用户名和密码后 进入Ubuntu界面 2,配置网络 参考:http://blog.csdn.net/liu782726344/article/deta ...
- PHP中foreach循环传值问题
首先看一段代码: <?php $a=array('ab','cd','ef'); $count=3; foreach($a as $key=>$value){ $value='abcdef ...
- JavaScript简易计算器
JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标 ...
- Naive and Silly Muggles hdu4720
Naive and Silly Muggles Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- poj2337欧拉回路要求输出路径
Catenyms Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8368 Ac ...
- struts2中的Ajax异步校验
登录时验证码的异步校验: 1.验证码生成的是图片因此在struts.xml文件里面配置action 时,result标签中type 属性是stream 2.验证码图片的src的值为配置action名字 ...
- (转)C#中各种集合类比较
数组(Array)的不足(即:集合与数组的区别) 1. 数组是固定大小的,不能伸缩.虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是 ...