2019独角兽企业重金招聘Python工程师标准>>>

1、su 命令

之前说到一个命令 su ,是用来切换用户的。见下图

命令 su - lys 中的 - ,是为了彻底切换用户,包括一些配置和环境变量等。如果不加 - 的话,见下图,

使用命令 pwd ,可以看到还在 /root 加目录下,但是系统显示 lys 用户。

再次使用 - ,就可以发现 pwd 之后,是在 /home/lys 加目录下面,而不是在 /root 加目录下了。在自己的加目录下,就会加载自己的一些配置文件。

接着做实验,见下图,

上图中“-c”表示以用户 lys 的身份执行命令 touch /tmp/lys.111 ,可以看到成功创建了 lys.111 文件。再看一下这个文件的详细信息,所有者是 lys ,所属组是 grp2 。

root 用户下可以直接切换为普通用户,普通用户也可以切换到普通用户,只是要输入密码,见下图,

上图的过程是,查看时间,然后切换到普通用户 lys ,再切换到普通用户 user5 ,需要输入密码,发现不能切换到用户 user5 ,这是因为之前操作的时候将 user5 锁定了。接着使用命令 Ctrl + d 登出,在 root 用户下更改一下用户 user5 密码,密码更改成功之后,重新切换用户到 lys ,再接着切换用户到 user5 ,然后输入密码。出现警告“su: 警告:无法更改到 /home/user5 目录: 没有那个文件或目录”,这是因为用户 user5 的加目录 /home/user5/ 不存在,所以没有用户的配置文件可以加载,才导致命令前缀显示成 “-bash-4.2$”。

怎么做可以使命令前缀正常显示呢?见下图,

创建一个用户的加目录 /home/user5 ,更改目录的所有者和所属组,然后再次切换用户,发现还是不行,因为用户的加目录下还是没有任何的配置文件。而在用户 lys 下面,即上图红色框框部分,就是用户加目录的配置文件,所以用户 lys 的命令前缀可以正常显示。

那怎么做才可以使用户 user5 的命令前缀正常显示呢?见下图,

系统有一个模板目录 /etc/skel/ ,通过拷贝可以复制到用户 user5 的加目录下,其中 .bash* 中的 . 表示隐藏文件, * 表示通配的,即以 .bash 开头的所有文件。拷贝完成后,不要忘记更改加目录的所有者和所属组。其中 !$ 表示上一条命令的最后一个参数。

接着来切换用户 user5 ,见下图,

可以看到命令前缀能正常显示了。然后注意一下红色框框里面的符号是不一样的,root 用户是 # ,普通用户是 $ ,这是有区别的。

那么,root 用户可以切换到普通用户,普通用户能不能切换到 root 用户呢?见下图,

结果显示可以的,只要知道 root 用户的密码就行了。

2、sudo命令

上面说的 su 命令可以让普通用户切换到 root 用户,前提是普通用户知道 root 用户的密码,既然普通用户知道了 root 用户的密码,就可以直接登录 root 账户,为什么还要通过普通用户切换到 root 用户呢?这是有点矛盾的地方,为了更加安全,系统还有一个命令 sudo 。它可以让普通用户临时去执行一条命令,以指定用户的身份去执行,通常情况下都是给普通用户授权 root 用户的身份。

先来看一下配置文件,输入命令 visudo ,回车,见下图,

执行 visudo 这个命令可以打开 sudo 的配置文件,这个配置文件还是很重要,不能用命令 vi 去打开,可以看一下上图红色框框,实际上打开的是 /etc/sudoers.tmp 这个文件,也就是说我们可以用 vi 来编辑这个文件,但是不建议直接编辑。因为一旦有一些语法错误,会没有办法检测到,而使用命令 visudo 就可以检测到。

用方向键往下查看,找到下图红色框框的内容,见下图,

这一行内容是整个配置文件中最核心的一句配置,它表示允许 root 用户去运行所有的命令,在任何地方。接着在下面写一行内容,按字母“i”进去编辑模式,见下图,

