More from: linux

負荷が高くてmailが配信されない・・・・・・・・

職場のmailサーバに外からのmailが届いていないが何かあったのか?
という問い合わせがあった。
調べてみるとサーバの負荷が高くてsendmailが配信をストップしていた模様・・・・・・・

sendmailはデフォルトでシステム負荷(Load Average)の数値が12を超えると接続を拒否する仕様になっている。
これは外部からのmailbombによる攻撃でシステムが止まる事を防ぐためで、この数値の設定はsendmailの設定ファイルであるsendmail.cfで変更可能だ。
sendmail.cf内に
# load average at which we refuse connections
#O RefuseLA=12
という行があるので、2行目の行頭の#を外して行末の数字を書き換えて保存し、sendmailのプロセスを再起動するか、kill -HUP ”sendmailのプロセス”で初期化すればOK。
sendmailのプロセスNoは
ps ax | grep sendmail
とでもすれば判る。

それにしても今まで負荷が高くて配信が止まる事は殆ど無かったのに今日になって起きるなんて不思議だ・・・・・
もしかして攻撃されているのか?(笑)
#直接外部に晒していないから大丈夫だとは思う。

←クリックしてくれると嬉しいです。

Perlのバージョンを上げてみた。

職場のサーバでPerlのバージョンが低くてパッケージのインストールが出来ないのがあったのは昨日書いた通り。
今日、そのサーバにPerlの5.6.2をソースからコンパイルして入れてみた。
#最初rpmパッケージを探したけど見つけられなかったorz
コンパイル-インストールにはそれほど問題は無く、無事にインストール出来た。
動作にも問題は無かったのだが、肝心のパッケージのインストールは相変わらず出来ない状態。
今度はPerlの問題ではなく、インストールスクリプトが途中でコールしているmkinitrdが異常終了してしまうためで、恐らくはmodules.confが無いためと思われる。
#カーネルが2.2.9なのでモジュール管理をmodules.infoファイルで行っているのが原因か。
うーん、なかなか一筋縄では行かないね(汗)。

←クリックしてくれると嬉しいです。

Perlのバージョンを・・・・・・

職場で動作させているLinuxサーバの内の1台がPerlのバージョンが古くて必要なパッケージがインストール出来ない。
インストールをお願いした業者さん曰く、「5.6以降のバージョンが必要ですが、現在インストールされているのは5.0です。」だそうなので、5.6以降のバージョンを探してきてインストールしなくてはならない。
まぁこれは探してくればなんとかなるのだけど、同じディストリビューションのLinuxが他にもあって、そちらには5.6以降のPerlがインストールされていたのは不思議だ・・・・・・
どっちのサーバも私が構築したものなんだけど、なんでバージョンが違うんだろ?
両方とも明示的にPerlを使うようなことはしていないから、後からバージョンを上げた記憶は無いんだけどなぁ?

←クリックしてくれると嬉しいです。

sambaサーバでのアクセス制限

ファイルサーバとして使っているLinuxサーバでアクセス制限を掛ける方法を調べている。
やりたいのは共有をかけているディレクトリ単位にIPアドレスで制限を掛けるということ。
具体的には
/var/share/AAA
というディレクトリには
192.168.1.0/24 からだけアクセスを許し、
/var/share/BBB
192.168.255.0/24 からだけアクセスを許すというようなこと。

これを実現するには設定ファイル(smb.conf)内にアクセスを許可するIPアドレス(グループ)を記述する必要がある。
サーバ全体へのアクセスを制限するには
[global]
セクションに
hosts allow = 192.168.1. 127.
と書けば192.168.1.0/24とローカルホスト(サーバ自分自身)からのアクセスのみを許可することになる。
同じことを各ディレクトリ単位にしたい場合はこの
hosts allow =
の行を各ディレクトリ毎のセクションに記述すればOK。
つまり、上のほうに書いたようなことを実現するには、
[AAA]
    path = /var/share/AAA
(中略)
    hosts allow = 192.168.1.
[BBB]
    path = /var/share/BBB
(中略)
    hosts allow = 192.168.255.
と書けば良いことになる。

反対に特定のIPアドレス(グループ)からのアクセスを拒否したい場合は「hosts allow」の代わりに「hosts deny」と書けば良いのかと思ってやって見たけど上手く拒否されずにアクセスが出来てしまった。
今のところ拒否のほうは上手くいかないけど、とりあえず目的を達することは出来るので、denyのほうはおいおい調べていこうか。

←クリックしてくれると嬉しいです。

NFSマウントしたファイルシステムをsambaでクライアントに公開するには?

