sudo
执行需要 root 权限的程序时, 输入的是当前用户的口令而不是 root 的?看一下
sudo
的 manpage, 描述是 "execute a command as another user". 注意并不一定是以 root
身份跑程序, 而是可以用任何其他身份. 这做好事不留名干坏事不怕差评利器真是太方便了. 比如, 偷偷输出某个用户的 SSH RSA 私钥之类的. 在桌面机上很少有人会建多个用户, 那么现在创建一个 (建议接下来的试验都新建用户进行, 避免遗留安全隐患; 另外, 当前用户必须已经被添加到 sudo
白名单中)$ sudo useradd -m furude
$ sudo passwd furude # 这一步最好设置一个与当前用户不同的口令
$ su - furude
furude $
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/furude/.ssh/id_rsa): Created directory '/home/furude/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/furude/.ssh/id_rsa.
Your public key has been saved in /home/furude/.ssh/id_rsa.pub.
The key fingerprint is:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
The keys randomart image is:
+--[ RSA 2048]----+
| ............... |
+-----------------+
$ ls .ssh
id_rsa id_rsa.pub
$ ls /home/furude/.ssh
下面就轮到
sudo
登场了. 还是当前用户身份登入, 执行$ sudo ls /home/furude/.ssh
id_rsa id_rsa.pub
$ sudo -u furude ls /home/furude/.ssh
id_rsa id_rsa.pub
$ sudo -u `whoami` ls /home/furude/.ssh
ls: cannot open directory /home/furude/.ssh/: Permission denied
-u furude
参数则是指定以 furude 这个用户身份执行, 自己当然可以看自己的东西了; 最后一个则仍然是以当前用户身份执行, 所以被驳回了.在上面试验中, 即使以 furude 的身份使用
sudo
, 要求输入的口令仍然是当前用户的口令而不是 furude 用户的 (最好新开一个终端试试, 连续使用 sudo
时口令会被缓存下来). 那么, 开头的问题应该是这样的- 为何用
sudo
临时以另一用户身份执行程序时, 要求输入的是当前用户的口令, 而不是被指定的那个用户?