三个 ALL 表示的意思不一样,左边的 ALL 表示在哪里,也就是主机。中间括号里面的 ALL 指的是用户,表示 lys 用户将会被授予哪个用户的身份,这个和 set_uid 有点像,但是又不太一样。具体不用深究,保持默认就可以。最后面这个 ALL 表示所有的命令,也可以写成一个命令或多个命令。

最后保存的内容,见下图,

上图编写加入的内容的目的是,为了让 lys 用户拥有 root 的身份去执行 ls 、 mv 和 cat 这三个命令。按 Esc 键退出,输入 :wq ,回车,保存并退出。接着就出现了下图的警告,

上面说了,命令 visudo 是可以检查错误的,也就是说,刚才写入的那一行内容是有错误的,现在按一下回车,也会有提示,见下图,

输入字母“e”,回车,进入重新编辑,输入 :set nu ,回车,可以查看行数,见下图,

按方向键往上查找,可以看看其他相似的内容是怎么写的,见下图,

上图可以看出,要写绝对路径,使用逗号分割之后,还要一个空格。重新编辑之后,见下图,

按上面内容填写,保存并退出。这次就没问题了。

之后切换到 lys 用户下面,就可以查看 /root/ 目录,见下图,

简单解释一下上图的流程,先是从 root 用户切换到 lys 用户,然后发现可以查看 /root/ 目录。接着验证一下,先登出,去掉 s 权限,再次切换为 lys 用户,接着查看 /root/ 目录。正常是不能查看的,这边居然可以查看,说明这边有问题,需要排查一下。使用命令 ls -ld /root/ 先查看一下目录的权限,发现用户权限没有问题,不包含 s 选项。用 ctrl + d 登出,在 root 用户下使用命令 ls -l /usr/bin/ls 来查看,发现命令 ls 的所属组有 set_gid 权限,这是之前设置的,才会出现这种情况。接着将命令 ls 中所属组的 s 选项去掉,再次切换用户为 lys ,然后查看目录 /root ,这时候就出现“权限不够”的警告了。

现在来检测 sudo ,见下图,

正常情况下,使用 ls 命令来查看 root ,是没有权限的,但是使用命令 sudo 就可以了。第一次使用的时候需要输入密码,第二次使用就不用了。

接着看一下 cat ,见下图,

以上就是 sudo 命令的作用,可以使普通用户临时拥有 root 用户的权限。这样操作就可以避免把 root 用户的密码给普通用户,只需要做个授权就可以了。

接着登出,继续看 visudo 的内容,见下图,

增加一行上图红色框框的内容,授权一下用户 user5 的权限,输入密码比较麻烦,所以写上 “NOPASSWD” ,然后退出并保存。见下图,

可以看出,用户  user5 使用 sudo 命令的时候不用输入密码了,然后 ls 直接输入还是使用绝对路径是没有影响的。

登出,使用命令 visudo 接着查看,一些指代别名,见下图,

上图中,Host_Alias 开头的这一行,fs1 是主机名,fs2 是用户,可以把 fs1 和fs2 全部放到  FILESERVERS 中。Host 可以设置 Alias ,User 也是可以的。User_Alias 中把 jsmith, mikem 这两个用户放到组 ADMINS 里面。其中,ADMINS 是一个虚拟的用户,这个虚拟用户里面有两个真实的用户 jsmith 和 mikem 。

还有一个 Cmnd_Alias ,命令的 Alias ,其中 NETWORKING 指代的就是“=”后面的那一大串命令。我们也可以模仿着写一个虚拟的指代命令,见上图最后一个红色框框。首字母需要大写,命令的别名也需要大写 LYS_CMD ,在之前增加用户 lys 的内容做个修改,然后保存退出。见下图,

接着来验证一下,见下图,

结果都没有问题。

除了以上的用法,还有一个概念,上述说的都是用户,针对组的就是 wheel ,见下图,

