su命令主要用于用户切换,超级权限用户root向普通或虚拟用户切换不需要密码,普通用户切换到其它任何用户都需要密码验证。
1)说下su的优缺点:
su的确为管理带来方便,通过切换到root下,能完成所有系统管理工具,只要把root的密码交给任何一个普通用户,他都能切换到root来完成所有的系统管理工作;
但通过su切换到root后,也有不安全因素;比如系统有10个用户,而且都参与管理。如果这10个用户都涉及到超级权限的运用,做为管理员如果想让其它用户通过su来切换到超级权限的root,必须把root权限密码都告诉这10个用户;如果这10个用户都有root权限,通过root权限可以做任何事,这在一定程度上就对系统的安全造成了威协;想想Windows吧,简直就是恶梦;“没有不安全的系统,只有不安全的人”,我们不能绝对保证这10个用户都能按正常操作流程来管理系统,其中任何一人对系统操作的重大失误,都可能导致系统崩溃或数据损失。
所以,su工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用;超级用户root密码应该掌握在少数用户手中,这绝对是真理!
2)su受限版 —— sudo:
由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。如果用su来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和 管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到 sudo。
通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo也能被称为受限制的su ;另外sudo是需要授权许可的,所以也被称为授权许可的su。
sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;
3)编写 sudo 配置文件/etc/sudoers
编辑/etc/sudoers文件方式:
文件的权限很低,只有超级管理员root仅读。编辑这个文件,①可以切换到root用vi修改强制保存,②也可以先用chmod修改权限再vi修改,或者③直接使用编辑工具visodu。
说明:
使用visudo工具打开后,编辑器使用的是nano,vi命令不可用。编辑器下面有命令提示,使用时不懂的自己百度下。
visudo工具的好处是在添加规则不太准确时,保存退出时会提示给我们错误信息;配置好后,可以用切换到您授权的用户下,通过sudo -l 来查看哪些命令是可以执行或禁止的
先看下/etc/sudoers文件内容:
说明:
/etc/sudoers 文件中每行算一个规则,前面带有#号是注释描述;
如果规则很长,一行列不下时,可以用\号来续行,这样看来一个规则也可以拥有多个行;
看上图中的②,就是这行规则,ubuntu账户在每次命令前加上sudo都可以获得root权限。
解读sudo规则
ubuntu ALL=(ALL:ALL) NOPASSWD: ALL
1)第一个字段ubuntu:用户名,每个用户设置一行,多个用户设置多行,也可以将多个用户设置成一个别名后再进行设置。
2)第二个字段ALL:用户所在的主机,可以是ip,可以是主机名,表示这个sudo设置后的文件即/etc/sudoers只在这个主机上生效,ALL表示在所有主机上都生效!限制的一般都是本机,也就是限制使用这个文件的主机。如果指定为"192.168.1.88="表示这个文件只有在这台主机上生效,如果拷贝到别的机子上是不起作用的!一般都指定为"ALL"表示所有的主机,不管文件拷到那里都可以用。
3)第三个字段(ALL:ALL):(用户:用户组),以任何用户身份执行sudo,即使用sudo后可以享有所有账号下的权限。如果要排除个别用户,可以在括号内设置,比如ALL=(ALL,!root,!ops)。
4)第四个字段ALL:执行的命令,即使用sudo后可以执行所有的命令。NOPASSWD: 表示使用sudo不需要输入密码(不需要输入账户自己的密码,不是root的密码)。默认情况下,需要输入密码。
整体理解为:ubuntu账户在所有的主机上,不用输入密码,就可以拥有全部用户的所有操作权限。
现在知道为什么ubuntu账户加上sudo就可以拥有任何超级管理权限了吧。
%sudo ALL=(ALL:ALL) ALL
%用来表示是组名。
添加新的sudo规则
新建的用户不在sudo组,楠神的服务器上有nanshen账户,目前就不在/etc/sudoers文件里。
来为nanshen账户添加一行规则
nanshen ALL=(root) NOPASSWD: /bin/cat,/bin/more
①在/etc/sudoers添加规则
②没有报错,说明规则添加成功了。
为了安全,注释掉普通用户的sudo规则
上面说了,“su只适用于一两个人参与管理的系统”,处于安全的考虑,如果服务器只属于一个人的,建议就把其他用户的sudo规则去掉,防止多个超级用户存在。
都注释掉了,nanshen账户的sudo命令全部失效了,可ubuntu账户(腾讯云初始的默认账户)的sudo命令还可以继续使用。后来楠神发现原来在/etc/sudoers.d/90-cloud-init-users文件里还有:
注释掉
ubuntu账户彻底不支持sudo命令了。
因为在/etc/sudoers文件里有
#includedir /etc/sudoers.d
这行代码,sudo时会读取/etc/sudoers.d中的每个文件。
总结:
本节对sudo做了一个最基础的了解,因为我们从网上找教程时,经常在各种命令前出现sudo命令,学过本节后总算知道是怎么回事了。
有关sudo规则定义这块知识,本节只是做了一个简述,/etc/sudoers 的规则可分为两类;一类是别名定义,一类是授权规则;别名定义并不是必须的,但授权规则是必须的。详细的介绍感兴趣的大家自己网上搜相关资料吧。
推荐一篇文章《sudo命令使用的几个场景》