感谢 upsuper 的投稿,原文这里: http://blog.upsuper.org/make-an-usb-key-for-linux/
我曾经很早以前就在想,能不能将U盘作为登入我系统的验证机制。当时的想法是,这样比较有趣~不过后来发现另外一个重要的用途就是,防止在众目睽睽之下输入密码……
这个问题提出后,邮件列表里很快就有人告诉我,Linux 已经有一个现成的机制了,这就是 pam_usb。不过我在网上搜了半晌都没搜到相关的中文资料,前几天弄成了,就写出来供大家参考~
其实来说,是很简单的。首先,当然,要准备一个U盘~(废话),然后安装 pam_usb。在 Ubuntu 下的话,源里就有,可以输入命令
sudo apt-get install pamusb-tools
直接安装。当然如果你连终端也懒得打开,可以直接点击这里:安装 pamusb-tools。当然,在后面的步骤中你终归还是要打开终端的,所以还是先开了吧~这个东西目前暂时还没什么图形界面的样子(当然做一个相信也不难)。
另外,Fedora 源里有 pam_usb 包,Arch Linux 似乎在 AUR 里有,在 Gentoo 中似乎是被默认屏蔽的,可以通过下面指令安装:
echo "sys-auth/pam_usb" >> /etc/portage/package.keywords
emerge -av ">=sys-auth/pam_usb-0.4.1"
其他的发行版也可以直接从他们的项目主页下载源码包编译安装~
安装好了以后,首先插入你作为钥匙的U盘,然后在终端中运行
sudo pamusb-conf --add-device MyUSBDevice
其中的 MyUSBDevice 可以任意修改,只是一个标识符而已。接下来根据提示操作即可。如果你的电脑此时连接着超过一个U盘、移动硬盘,或者某个U盘、移动硬盘包含超过一个分区(就像我给U盘分了2个区),就会提示选择安装到哪里。设置完确认保存到配置文件即可。
下面添加认证用户,下面的命令是添加我为认证用户的:
sudo pamusb-conf --add-user upsuper
原教程里面写的是添加 root 我认为是没有必要的,添加 sudoer 应该是已经足够了的。这条命令几乎不问什么问题,直接就完成了……这样以后在使用这把钥匙的时候就可以不需要输入相应用户的密码了。
最后最重要的一步,是编辑认证系统的配置文件。打开 /etc/pam.d/common-auth (对于 Gentoo 来说是 /etc/pam.d/system-auth),将下面这行插入到所有条目的前面:
auth sufficient pam_usb.so
现在你的 USB 钥匙已经可以用了!现在,另外再打开一个终端,随便 sudo 点什么,然后你应该不会再看到输入密码的画面,取而代之的是下面的东西:
* pam_usb v0.4.2
* Authentication request for user "upsuper" (sudo)
* Device "MyUSBDevice" is connected (good).
* Performing one time pad verification...
* Access granted.
然后运行成功了!不仅 sudo 可以验证,包括 gksu 和登入框等等都已经可以使用这把钥匙直接略过不需要输入密码了。
现在你已经成功的制作了一个属于自己的 USB 钥匙!
现在我们看看还有什么地方可以继续改进的……
我们注意到,无论我们是否连接了我们的钥匙,以后 sudo 的时候都会出现那些讨厌的提示,怎么办呢……?其实这完全也是可以解决的:打开 /etc/pamusb.conf 文件,我们发现这其实根本就是一个 XML 文件……在里面的 <defaults> 标签中间添加
<option name="quiet">true</option>
保存后就直接生效了~
除此之外,我们发现在这里,我们的钥匙和原来的密码之间是一个替代的关系,如果你希望利用这个钥匙附加上密码提高安全性的话,可以将上面在 /etc/pam.d/common-auth 里面加入的那行中的 sufficient 改成 required,如果你干脆就不想再用密码了,那就把密码的那些删掉,留下一个 required 的 pam_usb~
话说这还真是强大呐~不过用了这个以后,你这个USB钥匙也得要好好保管鸟~不过其实对我来说最爽的无外乎以后在众目睽睽之下不需要再手动输入密码啦~
[参考资料]
HOWTO: pam_usb login with USB memory stick – Ubuntu Forums
doc:quickstart [pam_usb]
doc:configuration [pam_usb]
25 Responses to 为 Linux 做一把 USB “钥匙”
freetstar
一月 15th, 2011 at 2:40 下午
有意思
[Reply]
snowhawkyrf
一月 15th, 2011 at 2:50 下午
超赞!真给力,尤其是我的密码又臭又长……
[Reply]
xndcn
一月 15th, 2011 at 2:57 下午
好像很有用的样子...
特别是有时sudo输入密码老是有人在后边看着
[Reply]
婉秋
一月 15th, 2011 at 3:10 下午
倒数第二段啥意思,就是去掉密码非用U盘不可么?
万一那个U盘出了意外咋办
[Reply]
upsuper Reply:
一月 15th, 2011 at 3:30 下午
@婉秋, 所以最好不要这样乱来呗……不过其实也还是有办法的,弄个u盘什么的启动进去,把那个文件修改一下就可以了……
[Reply]
upsuper
一月 15th, 2011 at 3:31 下午
话说原文 true 是加在 标签里面的,你这里复制的时候好像没有做好转义……
[Reply]
upsuper
一月 15th, 2011 at 3:32 下午
话说原文 <option name=”quiet”>true</option> 是加在 <defaults> 标签里面的,你这里复制的时候好像没有做好转义……
[Reply]
riku Reply:
一月 15th, 2011 at 3:37 下午
@upsuper, 好的,加上去了,多谢。你再帮忙看看,有没有其它出错的地方。
[Reply]
upsuper Reply:
一月 15th, 2011 at 3:39 下午
@riku, 没什么大问题了……不过如果细抠的话,有几个链接没有正确的加上,以及 auth sufficient pam_usb.so 下面的那行多了第一个字……
[Reply]
riku Reply:
一月 15th, 2011 at 3:55 下午
@upsuper, 好的,改了。
[Reply]
Kevin Yang
一月 15th, 2011 at 5:31 下午
别人复制这个U盘能进去么?还是和硬件id绑定的?
U盘经常借来借去的,并且不在视线之内。
[Reply]
upsuper Reply:
一月 15th, 2011 at 5:51 下午
@Kevin Yang, 估计应该跟硬件绑定的,你可以实验一下呗~
[Reply]
hmy
一月 17th, 2011 at 8:58 上午
还可以蓝牙认证,用手机蓝牙做认证,或者用otp以及用yubikey,都比usb安全很多。
[Reply]
upsuper Reply:
一月 17th, 2011 at 1:54 下午
@hmy, otp和yubikey都是要钱的玩意,蓝牙的话也不是所有机器都支持的,至少我的机器不支持……而且我的u盘本来就是常年和钥匙串绑一起的……
[Reply]
书痕
一月 17th, 2011 at 10:48 上午
做这个key会对U盘的日常使用又影响吗?
[Reply]
riku Reply:
一月 17th, 2011 at 11:08 上午
@书痕, 不会有影响。
[Reply]
Jyu..
一月 17th, 2011 at 2:53 下午
大人,请问U盘如何分区?
找了好多,多说不可以。
喵呜,大人指点啊。
[Reply]
riku Reply:
一月 17th, 2011 at 2:54 下午
@Jyu.., 只能用 Linux 分区,比如 ext3 什么的。
[Reply]
error Reply:
八月 26th, 2011 at 11:04 上午
@riku, 是不是整个U盘用做密钥?我还想在U盘里装一个puppy什么的,能再划一个分区出来存储最好,可行吗?要同时满足3个应用哦!
[Reply]
riku Reply:
八月 26th, 2011 at 11:25 上午
@error, 不需要分区
[Reply]
riku Reply:
一月 18th, 2011 at 10:36 上午
@Jyu.., 试了一下,用 FAT 分区也可以的。
[Reply]
rfans
一月 19th, 2011 at 9:03 上午
好东西,以后试试!
[Reply]
太空警察
二月 26th, 2011 at 3:20 下午
马克~~~好高科技啊
[Reply]
酱油党
三月 18th, 2011 at 8:26 下午
为神马我用u盘登陆系统成功之后提示神马密码环没有解开.. 还要我输两次密码
求解
[Reply]
riku Reply:
三月 18th, 2011 at 8:29 下午
@酱油党, 那可能是 gnome keyring ,不是登录密码,关于 gnome keyring 请自行 google it.
[Reply]