現場にあるPCサーバ(Linux)にはクライアントPCで共有するファイルを置くためのディレクトリを用意して、そこをsambaで公開している。
数年前に設置した当初はそれほど容量を必要としない筈だったので、用意したパーティションの容量は10GB程度。
ところが運用が始まると画像データの置き場にされてしまい、あっと言う間に容量不足となってしまった。
なので現在はクライアントPCの一台をファイルサーバとして使っている状態。
本当はサーバにファイルを置きたいのだが物理的にHDDの容量が足りず、かといって現場が遠隔地なので気軽にHDDを増設しに行くことも出来ない。
そこで思いついたのは他の現場にあるHDD容量の多いサーバにNFSでつないで、その領域をsambaで開放するという手段。
早速調べてみるとsambaユーザー会辺りのMLで「速度が実用に耐えない」との投稿があったorz
そのMLではSANとSANサーバをNFSで接続して(ネットワークはGbit)、SANサーバがsambaで領域を公開しているが、クライアントからのファイルコピーで実測1kBps未満の速度しか出なかったとのことだ。
やり取りを読んでみると最終的にはなんとか使えそうな速度にはなった(マウントオプションに”nolock”を付ける)とのことが書かれていたが、安易に行うと痛い目を見ることになりそうだ。
それでもやりかたによってはなんとかなりそうな気がしてきたので、今度じっくり試してみようかと思う。

←クリックしてくれると嬉しいです。

三日先のファイル

Windows95のクライアントがファイルサーバ上に作成したファイルの更新時刻が72時間先になるという奇妙な現象が発生している。
Windows95のDOS窓で動作しているプログラムがsambaサーバが開放しているディレクトリ上にファイルを開き、データを書き込んだ後にファイルを閉じると何故か更新日時がちょうど三日後になってしまう。
単にファイルを開いて閉じるだけなら更新日時は狂わないのだが、開いたファイルになんらかのデータを書き込んで閉じると更新日時が狂ってしまっていることが判明した。
最初に疑ったのはクライアントPCのシステム時刻の狂いだが、これはほぼ正しい時刻を示していた(「ほぼ」というのはntpでの同期を行っていないので数十秒程度の狂いがあったため)。
次にsambaの設定かとも思ったが、問題のファイルを他のPCのエディターで開いて上書き保存をすると更新日時は正しい日時になるので、samba絡みとも思えずクライアント側のプログラムになんらかの問題がある可能性が高い。

プログラムはC言語で書かれているもので、ファイルへのアクセスは
fopen()でファイルを開いて
fprintf()でデータを書き込み
fclose()でファイルを閉じているという一見なんでもない処理をしているだけだ。
データの書き込みを行っていない場合(fopen()→floce()のみをコールし、ファイルサイズが0バイトの場合)は狂いが生じていないので、fprintf()をコールした際におかしな挙動を示していると思われる。
でもこれだけで日時が72時間も狂うことなんかあるのだろうか?
別に下の階で大きなブラウン管TVの電源が入っているわけでもないし、そもそもそれだと過去に行ってしまう筈(爆)。
うーん、不思議だ・・・・・

←クリックしてくれると嬉しいです。

WindowsエクスプローラーでFTPサーバに接続した時の日本語ファイル名が化ける件

昨日書いた記事「Windowsからftpサーバへの接続メモ」の続きだけど、WindowsエクスプローラーでFTPサーバへの接続は可能になったけど、日本語のファイル/ディレクトリ名が文字化けしてしまって読めない件はFTPサーバーをvsftpdからProFTPdに切り替えることで解決できそうな気配。
早速現時点での最新ソース「proftpd-1.3.4rc3.tar.gz」を落としてきてコンパイルしてインストールしたが、デフォルトでは文字コード変換のモジュールが無いのでproftpd.confに文字コードの設定を書いてもエラーになってしまい(←当たり前)文字化けは直らない。
で、その文字コード変換のモジュールを探しているのだが、1.3.0用のパッチ(proftpd-1.3.0-iconv.patch.gz)が置いてあるサイトに接続できずダウンロードが出来ない。
うーん、どっかにミラーされていないのかなぁ?

←クリックしてくれると嬉しいです。

Windowsからftpサーバへの接続メモ

先日から「(Windows標準の)エクスプローラーから簡単にファイルサーバにアクセスしたい。」という要望を実現すべくいろいろ試行錯誤していたのでその時のメモ。

WindowsXP以降のOSには標準でftpクライアントが実装されたので、それを使ってftpサーバに接続してファイルのアップロードやダウンロードが出来るようになった。
エクスプローラーのアドレスバーに「ftp://(サーバのアドレス)/」と入れればanonymous(匿名)ユーザーでのアクセスを許可しているサーバならログイン可能だ。
接続できない場合はanonymousログインを許可していないかサーバ側の設定が間違っていることになる。

