无法 su 进入 root 默认 shell - Debian

无法 su 进入 root 默认 shell - Debian

我使用的是 Debian 9 服务器。

通常我通过ssh普通用户(例如user1)访问并su进入root,因为我禁用了ssh进入root。最近,我正在设置一个 git 服务器,我在其中创建了一个git具有该组的用户git并将其限制为git-shell.玩了一会,我像这样添加user1到组中:git

usermod -aG git user1

这工作正常,user1是小组成员user1并且git.最后我想撤消这一点,所以我使用了:

usermod -G user1 user1

此后不久,我失去了互联网连接,不得不重新连接。我可以ssh进入user1,但是当使用suaccess时root,出现错误:

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

我包含了有关的信息git-shell,因为我不知道还有什么原因。希望一切还没有完全消失,有人可以帮助我重新获得控制。

PS:没有任何其他类似 root 的用户,因此sudo不起作用,因为user1“不在 sudoers 文件中”。

PPS:我可以root通过 VPS 登录重置密码,但我不太确定这是否会起作用或使一切变得更糟。

答案1

仅通过救援模式解决:

  • 启动进入“救援模式” - 可能在大多数 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的评论,我重新控制了我的系统。如果我能弄清楚原因,我将提供详细信息 - 请参阅下面的编辑。

重现:我(无意中)发现了如何更改 root 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 ~#

不管用。

相关内容