我可以以root身份启动进程而不启动root的登录shell吗?


8

我试图更改登录外壳。

这是第一行的/etc/passwd样子(在Debian Wheezy安装中):

rootx:0:0:root:/root:/:zsh

当我尝试登录为root

Cannot execute zsh: No such file or directory

我知道zsh有空:

$ which zsh
/usr/bin/zsh

好的,zsh用完整的路径替换似乎是合乎逻辑的。但是我该怎么办呢?

我在系统(user)上还有一个其他用户,但是它没有root特权,sudo并且没有安装在系统上。

假定由于任何原因(加密,物理访问等),我都无法在实时CD上引导修改文件。

但是,我确实知道该root帐户的凭据。

我的问题是:是否有任何方法,甚至以编程方式,root无需先启动其登录外壳程序即可启动该帐户的进程?


那又如何su呢?还是gksu?像su -c 'sed -i s,root:/:zsh,root:/:/usr/bin/zsh, /etc/passwd'
qdii

passwd文件所在的行不应该是/ usr / bin / zsh吗?为什么只输入字符串zsh?
slm

@slm这就是OP想要做出的改变……
CVn

1
如果@qdii建议有效(即有效su -c "<commands>")...我们不能然后简单地使用rootsu -c "/bin/bash"用户进入工作场所吗?
humanandANDpeace

1
@humanityANDpeace:那不行。传递给该命令的命令-c是通过用户的登录shell运行的。-s仅当现有登录shell有效或调用者为root时,才可以使用其他shell。
Mat

Answers:


4

具有su权限

您可以使用以下命令来更改任何用户的外壳。

su -c "/usr/bin/chsh -s /bin/bash root"

如果您具有物理访问权限

在Grub引导期间,只要您具有控制台访问权限,而且没有密码可以阻止您访问Grub菜单,则可以进入任何系统。

在显示Grub菜单时,在系统的初始引导过程中,如果进入菜单并编辑(e按键)内核行,则可以添加以下内容之一以使内核在单用户模式下引导。

  • 初始化= / bin / sh
  • 1个

该行将如下所示:

 kernel /vmlinuz-2.6.15-27-386 root=/dev/mapper/Ubuntu-root ro init=/bin/bash

在Grub中,它应类似于以下内容:

       rub

进行更改后,启动内核(按键b)。

这将使您可以使用shell临时访问系统,您可以在其中使用vi / vim对文件进行所需的任何更改/etc/passwd。只需键入reboot时,即可大功告成。


2
他说他没有物理访问权限,因此很可能他将看不到GRUB菜单。
雷南

@Renan。好吧,我没有从前几读中得到。它隐藏在“ ..我无法在实时CD ..上启动”行中,这对我来说很奇怪。
slm

4
您的su命令将不起作用,因为它将尝试调用root的shell,而该shell不存在。
吉尔(Gilles)'所以

@吉尔斯:还有其他想法吗?如果没有物理访问,我看不到解决此问题的方法。感觉到我们正在针对该系统在设计时要防止的确切工作进行对抗。
slm

1
@slm如果没有sudo,我认为根帐户已锁定,因此需要物理访问。
吉尔斯(Gilles)'所以
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.