web-dev-qa-db-ja.com

/ etc / passwdにアクセスできないユーザーのみのために、Solaris / SunOSのシェルを変更します。

/etc/passwdやその他のsuにアクセスせずに、Solaris/SunOSのシェルを自分のユーザーのみに設定するにはどうすればよいですか?

コマンド(2)を送信すると、インタラクティブssh(1)とsshの両方で機能します。

uname -aSunOS ... 5.10 Generic_148889-04 i86pc i386 i86pcと言います

コメントと回答に応じて編集

chshはありません。

できません/usr/bin/passwd -e-許可が拒否されました。

デフォルトのシェルはbashです。 zshをお願いします。

私はすでにShell環境変数を手動で設定し、.profileファイルでシェルを手動で開始しようとしましたが、これは私の場合は機能しません2番目のケース(2) :ssh user@Host commandはbashでcommandを実行します。

ログイン時に自分の優先シェルを取得するのと比較して、それはマイナーなので、回避策は確かに言及する価値がありますが、この質問の私の意図は、正しい方法で正しく取得することでした。それは1人のユーザーに関連しているだけなので、SAを使用しなくても実行できると思っていましたが、今は確信が持てません。 (しかし、(1)と(2)を解決する回避策は確かにすばらしいです。)

4
Emanuel Berg

Shell=newshell; exec "$Shell"トリックはすでにカバーされています。

ここで、新しいシェルを使用するためにsshでコマンドを実行する場合も同様です。現在のログインシェルがbashの場合、これを~/.bashrcに追加できます。

if [ -n "$BASH_EXECUTION_STRING" ]; then
  export Shell=/bin/zsh
  exec "$Shell" -c "$BASH_EXECUTION_STRING"
fi

これは、somethingbash -c somethingandで始まるときに、新しいシェルでbashを実行し、~/.bashrcを読み取ります。

bash -c somethingで始まるシェルは、通常~/.bashrcを読み取りません。例外は、これらのbashsshdまたはrshdによって呼び出された場合、またはbash -ic somethingで呼び出された場合です。

sshケースのみを対象にする場合は、[ -n "$SSH_CONNECTION" ]のチェックを追加できます。

4

メソッド#1:chsh

通常、/etc/passwdにアクセスしなくても、コマンドchshを使用してシェルを変更できます。これは通常、デフォルトのシェルをリストするファイルです。次に例を示します。

saml:x:500:501:Sam M. (local):/home/saml:/bin/zsh

通常のユーザーは、自分のアカウントのログインシェルのみを変更できます。スーパーユーザー、つまりrootユーザーは、任意のアカウントのログインシェルを変更できます。次のコマンドを使用して、システムで使用可能なシェルを確認できます。

$ chsh --list-shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
/bin/zsh

シェルを変更するには、次のコマンドを使用できます。

$ chsh -s /bin/zsh saml
Changing Shell for saml.
Password: 
Shell changed.

/etc/passwdファイルを見ると、効果は明ら​​かです。

$ grep saml /etc/passwd
saml:x:500:501:Sam M. (local):/home/saml:/bin/zsh

変更はすぐには表示されません。それを表示するには、ログアウト/ログインする必要があります。

[saml@grinchy]~% echo $Shell
/bin/zsh

メソッド#2:/usr/bin/passwd -e

コマンドchshにアクセスできず、Solarisにはないようで、/etc/passwdで変更するためのrootアクセス権がない場合でも、まだ実行できる可能性がありますこのコマンドでも同じです:

$ /usr/bin/passwd -e

方法#3:手動で設定する方法

上記のいずれの方法もオプションではない場合、基本的にこの最後のオプションが残されます。これは、既存のシェルのログインファイルに次のいずれかを追加することです。

  1. デフォルトのシェル:/ bin/cshまたは/ bin/tcsh

    次の行を$HOME/.loginに追加します。

    setenv Shell=/bin/bash
    exec $Shell
    
  2. デフォルトのシェル:/ bin/bash

    以下を$HOME/.bash_profileに追加します。

    export Shell=/bin/zsh
    exec $Shell
    

上記で考慮すべきいくつかの追加事項、たとえば、設定する前に現在の$ Shellがすでに/bin/bashであるかどうかを確認するチェックを実行することで、それらをより確実なものにすることができます。ある場合は何もしないでください。そうでない場合は、先に進んでexec $Shellを実行してください。

参考文献

5
slm

Vanilla Solarisのインストールではできません。簡単な回避策は、必要なシェルを実行するようにプロファイルを変更することです。

たとえば、/etc/passwdは、シェルが/bin/bashが好み/bin/ksh

$ tail -2 ~/.bash_profile
export Shell=/bin/ksh
exec $Shell

タイプミスでロックアウトしたり、偽のexecやロジックで無限ループに入らないように注意してください。

4
jlliagre