如何在 Solaris/SunOS 中仅为我的用户设置 shell,而不能访问/etc/passwd或任何其他su内容?
此后它应该适用于交互式ssh(1) 和ssh发送命令 (2)。
uname -a 说 SunOS ... 5.10 Generic_148889-04 i86pc i386 i86pc
编辑以回应评论和答案
没有chsh。
我做不到/usr/bin/passwd -e- 权限被拒绝。
默认的 shell 是 bash。我想要 zsh。
我已经尝试SHELL手动设置环境变量,并在.profile文件中手动启动 shell ,只有这对我的第二种情况(2)不起作用:ssh user@host command将command在 bash 中运行。
与登录时获得我喜欢的 shell 相比,它是次要的,因此解决方法当然值得一提,只是,我对这个问题的意图是正确地解决它。因为它只与一个用户有关,所以我认为它在不涉及 SA 的情况下是可行的,但现在我不太确定了。(但任何解决 (1) 和 (2) 的解决方法都很酷,当然。)
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)
/usr/bin/passwd -e如果您无权访问chsh显然在 Solaris 上没有的命令,并且您没有 root 访问权限来更改它/etc/passwd,那么您仍然可以使用此命令执行相同的操作:
$ /usr/bin/passwd -e
Run Code Online (Sandbox Code Playgroud)
如果上述方法都不是一个选项,那么您基本上只剩下最后一个选项,即在现有 shell 的登录文件中添加以下内容之一:
默认外壳:/bin/csh 或 /bin/tcsh
将以下行添加到$HOME/.login:
setenv SHELL=/bin/bash
exec $SHELL
Run Code Online (Sandbox Code Playgroud)默认外壳:/bin/bash
将以下内容添加到$HOME/.bash_profile:
export SHELL=/bin/zsh
exec $SHELL
Run Code Online (Sandbox Code Playgroud)上面需要考虑的一些其他事项,您可以通过/bin/bash在设置之前执行检查以查看当前 $SHELL 是否已经存在,从而使它们更加防弹。如果是,则什么都不做,否则继续执行exec $SHELL.
技巧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。一个例外是当它们bash被sshdorrshd或 on调用时bash -ic something。
[ -n "$SSH_CONNECTION" ]如果您只想支付案件费用,您可以添加一张支票ssh。
| 归档时间: |
|
| 查看次数: |
28162 次 |
| 最近记录: |