背景:我在 Ubuntu 14.04 VM 上犯了一个新手错误,递归更改了/etc
文件夹的权限。我一直将它们一次恢复到默认的 1 个目录,使用新的 VM 作为模型,并在“模型”VM 上不存在文件时在 apt-browse.org 上查找适当的权限。当我到达目录时/etc/skel
,权限在 、 和 上为 660 .bash_logout
,.bashrc
但.profile
根据模型和 apt-browse.org,它们应该是 644。浏览到 后/etc/skel
,我运行sudo chmod 644 .*
然后运行ls -la
。
从那时起,我不再能够调用 sudo,也无法运行任何 shell 命令,包括浏览、列出文件等。请参阅
x@Y:/etc/sgml$ cd /etc/skel/ && ls -la
total 28
drwxr-xr-x 2 root root 4096 Oct 10 2014 .
drwxr-xr-x 129 root root 12288 Sep 12 15:39 ..
-rw-rw---- 1 root root 220 Mar 18 2013 .bash_logout
-rw-rw---- 1 root root 3637 Apr 23 2014 .bashrc
-rw-rw---- 1 root root 675 Mar 28 2013 .profile
x@Y:/etc/skel$ sudo chmod 644 *
chmod: cannot access '*': No such file or directory
x@Y:/etc/skel$ sudo chmod 644 .*
x@Y:/etc/skel$ ls -la
ls: cannot open directory .: Permission denied
x@Y:/etc/skel$ sudo ls -la
sudo: unable to stat /etc/sudoers: Permission denied
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
x@Y:/etc/skel$ sudo su
sudo: unable to stat /etc/sudoers: Permission denied
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
此外,服务器上的网站现在会抛出 403 错误:You don't have permission to access / on this server. Server unable to read htaccess file, denying access to be safe
我无法物理访问服务器,因此恢复模式启动存在问题。另外,为什么这个权限更改会破坏某些功能吗?根据文档,这是正确的做法。
答案1
你跑了
cd /etc/skel
sudo chmod 644 .*
.*
将查找.files
当前工作目录中的所有内容(包括目录)和当前工作目录本身以及父目录。您已将模式644
应用于以下目录:
. <-- problem here as it's the working directory
.. <-- big problem here as it's the /etc directory
.bash_logout
.bashrc
.config <-- problem here as it's a directory
.profile
什么都没起作用的原因是,你删除了当前工作目录的执行权限。这意味着你没有权限进入那里!
目录必须具有执行权限才能进入或搜索。当目录的执行权限被删除时,进入目录是一种极端情况,但在这种情况下,permission denied
几乎每个命令都会获得执行权限。
您可以退出目录,但由于无法读取cd
sudoers 文件(在 中),因此如果不重新启动,您将无法修复权限。/etc
您可以
在恢复模式下启动,启动 root shell 并通过执行以下操作挂载文件系统以读写
mount -o remount,rw /
启动实时会话并挂载根分区:(用根分区的正确名称
sudo mount /dev/sdxY /mnt
替换)然后/dev/sdxY
cd /mnt
你没有这样做chmod -R
(谢天谢地!)所以你只需要修复三件事。在恢复中执行(相同,但使用 sudo 并且没有实时会话/
中路径中的第一个)/mnt
chmod 755 /etc
chmod 755 /etc/skel
chmod 755 /etc/skel/.config
恢复正确的权限。