配置key认证登陆Ubuntu (上)
每一个看似轻松的结果背后都有不为人知的辛酸。又是一件小事,结果折腾了一天。
上接配置好SSH 和Samba后,开始了Python编程实践。由于实在不大会用Vim, 所以最后的编程环境实际上在Windows下用Notepad++写代码,通过Samba服务器更新直接同步到Ubuntu,当天用的还不错,把Python文件操作这部分算是小试牛刀了一下。
睡一觉起来后,悲剧开始了:SSH开始连接不上了!ssh localhost也不行。
Error 1 : connection reset by peer
Error 2: connection refused
坦言讲,这两种错误以前都遇见过,算是比较常见的错误,但google后似乎没看到特别好的解决办法,不过可以断定的是,sshd_config 配置文件有问题。
使用 grep sshd /var/log/auth.log查看下ssh服务相关的错误日志。
悲剧2: 为了查看配置文件方便,一条 chmod 777 -R /etc/ 执行了(最开始只在Python的WorkDirectory设置了777)
结果就是sudo命令再也执行不了。
Error 3:
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
/etc/sudoers默认只有root有读权限(440),
p@VM:~$ ll /etc/sudoers
-r--r----- 1 root root 745 2月 11 2014 /etc/sudoer
看起来是系统检测到 /etc/sudoers 的读写属性发生了变化,然后给出了提醒。所以现在是sudo的所有命令都执行不了。要说以前在12.04版本的时候貌似也这么干过,但是并没有出现过这种问题,姑且认为是到14.04版本安全性又提高了。
关键词丢进google,差点没吐血。这几乎是一个致命的错误 :要么重装系统,要么用USB portable或者开机切入到recovery/single模式,进入root shell,把 文件权限设置回去。 这两种方式都不好弄,最后终于找到了一个bypass方法:
http://askubuntu.com/questions/304212/how-to-solve-sudo-etc-sudoers-d-is-world-writable
#pkexec chmod 0440 /etc/sudoers
这条命令是可以在普通用户下执行的,执行会弹出一个图形对话框,要你输入root密码,然后切入到root.
算是切回来了,捏了一把汗。当然接下来脑子一热,没有搞清楚/etc/sudoer的正确权限,手贱执行了#chmod 600 /etc -R又是另一个悲剧:
Error 4:
sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo: unable to stat /etc/sudoers.d/README: No such file or directory
这回#pkexec chmod 0440 /etc/sudoers 也执行不了,而且google下来 多数也是指向最开始提到的两种方法。
(1)USB进入
由于是Hyper-V虚拟机方式,修改开机启动顺序,从光驱加载ISO启动,进入后选择 "Try Ubuntu",使用默认Ubuntu用户倒是能直接切入root,检查发现我之前的/home 目录不存在,预感这种方法不行,直接切换到下一种方法了。
(2-1)Single模式
这个在忘记root密码时经常会用到这个办法
a) 在出现grub画面时,用上下键选中你平时启动linux的那一项,然后按e键
b).再次用上下键选中你平时启动linux的那一项(类似于kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/),然后按e键
c). 修改你现在见到的命令行,加入single,结果如下:
kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/
d). 回车返回,然后按b键启动,即可直接进入linux命令行
e). 输入passwd,再输入两次新密码;
f). #reboot重启
这是理想情况,以前在CentOS和 BlackTrack上也实践过,问题都不大。结果这回在Ubuntu 14.04上,进入编辑模式后,居然出现了if else模式,敢情grub也跟着变复杂了。不知道single 该加在哪里了, 想想真是恨不得马上回到12.04版本还是自己熟悉的系统好, 放弃。
(2-2)Recovery模式
这个实在是个槽点,开机启动后 一直卡在 "Booting system without full network configuration" 过不去。
以前不记得Linux系统还必须检查网络的情况(Not a Must),这回居然栽在这上面,而且Ctrl+Alt+F1 ,进入了字符界面,却一直没有出现root shell. 亦放弃。
所以最后,经过一上午的折腾,结果是:重装系统。
到这为止,又印证了上一篇文章提到的:花N多时间解决一个问题,不如直接重装系统来的快。这似乎跟开发人员所说的看懂别人的代码的过程还不如自己重新写代码。
挂机重装完系统,下午继续。