为您的用户更改 Solaris/SunOS 中的 shell,只能访问 /etc/passwd

Ema*_*erg 5 shell ssh solaris

如何在 Solaris/SunOS 中仅为我的用户设置 shell,而不能访问/etc/passwd或任何其他su内容?

此后它应该适用于交互式ssh(1) 和ssh发送命令 (2)。

uname -aSunOS ... 5.10 Generic_148889-04 i86pc i386 i86pc

编辑以回应评论和答案

没有chsh

我做不到/usr/bin/passwd -e- 权限被拒绝。

默认的 shell 是 bash。我想要 zsh。

我已经尝试SHELL手动设置环境变量,并在.profile文件中手动启动 shell ,只有这对我的第二种情况(2)不起作用:ssh user@host commandcommand在 bash 中运行。

与登录时获得我喜欢的 shell 相比,它是次要的,因此解决方法当然值得一提,只是,我对这个问题的意图是正确地解决它。因为它只与一个用户有关,所以我认为它在不涉及 SA 的情况下是可行的,但现在我不太确定了。(但任何解决 (1) 和 (2) 的解决方法都很酷,当然。)

slm*_*slm 5

方法#1:用 chsh

通常,您可以使用该命令chsh来更改您的 shell,而无需访问/etc/passwd. 这是通常列出您的默认 shell 的文件,例如:

saml:x:500:501:Sam M. (local):/home/saml:/bin/zsh
Run Code Online (Sandbox Code Playgroud)

普通用户只能更改自己账户的登录shell,超级用户即root用户可以更改任何账户的登录shell。您可以使用以下命令查看系统上可用的 shell:

$ chsh --list-shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
/bin/zsh
Run Code Online (Sandbox Code Playgroud)

要更改您的外壳,您可以使用以下命令:

$ chsh -s /bin/zsh saml
Changing shell for saml.
Password: 
Shell changed.
Run Code Online (Sandbox Code Playgroud)

/etc/passwd文件效果很明显:

$ grep saml /etc/passwd
saml:x:500:501:Sam M. (local):/home/saml:/bin/zsh
Run Code Online (Sandbox Code Playgroud)

您不会立即看到更改。您必须注销/登录才能看到它:

[saml@grinchy]~% echo $SHELL
/bin/zsh
Run Code Online (Sandbox Code Playgroud)

方法#2: /usr/bin/passwd -e

如果您无权访问chsh显然在 Solaris 上没有的命令,并且您没有 root 访问权限来更改它/etc/passwd,那么您仍然可以使用此命令执行相同的操作:

$ /usr/bin/passwd -e
Run Code Online (Sandbox Code Playgroud)

方法#3:手动设置方法

如果上述方法都不是一个选项,那么您基本上只剩下最后一个选项,即在现有 shell 的登录文件中添加以下内容之一:

  1. 默认外壳:/bin/csh 或 /bin/tcsh

    将以下行添加到$HOME/.login

    setenv SHELL=/bin/bash
    exec $SHELL
    
    Run Code Online (Sandbox Code Playgroud)
  2. 默认外壳:/bin/bash

    将以下内容添加到$HOME/.bash_profile

    export SHELL=/bin/zsh
    exec $SHELL
    
    Run Code Online (Sandbox Code Playgroud)

上面需要考虑的一些其他事项,您可以通过/bin/bash在设置之前执行检查以查看当前 $SHELL 是否已经存在,从而使它们更加防弹。如果是,则什么都不做,否则继续执行exec $SHELL.

参考


Sté*_*las 4

技巧SHELL=newshell; exec "$SHELL"已经被涵盖了。

现在,如果您还希望通过 ssh 运行命令来使用新的 shell。如果当前的登录 shell 是bash,您可以将其添加到您的~/.bashrc

if [ -n "$BASH_EXECUTION_STRING" ]; then
  export SHELL=/bin/zsh
  exec "$SHELL" -c "$BASH_EXECUTION_STRING"
fi
Run Code Online (Sandbox Code Playgroud)

每当以 启动读取时,都会使用something新的 shell执行。bashbash -c something ~/.bashrc

shell 开头bash -c something一般不读~/.bashrc。一个例外是当它们bashsshdorrshd或 on调用时bash -ic something

[ -n "$SSH_CONNECTION" ]如果您只想支付案件费用,您可以添加一张支票ssh