- ベストアンサー
代替のシェルに入れ替えるための、具体的な方法
少し前から、bashの脆弱性の問題が指摘されていると思うのですが、例えばJPCERTは その対策の一つとして 「GNU bash を代替のシェルに入れ替える」 というものを上げています。 代替のシェルに入れ替える場合の具体的な方法ですが、例えば、(/etc/passwd等の)ログイン情報を見て、bashがログインシェルに設定されているユーザを、zsh等に書き換えて、再起動してしまう、というやり方で、十分なのでしょうか。 今現在問題に直面しているわけではないのですが、「入れ替え」の方法について、教えていただければと思います。
- ppower_001
- お礼率100% (20/20)
- ネットワーク
- 回答数3
- ありがとう数20
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
各ユーザーが使用するログインシェルも問題ですが、それ以上にバッチ処理などプログラムで使用するシェルも問題です。 通常 /bin/sh を実行シェルとして使用する事が多いですが、 /bin/sh を見ると bash にシンボリックリンクが張ってある事が多いです。 これのシンボリックリンクの向け先を別のシェルに変えると言った事も必要になってくるでしょう。 但し、シェルを変えたことでプログラムが動かなくなることも考えられますので、十分な検証が必要です。 また /etc/default/useradd に新規ユーザーを作成するときのテンプレートがありますが、この中身を書き換えてデフォルトのログインシェルを変更する事も必要かもしれませんね。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4848/10262)
現状では対策パッチが出ているので、別のシェルに入れ替える必要は無くて、bashを最新版にすれば良いです。 別のシェルにするというのはパッチが出る前の暫定対応の話です。 入れ替えるとすると、例えば /bin/zsh に置き換えるとすると、 # rm /bin/sh ; ln -s /bin/zsh /bin/sh # rm /bin/bash ; ln -s /bin/zsh /bin/bash のように、/bin/sh と /bin/bash をzshへのシンボリックリンクにします。作業としてはそれだけです。再起動の必要はありません。 もちろん、事前に、すべてのシェルスクリプトがzshで問題なく動くかの確認は必要ですが。
お礼
確認用スクリプトを見直し、アップデートが確認できました。 回答ありがとうございました。
補足
ありがとうございました。yumもapt-getも使えないものでしたので、教えていただいた情報とgooleの情報を総合し、結果的には、ソースからビルドしなおし(ソースに12個のパッチを当て)、make insatllし、/bin/bashをmvし、 ln -s /usr/local/bin/bash /bin/bash して、アップデートを完了しました。 ご教授いただいた情報を感謝いたします。 回答を頂いた3人の方に同じ質問で恐縮ですが、アップデート前は # env x='() { :;}; echo vulnerable' bash -c "echo this is a test" の結果が vulnerable this is a test であったのが、アップデート後は # env x='() { :;}; echo vulnerable' bash -c "echo this is a test" の結果が、 this is a test になっています。 これで対策が完了したと考えて大丈夫でしょうか。 なお、bash -versoinの結果は、アップデート前後も変りありません。
- yambejp
- ベストアンサー率51% (3827/7415)
>zsh等に書き換えて、再起動してしまう ここでいう書き換えるというのはpasswdファイルを書き換えるということ? 再起動というのはサーバーを再起動すということ? chshで書き換える方が現実的では? またpsでbashでlogin情報があればユーザーに通知したうえで、 killしちゃえば、再起動することもないのでは? そのうえでbashを絶対につかわないつもりならリネームしてシンボリックリンクで nologinにリンクしてしておくとか・・・ ユーザーのスクリプトにbashを前提として書いているものがあれば 都度書き換えてもらうしかないとは思いますが・・・
お礼
確認用スクリプトを見直し、アップデートが確認できました。 回答ありがとうございました。
補足
ありがとうございました。バリバリbashのスクリプトがありましたので、教えていただいた情報とgooleの情報を総合し、結果的には、ソースからビルドしなおし(ソースに12個のパッチを当て)、make insatllし、/bin/bashをmvし、 ln -s /usr/local/bin/bash /bin/bash して、アップデートを完了しました。 ご教授いただいた情報を感謝いたします。 回答を頂いた3人の方に同じ質問で恐縮ですが、アップデート前は # env x='() { :;}; echo vulnerable' bash -c "echo this is a test" の結果が vulnerable this is a test であったのが、アップデート後は # env x='() { :;}; echo vulnerable' bash -c "echo this is a test" の結果が、 this is a test になっています。 これで対策が完了したと考えて大丈夫でしょうか。 なお、bash -versoinの結果は、アップデート前後も変りありません。
関連するQ&A
- シェルについて
cshやbash、zsh、tcshなど色々ありますがどう違うのでしょうか。 これまであまり考えずにSoalrisやLinuxにログインして普通に作業してきましたが、ただtabやバックスペースが使用できないというだけでzshやtcshにして使用してきました。 ただこれだけ色々シェルがあるとしたら使用方法がいろいろ違うのではないかと思っております。 シェルスクリプトを作成する時の文法が違うとかでしょうか。
- ベストアンサー
- Solaris系OS
- ログインシェルについて
linuxにて/etc/passwdを閲覧すると、 /sbin/nologinというログインシェルがございります。 これは、ログインができないユーザとして割り当てられていると認識します。 1つ質問ですが、一般ユーザから例えば/sbin/nologinシェルの、 su - shutdownでスイッチするとpassword:とパスワードプロンプトが表示されます。 ということは、ログインが可能ということですか? よろしくお願いします。
- ベストアンサー
- Linux系OS
- シェルスクリプトを実行後すぐに中断する方法
シェルスクリプトがどのシェル(bash, zsh, tcsh)で実行されたかを確認したいため実行直後に停止したいのですが、どうすればよいでしょうか? すかさずctrl+zを押しても間に合いません。 (一般的な方法を知りたいのでスクリプト内でwaitというのは無しでお願いします。)
- ベストアンサー
- Linux系OS
- シェルがありません
このたび、シェルを /usr/sbin/bashに変更しようとしたところ、 /user/sbin/bashと誤って入力してしまったため、 root権限になることができなくなって(シェルがありません)しまいました。 解決方法はありますでしょうか? よろしくお願いします。
- ベストアンサー
- Solaris系OS
- zshがなくてrootでログインできなくなった
Solarisの経験はある程度ありますが、Linuxは初心者です。 CentOS5.5をインストールして、passwdファイルを書き換え、デフォルトのシェルをzshにしました。 ログインし直そうとしたところ、てっきりデフォルトで入っていると思っていたzshがなかったようで、zshがないというメッセージが出力され、ログインできなくなってしまいました。 このような場合、Solarisはとりあえずshをシェルにしてログインまではさせてくれるのですが、CentOSの場合はログインすら許してくれないようです。こういうケースではどうしたらいいのでしょうか。 かなりいろいろと設定をしたあとですので、できれば再インストールは避けたいところなのです。 よろしくお願いいたします。
- ベストアンサー
- Linux系OS
- シェルスクリプトについて
とあるUNIXサーバが1台あるとします。 でそのマシン上の管理プログラムが同一マシン上にある 「シェルスクリプト(bash)」をキックするとします。 となるとそのシェルスクリプトの実行者(?)は Unixにログオンしているユーザーになるのでしょうか?。 目的としてはそのログインしているユーザーの環境変数 をシェルから参照したいのですが・・ 考え方がWindowsなもので。。すみませんが よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- FTPは許可したいがシェルは許可したくない
いつもお世話になっております。 仲間内で立てたサーバーの管理者をやっておりますが、ここでひとつ疑問があります。 シェルを許可したくなく/etc/passwdファイルでは利用シェルを/bin/falseに指定しているのですが、このようにするとFTPの接続時にパスワードの入力を求められます。しかも正しいパスワードを入力してもログインできません。 sshやtelnetでのシェルの利用をさせず、ftpでログイン可能な設定方法などありますか? 使用環境は OS turbolinux7 proftpd apacheです よろしくお願いします
- ベストアンサー
- その他(OS)
- Bシェルの.profileについて
Solaris9を使っています。 シェルはデフォルトのBシェルを使っているのですが、 ユーザー環境定義ファイルのドットファイルを /etc/.profile のように作って環境定義 PATH=$PATH:/usr/local/bin export PATH のように書き再起動してみても、全く反映されません。 手元にある本をみると .profileはユーザー設定ファイル、 としかかかれていず、ユーザー事の設定にできるのかな?とも思うのですが、それ以上の情報が見つかりません・・・ ネットの情報を見てもbashやtcshの説明は多いのですが・・・ できれば自分のIDでログインしたときだけにその設定で起動するようにしたいのです。 つまりはユーザー設定ファイルがうまく有効になるようにしたいです。 よろしくお願いいたします
- ベストアンサー
- Solaris系OS
- WWWメンテナンスユーザにシェルを開放したくない
SolarisでWWWサーバを構築しています。WWWを管理させるためのユーザ、wwwを作成したのですが、シェルを開放したくありません。ただし、FTPでのコンテンツのPUTのみは許可させたく思っています。何か、いい方法はありますでしょうか?FTPのコマンドでも、cdやlsなど使用することを考えると、/etc/passwdファイルには、何らかのシェルを指定する必要がありそうなのですが、できればシェルは/bin/faiseを指定したく思っています。
- ベストアンサー
- ネットワーク
お礼
確認用スクリプトを見直し、アップデートが確認できました。 回答ありがとうございました。
補足
ありがとうございました。バリバリbashのスクリプトがありましたので、教えていただいた情報とgooleの情報を総合し、結果的には、ソースからビルドしなおし(ソースに12個のパッチを当て)、make insatllし、/bin/bashをmvし、 ln -s /usr/local/bin/bash /bin/bash して、アップデートを完了しました。 ご教授いただいた情報を感謝いたします。 回答を頂いた3人の方に同じ質問で恐縮ですが、アップデート前は # env x='() { :;}; echo vulnerable' bash -c "echo this is a test" の結果が vulnerable this is a test であったのが、アップデート後は # env x='() { :;}; echo vulnerable' bash -c "echo this is a test" の結果が、 this is a test になっています。 これで対策が完了したと考えて大丈夫でしょうか。 なお、bash -versoinの結果は、アップデート前後も変りありません。