也就是说,第一个字段里面可以是用户组,也可以是用户。用户组也可以理解为一些用户。例如可以将用户 lys 、 user5 、user6 等用户做一个整合,放在同一个用户组,接着设置一个限制,就可以实现。

使用命令 visudo 还可以查看更多 sudo 的用法,这边就不多介绍。正常工作中偶尔会用到 sudo 命令,即使用到也不会特别复杂,掌握好以上知识点即可。

注意:su切换用户输入的是目标用户的密码,而sudo切换用户输入的是当前用户的密码。

3、限制 root 远程登录

平时登录 Linux 系统中,都是使用 root 用户的身份登录的。实际上,使用 root 登录是有一定的危险性。假如 root 用户没有使用密钥而是使用密码登录,密码设置简单容易被破解,设置复杂自己也记不住,存放在第三方还是有被窃取的风险。密码丢失会导致其他用户可以远程登录 root 用户,存在风险。

所以安全起见,可以禁止 root 远程登录,本地 root 登录是禁止不了的。现在可以设置为只允许登录普通用户,普通用户要想拿到一些 root 用户的权限,可以使用 su 和 sudo 命令,来实现临时切换 root 用户,而无法知道 root 用户密码。具体操作是把 su 命令放到 sudo 命令列表里面,之后就可以使用 sudo 命令远程使用 root 权限。

简单来说一下限制 root 远程登录的逻辑:

因为 root 用户无法登录,所以先登录到普通用户里,再 su 切换到 root 用户下面,这时候就需要输入 root 用户密码,而密码又是不知道的。而在 root 用户下面切换到 root 是不需要密码的,见下图,

输入命令 visudo ,进入编辑模式,在 User_Alias 下面增加一条设置,见下图,

然后在下面继续设定一个规则,见下图,

保存退出后,见下图,

先切换到普通用户 lys ,再切换到 root 用户,这时候就可以不输入密码登录了。

以上操作的前提是远程登录 root 。不过这个 ALL 权限有点大,可以直接更改 root 密码,然后直接登录  root 用户。这还是不行的,所以需要限制 root 用户远程登录的功能。输入命令 vi /etc/ssh/sshd_config ,回车,见下图,

这边直接输入“/”,后面加查找内容,就可以查找。输入“/Root”,回车,

我们需要的是上图红色框框的内容,将前面的 # 号删除,yes 改为 no ,见下图,

接着保存后退出。改完配置文件后,需要重启网络服务,输入命令 systemctl restart sshd.service ,回车即可。然后重新打开一个服务器 PuTTY ,看看还能不能登录,见下图,

可以看出不能登录,而且输入了 root 密码也还是不能登录。接着在 PuTTY 上登录用户 lys ,见下图,

可以登录普通用户 lys ,访问目录 /root/ 被拒绝,切换用户 root 的时候,提示需要输入密码,我们这边假定是不知道 root 密码的,所以最后使用 sudo 命令就可以成功登录 root 用户。

以上说明限制 root 远程登录成功了。为了以后方便做实验,还是要把远程登录限制去掉的。

输入命令 vi /etc/ssh/sshd_config ,回车,恢复上图内容,保存后退出,输入命令 systemctl restart sshd.service ,回车即可重启网络。然后 PuTTY 上就可以重新登录 root 了。

转载于:https://my.oschina.net/u/3867265/blog/1828648

