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 传递一条命令



而不创建新会话



1.3 用例



1.现在在用户user1下,不想切换用户至user2,只想以用户user2的身份执行一条命令




su -c "mkdir /hoem/user2/test" user2



linux 和sudo等价的命令_shell

从上图可以看出,要注意在要执行的命令加上双(或单)引号



2.切换到root用户



su #不切换至root的家目录su - #单个 - 视为 -l。如果未指定 USER,将假定为 rootsu - root #切换到root并转到root的家目录


上面三种方式都可以切换到root用户。su 在不加任何参数,默认为切换到root用户,但没有转到root用户家目录下,也就是说这时虽然是切换为root用户了,但并没有改变root登录环境;用户默认的登录环境,可以在/etc/passwd 中查得到。



3.su与su -




linux 和sudo等价的命令_shell

可以看到两次登录是不同的,加(-)以后会从当前目录切换到要切换用户的家目录,否则还是当前的目录。



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用户组中的用户在不输入该用户的密码的情况下使用所有命令



( %wheel        ALL=(ALL)       NOPASSWD: ALL)


2.让普通用户test具有所有超级用户的权限而又不用输入密码



test ALL=(ALL) NOPASSWD:ALL



linux 和sudo等价的命令_shell_03

可以看到,用户test可以在使用sudo命令时删除root目录下的abc文件。



3.针对MySQL数据库的设置,让test组中的test用户具备/etc/init.d/mysqld的权限



test ALL=(ALL) NOPASSWD: /etc/init.d/mysqld


4.限制只能切换到指定用户组,执行某些命令



test ALL=(root) /bin/chown, /bin/chmod


上面的例子中,用户test只能切换到root用户组,执行除自身命令以外的/bin/chown和/bin/chmod命令



通过sudo -l 来查看test用户在这台主机上允许和禁止运行 的命令;




linux 和sudo等价的命令_shell_04

5.授权某个用户组的用户都可以执行某些命令



%test ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk


注意:%test之前不要有空格,通配符/usr/bin/*表示可以使用/usr/bin下所有的命令,但是不能执行/usr/sbin/fdisk命令



6.使用正则表达式



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所属用户组的用户都可以执行相关命令




linux 和sudo等价的命令_数据库_05