sudo和su命令
sudo
sudo是一种权限管理机制,依赖于/etc/sudoers,其定义了授权给哪个用户可以以管理员的身份能够执行什么样的管理命令。
默认情况下,系统只有root用户可以执行sudo命令。需要root用户通过使用visudo命令编辑sudo的配置文件/etc/sudoers,才可以授权其他普通用户执行sudo命令。
sudo的运行有这样一个流程:
1).当用户运行sudo时,系统于/etc/sudoers文件里查找该用户是否有运行sudo的权限;
2).若用户具有可运行sudo的权限。那么让用户输入用户自己的password,注意这里输入的是用户自己的password。
3).假设password正确。变開始进行sudo后面的命令,root运行sudo是不须要输入password的,切换到的身份与运行者身份同样的时候。也不须要输入password。
例子
sudo -u root ls -l /opt/
此处输入的密码是ossuser的密码
su
su username
在实际工作中,我们很少使用root用户在环境上进行操作,这并不安全,很容易导致对文件的误操作,尤其是删除操作,所以一般都会切换到其他权限域更小的用户来进行一系列操作,而我们通过该命令来进行用户的切换。
注:
超级权限用户root向普通或虚拟用户切换不需要密码,而普通用户切换到其它任何用户都需要密码验证。
切换使用的密码是目标用户的密码
su和su -的区别
su - USERNAME切换用户后,同时切换到新用户的工作环境中。
su USERNAME切换用户后,不改变原用户的工作目录,及其他环境变量目录。
(sudo没有sudo -的用法)
总结
1、就安全而言:sudo 命令更好。例如,考虑到需要 root 访问权限的多用户使用的计算机。在这种情况下,使用 su 意味着需要与其他用户共享 root 用户密码,这显然不是一种好习惯。
如果要撤销特定用户的超级用户/root 用户的访问权限,唯一的办法就是更改 root 密码,然后再告知所有其他用户新的 root 密码。
鉴于 sudo 命令要求输入的是其他用户自己的密码,所以,不需要共享 root 密码。同时,想要阻止特定用户访问 root 权限,只需要调整 sudoers 文件中的相应配置即可。
2、就默认行为而言:sudo 命令只允许使用提升的权限运行单个命令。而 su 命令会启动一个新的 shell,同时允许使用 root 权限运行尽可能多的命令,直到明确退出登录。
因此,su 命令的默认行为是有风险的,因为用户很有可能会忘记他们正在以 root 用户身份进行工作,于是,无意中做出了一些不可恢复的更改(例如:对错误的目录运行 rm -rf 命令!)。
3、就日志记录而言:尽管 sudo 命令是以目标用户(默认情况下是 root 用户)的身份执行命令,但是它们会使用 sudoer 所配置的用户名来记录是谁执行命令。而 su 命令是无法直接跟踪记录用户切换到 root 用户之后执行了什么操作。
4、就灵活性而言:sudo 命令比 su 命令灵活很多,因为你甚至可以限制 sudo 用户可以访问哪些命令。换句话说,用户通过 sudo 命令只能访问他们工作需要的命令。而 su 命令让用户有权限做任何事情。
其实就是sudo更安全,灵活;su更方便