我的磁盘空间不够了,之前分区的时候没搞好,根目录给了 1.7T 一直闲置,为了下载一个 700 多 G 的文件,我简单的 mount 到了一个下载目录下,transmission 下载的时候报错说权限问题,我直接 chown -R uuair:www-data 了,我还纳闷,一个空目录,怎么会卡住了。。。结果 sudo 的时候发现错误,然后,./目录下大部分文件都不是 root 的了,尤其是/etc 下,所有的都是我了。
好了,现在怎么办?
第一:/home文件夹下有 3.2T 的文件,我没有其他的硬盘可以备份。
第二:我运行了 12 个 docker ,其中有几个配置了很久,可能我自己都记不清了,这部分怎么保留?
我使用了docker commit -p 然后 docker save -o ~/container-backup.tar container-backup的方法保存成 tar 文件了,但现在拷贝不出来

不是云服务,就是一台 GEN7 的服务器,我没有富裕的硬盘备份,3.2T 的资料,我把 docker 一个一个的备份成 tar 文件了。。。有一个目录不知道为什么,变成了用户 911 的,组也是 911 ,但我没这个用户。。。

先恢复关键系统目录的所有权吧
sudo chown -R root:root /etc
sudo chown root:root /bin
sudo chown root:root /lib
sudo chown root:root /usr
sudo chown -R root:root /usr/bin
sudo chown -R root:root /usr/lib

这什么都不用干吧, 就算都是你的, root 用户照样能读写

不懂,直接权限还原回去会遇到什么问题?

#1
#2
不成啊,sudo 就提示错误了。虽然我有 root 权限,但我也需要 su 才可以。。
sudo: /etc/sudo.conf is owned by uid 1000, should be 0
sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set

#3 还原权限怎么操作??我现在./99%的文件都不是 root 的了,我没法 sudo 啊。

进 rescue ,mount 后,把别的同版本 OS 的关键文件都 rsync 过去。

没办法切换到 root 用户?实在不行重启到单用户模式进去改应该可以。

记得我知乎看过一个热帖就是根目录权限被改掉了,好像挺难恢复的

我找不到第二台电脑做这事,而且一个一个的改看起来也不现实啊。。。能不能覆盖安装一下?保留/home 不动,直接安装,是不是就可以了?

少侠好武功

用你自己的用户把 sudo.conf 改成 root 不行?

找个 liveCD 进去,把 docker tar 包放 home ,home 里面的文件应该是同一用户的,-R 直接改 owner 就行。

对于 docker 的配置,在/var/lib/docker/containers/*/config.v2.json 可以拿到相关信息。

至于系统本身是没救了,尤其是 etc ,不同文件对应不同 owner 。

所以我直接用 root

如果 home 是单独的分区,重装时候不选择格式化 home 就行;如果不是,那就有些麻烦,怎么操作都有丢数据的风险,最好还是找个盘备份出来再动。

其实还可以救。用 livecd 或者恢复环境进去,chroot 方式重新安装 sudo 以及 su 的包。这样保证你能进正常系统用 sudo 和 su ,其他有权限问题的可执行文件用这种方式解决。普通文件有 sudo 后改下权限就行了,就是有点麻烦。

metamug.com/article/networking/unable-to-access-sudoers-owned-by-uid-1000.html

用 dd 命令,把 home 打包一下。重装再还原(也许行

少侠好武功

看有没有备份,无解,基本很多软件都会开自己的用户。

如果是云机器 可以申请 加硬盘
如果不能加 想办法 通过网络 把文件传出去

可以备份回滚
挺多 linux 发行版支持,比如 opensuse 的 snapper

如楼上所说,尝试进单用户模式,操作一下。

chown -R 的威力如同 rm -rf

先别重启,有个 docker-autocompose 应用,能把你正在跑的容器转成 docker-comopse.yml ,可以备份当前容器的各种配置,不过你的系统已经烂了,试试能不能把 autocompose 镜像拉下来,然后逐个备份容器生成 yml 文件

找个虚拟机,备份一下权限,然后 livecd 进去恢复权限试试?

少侠好功力。
你没有进行磁盘快照备份吗?
下次记得千万别飘了,少个.区别太大代价太承重 2333
权限乱了以后其实更难恢复,听上去是 centOS ,更严,2333

拿个 u 盘做个 livecd 启动,然后把磁盘挂载到 livecd 系统中,改文件权限

u 盘启动
如果不会就摇人吧

太麻烦了
如果是云服务的话,临时租个内网服务器,在挂个 oss ,备份好现有数据后,直接重装系统和服务
如果物理服务器,就借个电脑搞一下,几 T 数据用不了多少时间

我倒有个傻瓜点的方法。不嫌麻烦的话。
1 ,首先解决 sudo 。或者以 root 用户登录。这是必须要做的。
2 ,安装同版本同类型 Linux 发行版。参照权限重新恢复。或者这个安装好的同类型版本 Linux 的权限每个文件 acl 用 shell 打印出来导出成文件。
3 ,在旧系统,以同样脚本恢复回去。其实这样做完肯定还有问题,只能自己慢慢查日志去解决了。
如果觉得这样解决时间太长,重新安装配置其实是最优选择。

一般系统提供的包管理软件,以 rpm 为例
--setperms set permissions of files in a package
--setugids set user/group ownership of files in a
这个是可以修复权限的,可以去试试

没 rm -rf 就不叫事儿

本地设备?
拿个 u 盘 livecd 改回来呗

#32 怎么改回来啊??所有的目录都是我自己了,手动我不知道怎么改啊

全部改成 777 ,文件拖出来,重装系统

还好只是 chown ,如果是 chmod -R 那就惨了得对着具体文件恢复,你这样找个正常的相同系统直接对着恢复就行。恢复必须要 liveCD 环境,随便找个闲置的存储设备插进去启动就行,另外 sudo 有问题不代表就不能用了,这只是一个软件包没有也能切到 root 。

#15 这个我做了,开了两个 ssh 进去,但就是不成。。。pkexec 哪里始终无法运行。

如果所有者都是你,那不需要 sudo 啊,直接 chown 改

#4 根据错误提示,先用 su 拿到 root ,然后用 chmod 4755 和 chown 把这个文件改一下,把 sudo 问题解决了先。

  1. 把你自己的 group 加到 admin rules ,以 ubuntu 为例, 只有 sudo/admin group 才行

cat /usr/share/polkit-1/rules.d/49-ubuntu-admin.rules
polkit.addAdminRule(function(action, subject) {
return ["unix-group:sudo", "unix-group:admin"];
});

然后再 pkttyagent -p $(echo $$) |pkexec chown root /path/to/file
(ctrc+c to abort pkttyagent )

  1. 如果你在 docker 组里
    docker run -it --privileged --name fixperm -v /:/host busybox
    然后编辑 /host/path/to/file
  2. 重启时候编辑 Grub menu ,append to kernel command line
    systemd.debug-shell=1
    OR
    init=/bin/sh