Debian

無法 su 進入 root 預設 shell - Debian

  • July 3, 2019

我正在使用 Debian 9 伺服器。

通常我通過ssh普通使用者(例如user1)訪問並su進入root,因為我禁用ssh了進入root。最近我正在設置一個 git-server,我在其中創建了一個git包含該組的使用者git並將他限制為git-shell. 玩了一會兒,我像這樣添加user1到組中git

usermod -aG git user1

這工作正常,user1是組的成員user1git. 最後我想撤消這個,所以我使用了:

usermod -G user1 user1

此後不久,我失去了網際網路連接,不得不重新連接。我可以ssh進入user1還好,但是使用su訪問時root,出現錯誤:

user1@hostname:~$ su 
Password: 
Cannot execute git: No such file or directory
user1@hostname:~$

我包含了關於 的資訊git-shell,因為我不知道還有什麼原因。希望這不是全部失去,有人可以幫助我重新獲得控制權。

PS:沒有任何其他類似 root 的使用者,因此sudo無法正常工作,因為user1“不在 sudoers 文件中”。

PPS:我可以通過 VPS-login 重置root密碼,但我不太確定這是否會起作用或讓一切變得更糟。

僅在救援模式下解決:

  • 啟動到“救援模式” - 可能在大多數 VPS 上可用
  • mount適當的驅動
  • nano /path/to/mounted/drive/etc/passwd
  • 將根條目更改為root:x:0:0:root:/root:/bin/bash
  • 在沒有救援模式的情況下保存、退出和重新啟動

不同的方法如

user1@hostname: ~$ su -s /bin/sh

或者

user1@hostname: ~$ su -s /bin/sh -c /bin/sh

沒有用,只回復了同樣的錯誤資訊。

我(還沒有)找到原因,但根據@doneal24 的評論,我重新獲得了對系統的控制權。如果我可以澄清原因,我將提供詳細資訊 - 請參閱下面的編輯。

重現:我(偶然)發現了我是如何更改根 shell 的。根據ProGit的這個chsh -s $(command -v git-shell) <user>,我認為是啟用 git-shell 進行輸入。但是插入gitfor<user>會更改 root 的 shell。

root@hostname ~ # chsh -s $(git init ./project1.git git-shell) git
usage: git init [-q | --quiet] [--bare] [--template=<template-directory>]             [--shared[=<permissions>]] [<directory>]
chsh: Warning: git does not exist
root@hostname ~ #

我可能誤解了 ProGit 上的資訊,因為這看起來很像我在 EDIT 下寫的。

EDIT1:請參閱下面的實際更改方式。

root@hostname ~# chsh root -s git
chsh: Warning: git does not exist
root@hostname ~#

將條目更改為

root@hostname~ # cat /etc/passwd | grep root
root:x:0:0:root:/root:git
root@hostname~ #

這很奇怪,就像

root@hostname ~# chsh root -s /bin/bash
Password:
chsh: PAM: Authentication failure
root@hostname ~#

不管用。

引用自:https://unix.stackexchange.com/questions/525051