使用 chown 命令将自己设置为 /etc 的所有者,现在出现各种错误

使用 chown 命令将自己设置为 /etc 的所有者,现在出现各种错误

我需要编辑一个.config文件(我知道事实上它不会产生这些问题,只是为了清除它)并且它不允许我保存它,所以我使用/etc该命令获取了所有内容的所有权chown -hR username /etc,这样我就能够编辑该.config文件,但是现在每当我尝试安装任何软件包或使用任何 sudo 命令时,它都不起作用(我已经检查了 sudoers.d 中的 sudo 文件中的错误,并且没有任何问题)。

那么我该如何将它归还给前任主人呢?

答案1

由于 中的某些文件/etc可能不属于root,如果您想避免重新安装,可以执行以下操作:

  1. 启动实时系统并挂载包含/etc目录的分区。例如,如果您的/分区是/dev/sda1,您可以从实时系统执行以下操作:

    sudo mount /dev/sda1 /mnt
    
  2. 将所有文件的所有权设置为root

    sudo chown -R root /mnt/etc
    
  3. 此时所有文件都属于 root。这可能是您所需要的,但某些文件/etc/可能有不同的所有权。如果这些文件在实时系统中也不属于 root,您可以参考它们来更改已安装系统的权限:

    shopt -s globstar
    liveSystem="/etc"
    cd /mnt/etc
    for file in **/*; do 
        [ -e "$liveSystem/$file" ] &&
            echo sudo chown --reference "$liveSystem/$file" "$file"
    done
    

    如果您还更改了权限,请执行以下操作:

    shopt -s globstar
    liveSystem="/etc"
    cd /mnt/etc
    for file in **/*; do 
        [ -e "$liveSystem/$file" ] &&
            echo sudo chown --reference "$liveSystem/$file" "$file" &&
            echo sudo chmod --reference "$liveSystem/$file" "$file"
    done
    

    这将仅打印将要运行的命令。一旦您看到它的作用并确信它是正确的,请删除它echo以使其真正运行命令。

    现在将遍历所有文件,包括所有权root在两个目录中的文件,但这并不重要。您可以编写更复杂的方法,但不值得,因为这将花费几秒钟的时间。

  4. 重新启动机器:一切都应该恢复正常。

重要的/etc:如果您安装了实时系统上没有的东西,并且其中的文件不属于,那么这将无济于事root。如果是这种情况,您要么需要找到您安装的东西并重新安装,要么可能需要重新安装系统。

答案2

启动恢复系统并发出以下命令:

mount -o remount,rw -n /
chown -R root: /etc

相关内容