我按百度的sudo passwd root就一直更改密码,但是输了su然后输密码就切换了,搞不懂为什么?


就据我2019年5月20日看到的问题来回答


下面开始一个一个说:

(首先声明,在每行命令第一个出现的$或#字元不是命令的一部分,而是Shell的提示符,$表示当前是一般用户,#表示当前是root用户,如果要在自己的电脑上试的话,去掉$或#后面的命令才是要输入的命令

$ sudo passwd root

上面这行命令的意思是作为sudoer修改root用户的密码


$ sudo command

上面这行命令的意思是作为sudoer以root的身份执行command,root身份仅在这次运行该command命令时有效,此条command命令之外的其他命令和此条command结束之后 ( 不包括由此条command调用的程序 ) 的其他命令将会恢复为原来的用户执行


$ su username

上面这行命令的意思是切换到username用户,切换之后计算机将认为坐在终端前的用户换人了,所以类似一个重新登陆为其他用户的过程(不同之处在于保留了之前的用户登陆状态),所以你会看到执行su username之后工作目录变了,同时有可能会看到使用的shell变了,在主动 exitlogout前将一直以username的身份执行这期间的所有命令 ,exitlogout之后你将回到原来的用户


$ passwd username ******

( 注:******代指密码 )

上面这行命令的意思是将username的密码改为******

  1. passwd yourself 就是更改自己的密码,这显然不需要什么特殊许可权,可以直接执行,所以你可以没事改著玩,当然哪天改忘了登不进计算机了就别来找我了;
  2. 但是,当你passwd other-user的时候,意味著你要改变别的用户的密码,这显然是不可以的;
  3. 虽然改变别人的密码理论上不可行,但是root用户的特征就是猥琐愈猥:

这张照片非常典型,右一为真正的root用户,左一为日常使用root而死活不改的用户

4. 所以如果把自己的身份切换成root就可以做任何爱做的事了;

5. 因为改别人密码这种下流的事 [公式] 任何爱做的事,那么把自己切换成root当然可以切换别人密码了。那么怎么把自己切换成root来执行一条命令呢?sudo passwd other-user *** (***可以是随机生成的一堆不知所云的数字),你值得拥有;

6. 当然还有另一个办法就是su root然后输入root的密码后执行 passwd other-ueser ***,但是用这个办法如果忘了及时退出就会被运维管理员发现,然后就会被运维管理员追著用菜刀砍,所以如果只是执行一条命令的话使用sudo临时切换一下就可以了;同理你也可以sudo su root,这样只需要先输入自己的密码启用sudoer许可权,然后以root的身份切换到root(我换我自己),就可以猥琐欲猥了 ;


总结一下,

$ sudo command

表示一个sudoer临时以root的身份执行一条叫做command的命令

$ su root
# command

表示先切换到root并不急著退出,然后以root来执行command命令

$ passwd

只是一个单纯的改密码程序,什么都不加就是改自己的,加一个名字就是改那个名字的人的密码

至于什么是sudoer,可以自己先找找,顺带思考一下为什么要添加sudoer这么一个看起来「麻烦」的系统


不知道题主百度出来的是哪里的教程,居然教人用sudo passwd root切换用户,( root内心:我也很无奈啊,他把我密码改来改去到底要干什么?)

而且这篇教程居然是是教初学者切换到root这种危险的用户,一般情况下root用户都是不使用的,甚至有的发行版的root用户密码是随机生成的乱码而且根本不提供,也就是说基本上是永久封存了root用户(当然其实想用这个用户很容易,但是发行版方的态度就是告诉你不要用),所以我很怀疑这谁写的教程,到底想干什么,炸电脑玩?

如果是初学的话可以去查Wiki,搜索「发行版名称+Wiki」有惊喜。不知道学什么的话请抱一个目的学,给自己定一个任务,比如写一段代码把结果输出到标准输出,再用终端处理一下保存到文件,这个过程中与任务有关的资料就去找,与任务无关的内容先不要管(比如明明只是日常使用却非要切换到root)


sudo是临时执行某一条需要root许可权的指令,这条指令的执行者还是当前用户本身,只是许可权上类似于拥有root许可权(实际上,某一个用户通过sudo可以执行哪些指令也是在一个配置文件里(/etc/sudoers)配置的,并不是真的具有root的所有许可权,有很多是即使sudo也执行不了的(可能在那个配置文件里配成ALL就可以执行所有root才能执行的指令?))。而su是真正的切换用户,将当前用户切换到su指定的用户(不指定的话默认为root),此时的角色是完全就是这个用户,和直接通过这个用户登录效果是一样的,如果退出新用户可以使用logout或者exit或者ctrl+d。

对了,还有,sudo因为执行者还是当前用户,所以输入的密码还是当前用户的,sudo只是类似于一个提权操作。而su是切换新用户,输入的当然就是新用户的密码了。


passwd {user} 是修改用户的密码.

su - {user} 是切换用户,su 默认切换的是root.

我想你大概想问的是这个。


百度真的害人不浅啊。。。

sudo passwd root 相当于是用root许可权改别人的密码,相当丑陋

正确的做法应该是 sudo su,然后再 passwd root


看了半天才看懂你要说什么,你是要切换为root吧。

切换为root直接:

$ su -

不过像常用的如ubuntu等发行版,在安装时并未设置root密码,进入桌面后,你只拥有一个普通用户,不过这个普通用户拥有sudo许可权而已。

使用sudo临时许可权,使用普通用户密码可以直接切换为root:

$ sudo su -

进入root后使用passwd可以重置root密码,当然也可以以普通用户的身份使用sudo直接修改root密码:

$ sudo passwd root

这个就是你提到的「一直更改密码」什么的,是需要输入三次密码的。

第一次是普通用户的密码,第二第三次是你重设的root密码。


建议你先看看鸟哥私房菜,了解shell和kernal之间的关系和bash常见命令,有助于你比较好的入门,顺便说一下passwd后接一个系统账户名称,表示要修改它的登录密码。


建议找一本靠谱的书系统地学习,按照题主的目前的方法从百度上学,只怕这类问题会越来越多。


推荐阅读:
相关文章