我使用的是 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
,但是当使用su
access时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 进行输入。但插入git
for<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 ~#
不管用。