su 、 sudo 命令及限制 root 远程登录相关推荐

  1. Linux的su命令,sudo命令和限制root远程登录

    3.7 su命令: su命令是用来切换用户的,例如我要从root用户切换到user2用户:   这个 - 选项是彻底切换用户的意思,如果不加 - 选项也可以,但是切换得不彻底,例如当前的家目录还是ro ...

  2. su、sudo命令和限制root远程登录

    su命令: *su命令有两种用法:1.切换用户,2.以某个用户的身份执行一条命令 1.切换用户:su - username [root@localhost ~]# su - linux01 # - 切 ...

  3. 12月27日课程笔记 su、sudo命令及限制root远程登陆

    一.su命令 su命令用于切换当前用户身份到其他用户身份.有点像windows下的注销再登陆. 命令语法: su -选项 - 用户名 选项: -c<指令>或--command=<指令 ...

  4. sudo命令 和限制root 远程登陆

    1.对sudo命令的配制,输入 visudo 然后,找到92行进行以下配制 以下就是效果 比如: 如果要同时给两个普通用户设置这样子的权限,就可以用另一种方式,下面这种方式不可取的 而是用这种 效果如 ...

  5. 三周第三次课(11月1日) 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录

    2019独角兽企业重金招聘Python工程师标准>>> 3.7 su命令 su - 用户名 切换用户(加-彻底切换用户包括一些配置文件) 不加 - 的话 还会在root 家目录下 加 ...

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

    2019独角兽企业重金招聘Python工程师标准>>> mkpass  解释:make password [root@cham2 ~]# mkpasswd    make passw ...

  7. su命令 sudo命令 限制root远程登录

    su命令 sudo命令 限制root远程登录 su命令 日常操作中为了避免一些误操作,更加安全的管理系统,通常使用的用户身份都为普通用户,而非root.当需要执行一些管理员命令操作时,再切换成root ...

  8. 三周第三次课 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录

    3.7 su命令 1.su命令 su命令是用来切换用户的: su命令需要使用- 进行切换,如果不使用- 也可以, 但当前目录是在root下,没有彻底切换 在root下 使用su命令创建文件,以指定用户 ...

  9. su命令\sudo命令\限制root远程登录

    3.7su命令 [root@MOMOCO-02 ~]# whoami root [查看当前的用户] [root@MOMOCO-02 ~]# su - user01 上一次登录:三 12月 27 15: ...

最新文章

  1. python3下载教程-《Python3从入门到放弃》视频教程
  2. 小鼠皮肤组织细胞悬液制备流程
  3. JBoss类加载机制 ClassLoadingConfiguration
  4. macbook历代_苹果MacBook Pro为什么越来越贵?历代回顾与新MBP简评
  5. 如何有效地遍历Java Map中的每个条目?
  6. 微任务,宏任务和Event-Loop
  7. 服务器远程桌面 设置 时间,如何设置使远程桌面连接时间变长?
  8. 为了对电脑进行保护,已经阻止此应用。
  9. “一个优秀程序员可抵五个普通程序员!”
  10. fatal: You have not concluded your merge (MERGE_HEAD exists). Please, commit your changes before you
  11. CLion设置默认显示汇编指令的格式
  12. 【Python + selenium】在浏览器打开新页签,打开方式
  13. SEO网站优化真的比其他网络推广方式好吗,优势在哪里?
  14. 会声会影视频剪辑详细教程
  15. 开始和终止工作英语怎么说?
  16. SpringCloud无法获取Nacos中的配置文件信息
  17. 控制系统仿真技术(一)仿真软件-MATLAB
  18. RSD 教程 —— §3.2 创建的层
  19. Floodlight控制器的安装以及SDN环境的配置
  20. 剑网3 插件 取得服务器信息,剑网3服务器监控插件

热门文章

  1. router锚点和html锚点,react-router 环境使用锚点的方法
  2. 加个ing是什么意思_英语中动词ed和ing形式作形容词时用法有啥区别,牢记以下要点!...
  3. c语言程序设计基础项目教程,C语言程序设计基础项目教程
  4. 24暴力枚举四平方和
  5. 面向对象课程 - 寒假第三次作业 - C++计算器项目初始部分
  6. 在JavaScript中使用json.js:Ajax项目之POST请求(异步)
  7. 大熊君大话NodeJS之------Net模块
  8. .net framework处理xml
  9. Hbase单点安装Version1.1.5
  10. java 不定长参数实现原理