su和sudo命令的用法与区别
su是set user的简写,翻译成大白话就是 设定用户的意思。sudo命令也是一个组合命令,意为set user do,翻译成大白话就是 设定用户 ,操作某些事务。
su 这个命令使用比较简单,该条命令前面已经解释,基本功能就是切换用户。
切换用户有两种方式,
第一种,su 用户名,切换到root用户时候需要提供root密码验证,root切换到普通用户无需提供密码验证,此时环境变量仍然保留为切换前用户。
第二种,su - 用户名,这个需要注意,-后有一个空格,验证方式同第一种,只是环境变量随用户转化,比如a切换到b用户,环境变量也变为b用户的环境变量,仅此而已。
su命令说完了,该说说sudo这个命令的来历了。我们可以想到,Linux是多用户多权限控制多任务的系统,其中一个超级权限用户为root,剩下的为普通用户,超级用户想干什么就可以干什么,可以理解为当前系统的神。可以想象,如果一直使用root这个超级用户,如果操作有误,密码造成了泄露,或者误删了什么重要的只有root可操作的文件,那么系统是不安全的,因此有低权限用户临时提权的方法就可以了,提权的时候验证一下root的密码不就安全了吗?sudo命令就是这个方法。
sudo只用作提升普通用户权限到root用户,也就是说该命令只有权限修改的功能,和su这个命令切换用户是不同的,su是双向的,并且su是永久的,而sudo是临时的,命令执行完了,还是原来的用户和环境变量。
那么,如何使用sudo呢?三种常见的方法:
第一:usermod -G wheel 用户名 或者 usermod -g wheel 用户名 #超级组wheel,该组内的所有用户可以使用sudo命令,将需要提权的用户加入该组就可以使用sudo命令了。
第二:visudo命令,添加一行: %组名 ALL(ALL) ALL。 需要提权的用户加入该组即可: usermod -G 组名 用户名。
也就是说,不用默认的wheel组名了,自己定义一个组名。
第三:命令 visudo,添加 用户名 ALL=(ALL) ALL 或者 用户名 ALL=NOPASSWD: ALL,然后保存即可。NOPASSWD:
可以免密码验证使用sudo命令。
不推荐直接给/etc/sudoers这个文件修改权限,那样不是安全的行为,强烈推荐使用visudo命令。
总结:
su 用户名和su - 用户名 是永久切换用户,加 - ,环境变量也跟着切换。切换时需要验证密码,低等切高等权限验证高等用户密码。
sudo 需要修改 /etc/sudoers文件,但为了安全一般使用visudo命令,或者将低权限用户加入wheel组内。sudo仅仅是临时提权的作用,记住,是临时。
当然,两个命令都有一些参数,可以配合使用,但实际用处不是很大,可以忽略。