我最近升级了 PostgreSQL 安装并打算运行以下命令:
sudo chown -R postgres:postgres /var/lib/postgres
不幸的是,由于制表符补全计算错误,我不小心忘记了最后的“postgres”部分......我最终运行了:
sudo chown -R postgres:postgres /var/lib
不用说,这引起了一系列问题。例如,我无法启动进入我的操作系统。
更新:
我申请了chown -R gdm:gdm /var/lib/gdm
,现在可以成功登录了!但是,我不知道这会在多大程度上引起问题。
Starting User Manager for UID 120...
[ OK ] Started Session c1 of user gdm.
[ OK ] Started User Manager for UID 120.
我正在使用 LUKS 并且文件系统已加密。
不过,当然,我可以通过添加init=/bin/bash
到内核行来通过 grub 生成 shell,所以一旦我知道正确的所有权要求,这应该很容易修复。
目前在/var/lib
:
colord
属于有色人种,gdm
归gdm所有,locate
并且mlocate
归 root 所有,redis
属于redis,systemd
归 root 所有,并且- 其他一切都归 postgres 所有。
看ls -ho
输出照片
了解权限和修改时间。
一个问题是该/var/lib/gdm
目录由 gdm 拥有,包含典型的主目录子目录(Desktop
、Documents
、Downloads
、Music
、Pictures
、Public
和),所有这些子目录均由 postgres 拥有Templates
。 Videos
看ls -ho
输出照片
了解权限和修改时间。
如何将文件所有权恢复/var/lib
到运行之前的状态
chown -R postgres:postgres /var/lib
?任何援助将不胜感激。
答案1
您可以在目录上使用 chown 命令返回,其中包含您从 /etc/passwords 中的用户名及其来自 /etc/groups 的组中获知的信息,其余部分将属于 root:root
但这有点棘手,直到你可以让一个错误......它将在很多很多天出现......由于忘记的更改......
我认为 postgres gdm 还可以,其余的可能属于 root redis 到 redis ...我认为 Tor 也有它的专用用户。
简单的方法:重新安装所有内容(备份数据库之后,当然不格式化 /home )...
答案2
/var 文件系统层次结构用于由应用程序创建的数据,因此包管理器在 /var 中管理的很少。在大多数情况下, pacman -Qo 只会返回 /var/lib 中顶级目录的所有权,因为它的结构是让每个应用程序都有一个目录。
您首先需要将所有内容设置为 root 所有者,以获得比 postgres 更合理的默认值。
chown -R root:root /var/lib/
重新安装拥有文件的软件包/var/lib
pacman -Qo $(find /var/lib) 2>/dev/null
现在看看谁拥有每个目录:
ls -la /var/lib
root 拥有的目录中的所有内容都将归 root 所有。而不属于 root 的目录实际上是应用程序用户的主目录。几乎没有例外,这些目录中包含的所有文件都归应用程序用户所有。所以跑步chown -R gdm:gdm /var/lib/gdm
是有效的。但也有例外。例如在我的系统上/var/lib/sddm/state.conf
由root拥有。
答案3
手动修复这个问题并不是一件容易的事 - 您可以根据/var/lib
中的条目猜测目录的可能所有权,/etc/passwd
但它会时好时坏。如果应用程序目录下的某些文件由应用程序拥有,而其他文件由 root 拥有(反之亦然),会发生什么情况?你将花费很长时间来解决这个问题......
我建议重新安装系统上的所有软件包。有多种方法可以做到这一点,例如:
# pacman -S $(pacman -Qeq) --noconfirm
不过,我建议您在执行此操作之前先备份系统。
答案4
从实时结构旁边的备份中恢复,并将所有权设置为与恢复的结构相同。 - 如果您的 BUR 系统允许,您可以恢复空文件/目录。