今回使用したサーバはvsftpdを利用していたので、以下はvsftpd用の設定メモ。
anonymousユーザーのホームディレクトリ(ftp rootになる)はデフォルトで/var/ftp/なので、これを他のディレクトリにしたければ/etc/passwdファイル中のftpユーザーのエントリを書き換えてvsftpdを再起動すれば良い(kill -HUP 1を実行する必要もあるか)。
ここで気をつけなくてはならないのは、ホームディレクトリに一般ユーザーの書き込み許可があるとvsftpdはログインを許可しないので、エクスプローラーからの接続が出来ない。
Linuxから接続しようとすると、
500 OOPS: vsftpd: refusing to run with writable anonymous root
のエラーメッセージが出て接続が拒否される。
なので、ホームディレクトリのパーミッションは755もしくは775にして置く必要があり、ファイルのアップロードを許可するには書き込み可能なサブディレクトリを作成しておく必要がある。
当初はこのことに気付かず実際にアクセスさせたいディレクトリをホームディレクトリに変更したところログインできなくなって焦った(というか変更は出来ないものかと思った)。

なお、接続時にユーザー名を指定して接続する場合にはその必要は無い。
接続時にユーザー名を指定するにはアドレスバーに「ftp://ユーザー名@サーバーのアドレス」と入力し、パスワード入力を促すダイアログボックスが表示されるので、そこでパスワードを入力すれば(そしてパスワードが正しければ)サーバへ接続できる。
下はパスワード入力のダイアログボックス。

ftp接続時のダイアログボックス

ftp接続時のダイアログボックス。


2回目以降も同じユーザー名とパスワードで接続するなら下の「パスワードを保存する」にチェックを入れておけば入力の手間が省ける。

とりあえずここまでやって目的のサーバーに接続できるようにはなった。
今現在少々悩んでいるのがファイル名の文字コードで、sambaユーザーがアップロードした日本語ファイル名がことごとく文字化けして全く意味不明だということ。
読めないだけならまだしも、フォルダ名が日本語の場合にフォルダの中は見れてもファイルを開こうとするとアクセス出来ないのは困る。
この文字コードを統一したいのだけれど、まだそこまでは調べが付いていないので現在も調査中。
まぁ、sambaとftpを別個に運用することも出来るので、どうしても無理なら諦めることにしよう。

←クリックしてくれると嬉しいです。

忘れていたのでメモ(Linuxのログイン方法の変更)

現場のサーバが不調になり再起動してもネットワークに繋がらなくなったので現場でサーバを起動したところグラフィカルログイン画面でキーボードもマウスも効かなくなっていてログインすら出来なかった。
持ち帰って起動してファイルシステムのチェックを行ったところ無事にログインできるようになったが、グラフィカルログインはなにかと面倒(マウスが無いと操作しにくいし)なのでテキストログインに変更した(Xを使いたければログイン後にXを起動すれば良いだけだし)。
切り替え方法を忘れていたのでここにメモしておく。
直すのは/etc/inittabファイルのみ、修正箇所は「id:5:initdefault:」の”5″を”3″にするだけ。
滅多にやらない作業だからつい忘れてしまうんだよねぇ(汗)。

つーか今後作るサーバは最初からテキストログインにしておくことにしよう。

←クリックしてくれると嬉しいです。

anonymousユーザーのroot dir

WindowsXP等にはftpクライアントが実装されていて、エクスプローラー(IEに非ず)のアドレスバーに「ftp://ftp server/」と入れるとそのサーバにログイン出来る。
ログインユーザーはWindowsのユーザー名ではなく、「anonymous」ユーザーとなるので、通常は限定されたアクセスしか出来ないか、サーバーによってはアクセスを拒否される。
「安全性が確保できるのであれば」というのが前提だけど、anonymousユーザーのftp rootを他のディレクトリに(例えばsambaユーザーが使用するディレクトリに)変更すれば、LAN内のsambaユーザーと外からのftpユーザーが同じファイルを共有することも可能と言うことになる。
#反対にftpユーザーのrootディレクトリをsambaで開放しても同じこと(sambaユーザーとanonymous ftpユーザーが同じファイルにアクセスすること)が可能。
anonymous ftpユーザーのrootディレクトリはftpユーザーのホームディレクトリ(/var/ftp等)なので、これを変更すればエクスプローラー上に見えるディレクトリを変更できる。
ホームディレクトリの変更はX上で管理ツールを使っても出来るし、/etc/passwdファイルを直接編集してからkill -HUP 1で行うことも出来る。
ところがこの方法だとサーバ上のアカウントを聞いてくるので、その時に正しいユーザー名とパスワードの入力が必要になる。
しかもディレクトリ内にあるファイルが一部しか見えず、sambaサーバーのような使い方が出来ない。
ホームディレクトリの変更をしないのであれば、ホームディレクトリ内からsambaで開放しているディレクトリにシンボリックリンクを張ることで同様のことが実現可能に思えるが、実際にはこれは出来ず、やってみてもシンボリックリンクがWindowsのショートカットのような扱いをされてしまい、目的のディレクトリにはアクセス出来なかった。

ちょっと実験をしてみたが、今のところsambaサーバーのようには使える状態には至っていない。

でもこれが実現できたら便利になるなぁ・・・・・・もうちょっと調べてみよう。

←クリックしてくれると嬉しいです。