Linux

搞砸了 Linux 權限 - 如何修復?

  • March 18, 2012

我正在執行 rsync 並意外地反轉了命令,因此它覆蓋了主伺服器上備份伺服器上的一堆文件。

備份伺服器位於 chroot 監獄中,因此它覆蓋了以下文件:

你是:

bash  chroot-jail  cp  ls  mkdir  mv  rm  rmdir  sh  su

開發目錄:

null  tty  urandom  zero

庫目錄:

pam_access.so    pam_ecryptfs.so   pam_issue.so    pam_listfile.so   pam_passwdqc.so 
pam_rps.so         pam_tally.so      pam_unix_auth.so
pam_ccreds.so    pam_env.so        pam_keyinit.so  pam_localuser.so  pam_permit.so       pam_securetty.so   pam_tally2.so     pam_unix_passwd.so
pam_chroot.so    pam_exec.so       pam_krb5        pam_loginuid.so   pam_pkcs11.so       pam_selinux.so     pam_time.so       pam_unix_session.so
pam_console.so   pam_faildelay.so  pam_krb5.so     pam_mail.so       pam_postgresok.so   pam_shells.so      pam_timestamp.so  pam_userdb.so
pam_cracklib.so  pam_filter        pam_krb5afs.so  pam_mkhomedir.so  pam_pwhistory.so    pam_smb_auth.so    pam_tty_audit.so  pam_warn.so
pam_debug.so     pam_filter.so     pam_lastlog.so  pam_motd.so       pam_rhosts.so       pam_stack.so       pam_umask.so      pam_wheel.so
pam_deny.so      pam_ftp.so        pam_ldap.so     pam_namespace.so  pam_rhosts_auth.so  pam_stress.so      pam_unix.so       pam_xauth.so
pam_echo.so      pam_group.so      pam_limits.so   pam_nologin.so    pam_rootok.so       pam_succeed_if.so  pam_unix_acct.so

庫64:

ld-linux-x86-64.so.2  libaudit.so.0    libcrypt.so.1   libglib-2.0.so.0  
libpam.so.0       libresolv.so.2   libsepol.so.1    libz.so.1
libacl.so.1           libc.so.6        libcrypto.so.6  libkeyutils.so.1  libpam_misc.so.0  librt.so.1       libtermcap.so.2
libattr.so.1          libcom_err.so.2  libdl.so.2      libnsl.so.1       libpthread.so.0   libselinux.so.1  libutil.so.1

斯賓:

unix_chkpwd

這樣做之後,在我們的主伺服器上,我現在只能以 root 身份登錄,沒有一個輔助帳戶可以工作,因為權限似乎完全搞砸了。Apache 僅提供 403 頁等。關於如何解決此問題或系統是否已損壞的任何想法?

帳戶似乎仍然列在 passwd 和 shadow 中。

正如 Bill Weiss 所說,您可能會發現在乾淨的系統上從已知良好的備份中恢復更容易、更安全。您不僅弄亂了權限,而且還替換了文件。即使源機器和目標機器是相同的發行版,也不能保證它們是相同的文件,這可能會導致各種古怪的問題。

如果你覺得你必須嘗試恢復,我有兩種方法可以考慮。第一種是使用發行版的包管理器來強制重新安裝擁有受影響文件的包。第二種是更手動的方法:

  • 使用系統的包管理器找出每個文件的所有者。
  • 設置一個新系統並確保在其上安裝完全相同版本的這些軟體包
  • 將文件的副本上傳到伺服器
  • 以單使用者模式啟動伺服器並小心替換所有文件。
  • 設置權限/所有權以匹配。
  • 重啟

然後您可能會發現您再次擁有一個工作系統,但我不相信它,它可能需要比清理/恢復路線更長的時間。

這是一個有用的命令,您可以在受影響文件的完整路徑列表上執行以獲取受影響軟體包的列表(Debian/Ubuntu):

for a in `cat files.txt`; do dpkg -S $a |cut -d':' -f1; done |sort -u

引用自:https://serverfault.com/questions/370796