linux的su ,su -和sudo

还是自己动手写一下,印象更深刻

以centos6.5为示例说明

先说下su 跟su -:

su - zhangsan #当执行这个命令的时候表示切换到zhangsan用户,并且重新读取用户环境相关配置文件,具体的来说就是执行下用户家目录下.bash_profile和.bashrc文件,这个我们成为全切换.,此时当前路径切换为zhangsan的home路径:/home/zhangsan。

su zhangsan #执行这个命令的时候系统不读取以上两个文件,所以我们一般称它为半切换,这样切换过去之后,zhangsan用户使用的依旧是此前用户的环境配置信息。且当前路径还是切换前的路径

可以用echo $PATH来区别,全切换的PATH变量和切换前不一样了,后者仍然一样。

 

 总结:切换用户,没有特殊情况,使用 su - ,否则执行一些命令可能会碰到环境变量的问题;root切换到普通用户,不需要输入密码,其它用户切换到root,或者其它用户都需要输入用户的密码;

    user1 切换到user2,如果想切回user1,可以使用exit,而不需要再次输入密码切换。

    如果只需要在某些用户下执行命令,而不需要切换用户,可以使用su - user -c "命令 "

再来看sudo

当你想使用某个用户执行某命令时,需要知道切换用户的密码。如何授权其它用户在不需要知道其它账号密码的时候可以使用命令呢?此时可以使用sudo。

sudo -u username command

如果是要以root用户执行命令时,不需要sudo -u root COMMAND,直接可以sudo COMMAND即可

sudo命令:

语法:sudo [-bhHpV][-s ][-u <用户>][指令]
或 sudo [-klv]
参数:
-b  在后台执行指令。
-h  显示帮助。
-H  将HOME环境变量设为新身份的HOME环境变量。
-k  结束密码的有效期限,也就是下次再执行sudo时便需要输入密码。
-l  列出目前用户可执行与无法执行的指令。
-p  改变询问密码的提示符号。
-s  执行指定的shell。
-u <用户>  以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。
-v  延长密码有效期限5分钟。
-V  显示版本信息。
-S   从标准输入流替代终端来获取密码

 

sudoers文件,位于/etc/路径下,定义了授权给哪个用户或用户组可以以管理员的身份执行什么样的命令。 

由于此文件很重要,所以编辑此文件有一个专门的命令:visudo。当有一个管理员对这个文件进行编辑的时候,这个文件会被系统加上一个“锁”,意思就是不允许多个管理员同时对其进行编辑,这也是为了系统安全着想。

找到这几行文件

第一行:root(用户账户)  ALL=(ALL)(可切换的账户,就是sudo -u username command这里的username)  ALL指可执行所有的命令

第二行:%wheel指这个wheel组里的用户可以执行所有用户下的所有命令

第三行:NOPASSWD:all,默认执行sudo COMMAND时需要输入当前用户password,这里表示不需要数据password。

我们添加一行

 

表示zhangsan用户可以sudo执行所有命令,跟root一样,且执行时不需要输入自己的密码

表示李四只能执行cat /etc/shadow 命令,且必须输入自己的密码 。注意,cat的命令要输入全路径

另外,ALL=/sbin/*,/usr/sbin/* 指可以执行所有/sbin/和/usr/sbin/下的所有命令

排除执行某些命令,可以在前面添加!,如! /usr/bin/passwd root 指不可以修改root的密码。

组的配置也是基本如此。

 

posted @ 2017-08-07 20:23  露似真珠月似弓  阅读(480)  评论(0编辑  收藏  举报