linux下su和sudo命令

1.su:临时切换用户

1.1 su 的适用条件

  su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用户没有这个权限,而这个权限恰恰由root所拥有。解决办法无法有两个,一是退出beinan用户,重新以root用户登录,但这种办法并不是最好的;二是我们没有必要退出beinan用户,可以用su来切换到root下进行添加用户的工作,等任务完成后再退出root。我们可以看到当然通过su 切换是一种比较好的办法;
  通过su可以在用户之间切换,如果超级权限用户root向普通或虚拟用户切换不需要密码!而普通用户切换到其它任何用户都需要密码验证;
1.2 su的用法
用法:
su [选项] [-] [USER [参数]...]
将有效用户 id 和组 id 更改为 USER 的 id。
单个 - 视为 -l。如果未指定 USER,将假定为 root。
选项:
 -m, -p, --preserve-environment,不重置环境变量
 -, -l, --login,使 shell 成为登录 shell
 -c, --command <命令>,使用 -c 向 shell 传递一条命令
 --session-command <命令>,使用 -c 向 shell 传递一条命令,而不创建新会话
1.3 用例
1.现在在用户user1下,不想切换用户至user2,只想以用户user2的身份执行一条命令
  1. su -c "mkdir /hoem/user2/test" user2
从上图可以看出,要注意在要执行的命令加上双(或单)引号
2.切换到root用户
  1. su #不切换至root的家目录
  2. su - #单个 - 视为 -l。如果未指定 USER,将假定为 root
  3. su - root #切换到root并转到root的家目录
上面三种方式都可以切换到root用户。su 在不加任何参数,默认为切换到root用户,但没有转到root用户家目录下,也就是说这时虽然是切换为root用户了,但并没有改变root登录环境;用户默认的登录环境,可以在/etc/passwd 中查得到。
3.su与su -
可以看到两次登录是不同的,加(-)以后会从当前目录切换到要切换用户的家目录,否则还是当前的目录。

1.4 su的优缺点

  su 的确为管理带来方便,通过切换到root下,能完成所有系统管理工具,只要把root的密码交给任何一个普通用户,他都能切换到root来完成所有的系统管理工作;但通过su切换到root后,也有不安全因素;比如系统有10个用户,而且都参与管理。如果这10个用户都涉及到超级权限的运用,做为管理员如果想让其它用户通过su来切换到超级权限的root,必须把root权限密码都告诉这10个用户;如果这10个用户都有root权限,通过root权限可以做任何事,这在一定程度上就对系统的安全造成了威协;想想Windows吧,简直就是恶梦;“没有不安全的系统,只有不安全的人”,我们绝对不能保证这 10个用户都能按正常操作流程来管理系统,其中任何一人对系统操作的重大失误,都可能导致系统崩溃或数据损失;所以su 工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用;超级用户root密码应该掌握在少数用户手中,这绝对是真理!所以集权而治的存在还是有一定道理的;

2.sudo:赋予普通用户管理权限

2.1 sudo的适用范围

       由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。如果用su 来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到 sudo。
  通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su;
  sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;

2.2 sudo命令的执行流程

将当前用户切换到超级用户下,或切换到指定的用户下,
然后以超级用户或其指定切换到的用户身份执行命令,执行完成后,直接退回到当前用户。
具体工作过程如下:
当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
-->确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
-->若密码输入成功,则开始执行sudo后续的命令

2.3 sudo常用命令

sudo [参数选项] 命令
-b:将要执行的命令放在背景执行
-l:列出用户在主机上可用的和被禁止的命令;一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的;
-v:验证用户的时间戳;如果用户运行sudo 后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo 操作;用-v 可以跟踪最新的时间戳;因为sudo在第一次执行时或是在N分钟内没有执行(N预设为5)会询问密码。这个参数是重新做一次确认,如果超过N分钟,也会问密码。
-k:删除时间戳,下一个sudo 命令要求用求提供密码;将会强迫使用者在下一次执行sudo时询问密码(不论有没有超过N分钟)
-u username/#uid 不加此参数,代表要以root的身份执行命令,而加了此参数,能以username的身份执行命令(#uid为该username的UID
-s:执行环境变量中的SHELL所指定的Shell,或是/etc/passwd里所指定的Shell

2.4 /etc/sudoers常用配置

       sudo的配置文件是/etc/sudoers ,我们可以用他的专用编辑工具visodu ,此工具的好处是在添加规则不太准确时,保存退出时会提示给我们错误信息;配置好后,可以用切换到您授权的用户下,通过sudo -l 来查看哪些命令是可以执行或禁止的;
       /etc/sudoers 文件中每行算一个规则,前面带有#号可以当作是说明的内容,并不执行;如果规则很长,一行列不下时,可以用\号来续行,这样看来一个规则也可以拥有多个行;
       /etc/sudoers 的规则可分为两类;一类是别名定义,另一类是授权规则;别名定义并不是必须的,但授权规则是必须的;
/etc/sudoers中的授权规则: 
授权规则是分配权限的执行规则,我们前面所讲到的定义别名主要是为了更方便的授权引用别名;如果系统中只有几个用户,其实下放权限比较有限的话,可以不用定义别名,而是针对系统用户直接直接授权,所以在授权规则中别名并不是必须的;
授权规则并不是无章可寻,我们只说基础一点的,比较简单的写法。
1.sudo时不需要输入命令直接执行
/etc/sudoers文件设置为允许用户在不输入该用户的密码的情况下使用所有命令
如设置允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
  1. %wheel        ALL=(ALL)       NOPASSWD: ALL
2.让普通用户test具有所有超级用户的权限而又不用输入密码
  1. test ALL=(ALL) NOPASSWD:ALL
可以看到,用户test可以在使用sudo命令时删除root目录下的abc文件。
3.针对MySQL数据库的设置,让test组中的test用户具备/etc/init.d/mysqld的权限
  1. test ALL=(ALL) NOPASSWD: /etc/init.d/mysqld
4.限制只能切换到指定用户组,执行某些命令
  1. test ALL=(root) /bin/chown, /bin/chmod
上面的例子中,用户test只能切换到root用户组,执行除自身命令以外的/bin/chown和/bin/chmod命令
通过sudo -l 来查看test用户在这台主机上允许和禁止运行 的命令;
5.授权某个用户组的用户都可以执行某些命令
  1. %test ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk
注意:%test之前不要有空格,通配符/usr/bin/*表示可以使用/usr/bin下所有的命令,但是不能执行/usr/sbin/fdisk命令
6.使用正则表达式
  1. test1,test2,%test1 ALL=/bin/chown,/bin/chmod,/usr/sbin/adduser,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,/sbin/parted,/sbin/fdisk
上面的设置表示,test1,test2及test1所属用户组的用户都可以执行相关命令
参考:
1.linux su和sudo命令的区别,http://www.jb51.net/LINUXjishu/12713.html
2. sudo配置文件/etc/sudoers详解及实战用法,http://blog.csdn.net/field_yang/article/details/51547804
3./etc/sudoers配置文件详解,https://my.oschina.net/aiguozhe/blog/38706
posted @ 2017-04-11 13:52  flyme123  阅读(240)  评论(0编辑  收藏  举报