今天朋友圈又被一张图刷屏了,搞技术的看完会心一笑,圈外人看了估计一脸懵逼。图中老婆对老公说想买锅,老公抱怨家里又不开伙,买锅作甚。神奇的一幕来了,老婆对老公使用了sudo命令,老公像变了个人,立马答应买。
首先可以确定的事情是图中对话的两夫妻都是技术人员,而且非常默契,老婆抛出的梗,老公马上就能接住。整个对话关键就在于“sudo 买”。“买”是一个命令,老婆此时化身成为了用户,把老公当成了linux系统,在之前对话中老婆权限不够,“买”的命令没有成功执行,使用sudo后,命令立马执行。
我们把“买”这个命令换成cat /etc/shadow,就能完全转换成linux理解的命令,看我操作。注意一个细节我们这里输入的密码是本账号的密码,后面还会说到。
如果你自己账号无法sudo提权,系统会显示:Username is not in the sudoers file. This incident will be reported。Username是你当前账号。
我们先来了解一下sudo命令在linux中的作用。linux最高权限是root,该命令允许特定用户像root用户一样使用各种各样的命令,而不需要root用户的密码,配置文件在/etc/sudoers中,只有root可操作。我们刚才的设置其实就是以root身份在这个文件里面加上了一句话linuxvp ALL=(ALL) /usr/bin/cat。当然想要执行任意命令就是linuxvp ALL=(ALL) ALL。
很多初学者常常弄混了sudo和su,不考虑参数,sudo后面加的是命令,su后面加的是用户名。考虑参数,就会出现两个比较像的命令,都能切换到root用户。
一个关键不同点,sudo输入的密码是当前用户的密码,su输入的密码是新用户的密码。su切换到root其实可以直接简化成su,这样就好理解下面这个图为什么要输入当前用户的密码了。
sudo还可以设置免密执行命令,一个简单的写法,将之前的写入/etc/sudoers中的最后一个ALL改成NOPASSWD:ALL
- your_user_name ALL=(ALL) ALL
- your_user_name ALL=(ALL) NOPASSWD: ALL
经过上面的解释,就能很好理解我们开头这个对话的评论了:
程序员A:难道老婆不是默认工作在root权限下的么?
程序员B:最后一句老公应该说“Password:”
程序员C:那么老婆应该说“******回车”
程序员D:不需要密码,因为wife ALL=(ALL) NOPASSWD: ALL
程序员E:老公要硬气一点,直接发送You are not in the sudoers file. This incident will be reported.
程序员F:敢不买就“rm -rf 老公”了
程序员G:其实老婆用“买 -f”就够了