실수로 chown을 실행한 후 파일 소유권 복구

실수로 chown을 실행한 후 파일 소유권 복구

최근에 PostgreSQL 설치를 업그레이드했으며 다음 명령을 실행할 계획입니다.

sudo chown -R postgres:postgres /var/lib/postgres

안타깝게도 탭 완성 계산 오류로 인해 실수로 마지막에 "postgres" 부분을 잊어버렸습니다... 결국 다음을 실행하게 되었습니다.

sudo chown -R postgres:postgres /var/lib

말할 필요도 없이 이것은 그 자체로 일련의 질문을 제기합니다. 예를 들어 운영 체제로 부팅할 수 없습니다.


    고쳐 쓰다:

    신청했고 chown -R gdm:gdm /var/lib/gdm이제 성공적으로 로그인할 수 있어요! 그러나 이것이 어느 정도까지 문제를 일으킬지는 모르겠습니다.


저는 i3을 창 관리자로, GDM을 디스플레이 관리자로 사용하여 Arch Linux를 실행하고 있습니다. /var/lib에 있는 필요한 디렉토리의 원래 소유권을 얻는 데 도움을 주시면 매우 감사하겠습니다. 지금까지는 프로세스의 이 부분에서 영구적으로 중단되었습니다.
         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을 통해 셸을 생성할 수 있으므로 올바른 소유권 요구 사항을 알고 나면 쉽게 수정할 수 있습니다.

지금 나는 /var/lib:

  • colord유색인종에 속하며,
  • gdmgdm 소유,
  • locatemlocate루트가 소유하고 있으며 ,
  • redisredis에 속하며,
  • systemd루트가 소유하고
  • 다른 모든 것은 postgres의 소유입니다.

바라보다ls -ho사진 내보내기 권한 및 수정 시간에 대해 알아보세요.

한 가지 문제는 /var/lib/gdm디렉토리가 gdm의 소유이고 일반적인 홈 디렉토리 하위 디렉토리( Desktop, Documents, Downloads, Music, Pictures, Public및 )가 포함되어 있으며 모두 postgres 소유라는 것입니다 TemplatesVideos바라보다ls -ho사진 내보내기 권한 및 수정 시간에 대해 알아보세요.

/var/lib파일 소유권을 실행 전 상태로 복원하는 방법

chown -R postgres:postgres /var/lib

? 어떤 도움이라도 대단히 감사하겠습니다.

답변1

디렉토리에서 chown 명령을 사용하여 /etc/passwords의 사용자 이름과 /etc/groups의 해당 그룹에서 알고 있는 정보를 반환할 수 있으며 나머지는 root:root에 속합니다.

하지만 버그를 만들 수 있을 때까지는 약간 까다롭습니다. 잊어버린 변경 사항으로 인해 여러 날 동안 나타날 것입니다...

나는 postgres gdm이 괜찮다고 생각합니다. 나머지는 아마도 루트 redis에서 redis에 속할 것입니다. Tor에도 전용 사용자가 있다고 생각합니다.


쉬운 방법: 모든 것을 다시 설치합니다(물론 /home을 포맷하지 않고 데이터베이스를 백업한 후)...

답변2

/var 파일 시스템 계층은 애플리케이션에서 생성된 데이터에 사용되므로 패키지 관리자는 /var에서 거의 관리하지 않습니다. 대부분의 경우 pacman -Qo는 각 응용 프로그램에 대한 디렉터리가 있도록 구조화되어 있기 때문에 /var/lib에 있는 최상위 디렉터리의 소유권만 반환합니다.

postgres보다 더 합리적인 기본값을 얻으려면 먼저 모든 것을 루트 소유자로 설정해야 합니다.

chown -R root:root /var/lib/

파일을 소유한 패키지를 다시 설치하십시오./var/lib

pacman -Qo $(find /var/lib) 2>/dev/null

이제 각 디렉터리의 소유자가 누구인지 확인하세요.

ls -la /var/lib

루트가 소유한 디렉터리의 모든 항목은 루트가 소유하게 됩니다. 루트에 속하지 않는 디렉토리는 실제로 응용 프로그램 사용자의 홈 디렉토리입니다. 몇 가지 예외를 제외하고 이러한 디렉터리에 포함된 모든 파일은 응용 프로그램 사용자가 소유합니다. 그래서 달리기가 chown -R gdm:gdm /var/lib/gdm작동합니다. 그러나 예외가 있습니다. 예를 들어 내 시스템에서는 /var/lib/sddm/state.conf루트가 소유합니다.

답변3

이 문제를 수동으로 수정하는 것은 쉬운 작업이 아닙니다. /var/lib의 항목을 기반으로 디렉터리의 가능한 소유권을 추측 할 수 있지만 /etc/passwd실패할 수도 있습니다. 응용 프로그램 디렉터리 아래의 일부 파일은 응용 프로그램이 소유하고 다른 파일은 루트가 소유하는 경우(또는 그 반대) 어떻게 되나요? 당신은 이것을 알아내는 데 오랜 시간을 소비하게 될 것입니다 ...

시스템에 모든 패키지를 다시 설치하는 것이 좋습니다. 이를 수행하는 방법은 다음과 같이 다양합니다.

# pacman -S $(pacman -Qeq) --noconfirm

하지만 이 작업을 수행하기 전에 시스템을 백업하는 것이 좋습니다.

답변4

라이브 구조 옆의 백업에서 복원하고 소유권을 복원된 구조와 동일하게 설정합니다. - BUR 시스템이 허용하는 경우 빈 파일/디렉터리를 복원할 수 있습니다.

관련 정보