我的磁盘空间不够了,之前分区的时候没搞好,根目录给了 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 文件了,但现在拷贝不出来
1
FoxRiverMan 6 天前 1
先恢复关键系统目录的所有权吧
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 |
2
bthulu 6 天前 1
这什么都不用干吧, 就算都是你的, root 用户照样能读写
|
3
Exxfire 6 天前
不懂,直接权限还原回去会遇到什么问题?
|
4
uuair OP @FoxRiverMan #1
@bthulu #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 @Exxfire #3 还原权限怎么操作??我现在./99%的文件都不是 root 的了,我没法 sudo 啊。 |
5
adrianzhang 6 天前 3
进 rescue ,mount 后,把别的同版本 OS 的关键文件都 rsync 过去。
|
6
IvanLi127 6 天前
没办法切换到 root 用户?实在不行重启到单用户模式进去改应该可以。
|
7
orioleq 6 天前 via iPhone
记得我知乎看过一个热帖就是根目录权限被改掉了,好像挺难恢复的
|
8
uuair OP 我找不到第二台电脑做这事,而且一个一个的改看起来也不现实啊。。。能不能覆盖安装一下?保留/home 不动,直接安装,是不是就可以了?
|
9
Belmode 6 天前 4
少侠好武功
|
10
kneo 6 天前 via Android
用你自己的用户把 sudo.conf 改成 root 不行?
|
11
NevadaLi 6 天前 1
找个 liveCD 进去,把 docker tar 包放 home ,home 里面的文件应该是同一用户的,-R 直接改 owner 就行。
对于 docker 的配置,在/var/lib/docker/containers/*/config.v2.json 可以拿到相关信息。 至于系统本身是没救了,尤其是 etc ,不同文件对应不同 owner 。 |
12
xuanbg 6 天前 1
所以我直接用 root
|
13
NevadaLi 6 天前
如果 home 是单独的分区,重装时候不选择格式化 home 就行;如果不是,那就有些麻烦,怎么操作都有丢数据的风险,最好还是找个盘备份出来再动。
|
14
RobinHuuu 6 天前 via Android
其实还可以救。用 livecd 或者恢复环境进去,chroot 方式重新安装 sudo 以及 su 的包。这样保证你能进正常系统用 sudo 和 su ,其他有权限问题的可执行文件用这种方式解决。普通文件有 sudo 后改下权限就行了,就是有点麻烦。
|
15
kk2syc 6 天前
|
16
zgcwkj 6 天前
用 dd 命令,把 home 打包一下。重装再还原(也许行
|
17
hukei 6 天前
少侠好武功
|
19
fenglangjuxu 6 天前
如果是云机器 可以申请 加硬盘
如果不能加 想办法 通过网络 把文件传出去 |
20
shylockhg 6 天前
可以备份回滚
挺多 linux 发行版支持,比如 opensuse 的 snapper |
22
Geon97 6 天前 2
chown -R 的威力如同 rm -rf
|
23
iyiluo 6 天前 1
先别重启,有个 docker-autocompose 应用,能把你正在跑的容器转成 docker-comopse.yml ,可以备份当前容器的各种配置,不过你的系统已经烂了,试试能不能把 autocompose 镜像拉下来,然后逐个备份容器生成 yml 文件
|
24
guo4224 6 天前
找个虚拟机,备份一下权限,然后 livecd 进去恢复权限试试?
|
25
konakona 6 天前
少侠好功力。
你没有进行磁盘快照备份吗? 下次记得千万别飘了,少个.区别太大代价太承重 2333 权限乱了以后其实更难恢复,听上去是 centOS ,更严,2333 |
26
elechi 6 天前
拿个 u 盘做个 livecd 启动,然后把磁盘挂载到 livecd 系统中,改文件权限
|
27
smallparking 6 天前 via Android
u 盘启动
如果不会就摇人吧 |
28
la2la 6 天前
太麻烦了
如果是云服务的话,临时租个内网服务器,在挂个 oss ,备份好现有数据后,直接重装系统和服务 如果物理服务器,就借个电脑搞一下,几 T 数据用不了多少时间 |
29
life90 6 天前
我倒有个傻瓜点的方法。不嫌麻烦的话。
1 ,首先解决 sudo 。或者以 root 用户登录。这是必须要做的。 2 ,安装同版本同类型 Linux 发行版。参照权限重新恢复。或者这个安装好的同类型版本 Linux 的权限每个文件 acl 用 shell 打印出来导出成文件。 3 ,在旧系统,以同样脚本恢复回去。其实这样做完肯定还有问题,只能自己慢慢查日志去解决了。 如果觉得这样解决时间太长,重新安装配置其实是最优选择。 |
30
0x5c0f 6 天前
一般系统提供的包管理软件,以 rpm 为例
--setperms set permissions of files in a package --setugids set user/group ownership of files in a 这个是可以修复权限的,可以去试试 |
31
yyyb 6 天前
没 rm -rf 就不叫事儿
|
32
jqtmviyu 5 天前
本地设备?
拿个 u 盘 livecd 改回来呗 |
34
inframe 5 天前
全部改成 777 ,文件拖出来,重装系统
|
35
zuotun 5 天前
还好只是 chown ,如果是 chmod -R 那就惨了得对着具体文件恢复,你这样找个正常的相同系统直接对着恢复就行。恢复必须要 liveCD 环境,随便找个闲置的存储设备插进去启动就行,另外 sudo 有问题不代表就不能用了,这只是一个软件包没有也能切到 root 。
|
37
cybort 5 天前 via Android
如果所有者都是你,那不需要 sudo 啊,直接 chown 改
|
38
COW 5 天前 via Android
#4 根据错误提示,先用 su 拿到 root ,然后用 chmod 4755 和 chown 把这个文件改一下,把 sudo 问题解决了先。
|
39
feedcode 5 天前
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 ) 2. 如果你在 docker 组里 docker run -it --privileged --name fixperm -v /:/host busybox 然后编辑 /host/path/to/file 3. 重启时候编辑 Grub menu ,append to kernel command line systemd.debug-shell=1 OR init=/bin/sh |
40
uuair OP @cybort #37
uuair@uu-ubu:/etc$ ls -l sudoers -r--r----- 1 uuair www-data 1800 1 月 30 2024 sudoers chown root:root /etc/sudoers chown: changing ownership of '/etc/sudoers': Operation not permitted 怎么可能。。。。 |
41
uuair OP @feedcode #39
``` uuair@uu-ubu:/etc$ groups uuair uuair : uuair adm cdrom sudo dip plugdev lpadmin lxd sambashare docker ``` 我的 group 包括 uuari ,所以`vi /usr/share/polkit-1/rules.d/49-ubuntu-admin.rules`的时候: ``` polkit.addAdminRule(function(action, subject) { return ["unix-group:sudo", "unix-group:uuair"]; ``` 然后 echo $$ 848784 `pkttyagent --process 848784` ``` uuair@uu-ubu:/etc$ pkexec chown root:root /etc/sudoer pkexec must be setuid root ``` 问题还是一样的。 |
42
liuliancao 5 天前
su 能进 root 吗 能进去就改回去看看
改的方式 搜索下别人导出来的权限备份(getfacl 导出来的文件,主要是常见的/bin,/usr/bin,/sbin 这几个目录) 然后改回去 如果进不去就插启动 u 盘 进 rescue 修复 还不行就把盘拔出来 找个网吧 整个 linux 虚拟机挂载以后用 setfacl 的方式修复下 然后虚拟机试下 |
43
liuliancao 5 天前
需要 sudo 的文件 需要 chmod u+s 你的文件 这个是 sudo 需要的标志位
➜ puppetmaster git:(main) ✗ ls -l /usr/bin/pkexec -rwsr-xr-x 1 root root 26776 2023 年 2 月 1 日 /usr/bin/pkexec ➜ puppetmaster git:(main) ✗ chmod ➜ puppetmaster git:(main) ✗ getfacl /usr/bin/pkexec getfacl: Removing leading '/' from absolute path names # file: usr/bin/pkexec # owner: root # group: root # flags: s-- user::rwx group::r-x other::r-x |
44
uuair OP @liuliancao #42 我就是没法 sudo 啊。。。因为/etc 目录不是 root 的了,所以只要 sudo 就出现提示:
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 s |
45
liuliancao 5 天前
@uuair sudo 肯定用不了了 我说的是 su
|
46
zlkent 5 天前
问下 gpt 吧,这里不好贴 gpt 的答案
|
47
uuair OP |
48
yc8332 5 天前
用 root 登录看看行不行,不行就挂到另外的系统上搞,只要数据没删都能搞回来。
|
49
julyclyde 4 天前
老老实实重装吧
su/sudo 丢失 setuid 之后,在 ubuntu 这种默认没开 root 用户的系统上你基本上没办法获得 root 权限 |