《UNIX环境高级编程》(第三版),第一天,开始。
我的基础:计算机体系方面,本科专业课课程和CSAPP阅毕,曾使用过几个月Ubuntu,跑过一些程序,调过一些系统,没在上面写过程序。
第一章扫了一遍,希望把代码重写一遍。
磨刀不误砍柴工,装上sublime text 2,设为默认editor(http://blog.omitol.com/set-sublimetext-to-default-editor/)。
下载apue.3e,解压,make出现错误,Google(http://blog.csdn.net/jasonque/article/details/8933194提供了貌似可行的解决方案)。但是,进行到上述网站中“cannot find lbsd”,即将进行$sudo apt-get install libbsd-dev的时候,问题来了。问题是,我之前修改了/etc的权限,导致出现:
sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
好了,至于出现这个问题的原因,下面详细记录。
当初,看到有个人apue把source code放在/root下,我也想这样。但当我单击/root的时候,不让进,没办法,好奇心强(好奇心害死猫),非要进去,于是Google。看到有个人说:chown -R *:sudo /root(*是我的用户名),试之。哎?好了,这下可以进去了,不亦乐乎。这个命令的意思是对/root文件夹的权限进行更改,chown更改权限,*是自己的用户名,sudo是属于sudo group。于是对此命令屡试不爽,接着毫不含糊的改了好几个“/”下面的文件夹,其中就包括/etc,那么问题来了。
命令 chown -R *:sudo /root中还有个-R!输命令前好歹先看看命令是什么意思啊!chown --help 查一查chown的用法,出来了,-R是什么意思?Recursively!!!迭代地把/etc文件夹下所有的子文件和子文件夹的权限全部修改。但是/etc这个文件是干什么的?它存放的是系统管理和配置文件!!这下好了,本来/etc的权限是root:root被我改成了*:sudo,而且是recursively!!也许有人会想,没事啊,再改回来呗。但是,对于我一个菜鸟,天知道/etc下所有的文件属于哪个用户哪个分组?就当我改完之后,用$sudo命令,出现了上面提到的那个问题:
sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo没法用了(root的id是0,我的id是1000,显而易见,也可以通过cat etc/passwd查询)。
既然没法用,那就尝试改回来呗。于是chown -R root:root /etc,这下挺好,sudo回来啦,又可以用了,但是,当我注销重新登录用户的时候,登不进来!输完密码点完确定,屏幕闪了一下还是登录界面。但是奇怪的是ctrl+alt+F1进入终端,普通用户,root却都可以登录,我在终端把/etc再次改为 *:sudo,ctrl+alt+F7回到GUI,哎,GUI可以进去了,但是,还有问题啊,关机则退回登陆界面卡住不动,重启也是同样的情况。
在网上查阅了各种资料,关于解决 /etc/sudoers is owned by uid 1000, should be 0 这个问题的,有说进入recovery mode恢复的(比如这篇文章遇到的问题和我的大同小异:http://www.it165.net/os/html/201410/9474.html),有一种更简单的说法,直接 pkexec chmod 755 /etc(http://askubuntu.com/questions/115358/changed-etc-permission-in-oneiric-ubuntu11-10-by-using-sudo-chmod-665-etc)。按照第二种说法,我试了一下,可行,sudo被修复。但仍有关机卡死的问题。
接下来一个人说的话启发了我,“Note the -R option. If you did run chmod with the -R option, then all folders and files within /etc will now have permissions of 644 and your system will be beyond practical repair.”(这个是chmod,不是chown)(http://ubuntuforums.org/showthread.php?t=1772959)我呵呵,考虑了一下,为了今后避免再出问题,还是重装吧。
我的基础:计算机体系方面,本科专业课课程和CSAPP阅毕,曾使用过几个月Ubuntu,跑过一些程序,调过一些系统,没在上面写过程序。
第一章扫了一遍,希望把代码重写一遍。
磨刀不误砍柴工,装上sublime text 2,设为默认editor(http://blog.omitol.com/set-sublimetext-to-default-editor/)。
下载apue.3e,解压,make出现错误,Google(http://blog.csdn.net/jasonque/article/details/8933194提供了貌似可行的解决方案)。但是,进行到上述网站中“cannot find lbsd”,即将进行$sudo apt-get install libbsd-dev的时候,问题来了。问题是,我之前修改了/etc的权限,导致出现:
sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
好了,至于出现这个问题的原因,下面详细记录。
当初,看到有个人apue把source code放在/root下,我也想这样。但当我单击/root的时候,不让进,没办法,好奇心强(好奇心害死猫),非要进去,于是Google。看到有个人说:chown -R *:sudo /root(*是我的用户名),试之。哎?好了,这下可以进去了,不亦乐乎。这个命令的意思是对/root文件夹的权限进行更改,chown更改权限,*是自己的用户名,sudo是属于sudo group。于是对此命令屡试不爽,接着毫不含糊的改了好几个“/”下面的文件夹,其中就包括/etc,那么问题来了。
命令 chown -R *:sudo /root中还有个-R!输命令前好歹先看看命令是什么意思啊!chown --help 查一查chown的用法,出来了,-R是什么意思?Recursively!!!迭代地把/etc文件夹下所有的子文件和子文件夹的权限全部修改。但是/etc这个文件是干什么的?它存放的是系统管理和配置文件!!这下好了,本来/etc的权限是root:root被我改成了*:sudo,而且是recursively!!也许有人会想,没事啊,再改回来呗。但是,对于我一个菜鸟,天知道/etc下所有的文件属于哪个用户哪个分组?就当我改完之后,用$sudo命令,出现了上面提到的那个问题:
sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo没法用了(root的id是0,我的id是1000,显而易见,也可以通过cat etc/passwd查询)。
既然没法用,那就尝试改回来呗。于是chown -R root:root /etc,这下挺好,sudo回来啦,又可以用了,但是,当我注销重新登录用户的时候,登不进来!输完密码点完确定,屏幕闪了一下还是登录界面。但是奇怪的是ctrl+alt+F1进入终端,普通用户,root却都可以登录,我在终端把/etc再次改为 *:sudo,ctrl+alt+F7回到GUI,哎,GUI可以进去了,但是,还有问题啊,关机则退回登陆界面卡住不动,重启也是同样的情况。
在网上查阅了各种资料,关于解决 /etc/sudoers is owned by uid 1000, should be 0 这个问题的,有说进入recovery mode恢复的(比如这篇文章遇到的问题和我的大同小异:http://www.it165.net/os/html/201410/9474.html),有一种更简单的说法,直接 pkexec chmod 755 /etc(http://askubuntu.com/questions/115358/changed-etc-permission-in-oneiric-ubuntu11-10-by-using-sudo-chmod-665-etc)。按照第二种说法,我试了一下,可行,sudo被修复。但仍有关机卡死的问题。
接下来一个人说的话启发了我,“Note the -R option. If you did run chmod with the -R option, then all folders and files within /etc will now have permissions of 644 and your system will be beyond practical repair.”(这个是chmod,不是chown)(http://ubuntuforums.org/showthread.php?t=1772959)我呵呵,考虑了一下,为了今后避免再出问题,还是重装吧。