hack my life: Linux: 2007年2月アーカイブ

Linux: 2007年2月アーカイブ

Tracのサイトのヘッダーロゴを変えようと思ったんですが、何処で変えるのかにちょっと悩ました。
プロジェクトホーム/conf/trac.ini に [header_logo]って項目があって此処を変えればいんですが、問題は何処に画像ファイルを置けばいいか?って所です。

そこでデフォルトのヘッダーロゴが何処にあるかfindしてみたところ、
/usr/share/trac/htdocs下にありました。

・・・でもコレ、グローバル設定だよねぇ。
そこには入れたくないなぁ・・・と思っていたら、
プロジェクトホーム/htdocsというフォルダが有ることを発見。
此処に画像を置いてtrac.iniを編集

[header_logo]
alt =
height = -1
link = http://192.168.11.6/main/
src = common/trac_banner.png
width = -1

srcを変えれば良いわけですが・・・common?
そんあフォルダないぞ。Apacheのtrac.confでも定義してないし、trac.cgiで定義されているんだろうなぁ。

結局、マニュアル読んでいたら、

commonを指定すると、グローバルの/usr/share/trac/htdocsを見に行って、
プロジェクトホーム/htdocsを見に行くときは、site/画像ファイル名と書いてあげれば良いことを発見。

[header_logo]
alt =
height = -1
link = http://192.168.11.6/main/
src = site/hoge.png
width = -1

と書いておいた。なるほどぉ。
cssとかも同様に行けるのかな?

Tracをインストールしたものの、ロードマップが編集できなかったり、あれこれ制限があって、
なんでだろう?とか思ってたら、permissionの設定を忘れていたらしい。

結構こまかく設定できるようで、

リポジトリブラウザ

BROWSER_VIEW リポジトリブラウザ でディレクトリの一覧表示を行う
LOG_VIEW リポジトリブラウザ でファイルとディレクトリのリビジョンログを表示する
FILE_VIEW リポジトリブラウザ でファイルを表示する
CHANGESET_VIEW リポジトリへのチェックイン を表示する

チケットシステム

TICKET_VIEW 登録済みの チケット を表示し、 チケットクエリ を実行する
TICKET_CREATE 新規 チケット を登録する
TICKET_APPEND チケット にコメントや添付ファイルを追加する
TICKET_CHGPROP チケットの概要フィールドを除いた チケット 属性(優先度, 担当者, キーワードなど) を変更する
TICKET_MODIFY TICKET_APPEND と TICKET_CHGPROP の両方に加え、 チケット の解決を可能にする
TICKET_ADMIN 全ての TICKET_* 権限に加え、チケットへの添付ファイルの削除や
チケットの概要フィールドの変更を可能にする

ロードマップ

MILESTONE_VIEW マイルストーンを表示する
MILESTONE_CREATE 新しいマイルストーンを作成する
MILESTONE_MODIFY 既に存在するマイルストーンを編集する
MILESTONE_DELETE マイルストーンを削除する
MILESTONE_ADMIN 全ての MILESTONE_* 権限を持つ
ROADMAP_VIEW ロードマップ を表示する

レポート

REPORT_VIEW レポート を表示する
REPORT_SQL_VIEW レポート の SQL を表示する
REPORT_CREATE 新しい レポート を作成する
REPORT_MODIFY 既に存在する レポート を編集する
REPORT_DELETE レポート を削除する
REPORT_ADMIN 全ての REPORT_* 権限を持つ

Wiki システム

WIKI_VIEW 既に存在する Wiki ページを表示する
WIKI_CREATE 新しい Wiki ページを作成する
WIKI_MODIFY Wiki ページを編集する
WIKI_DELETE Wiki ページと添付ファイルを削除する
WIKI_ADMIN 全ての WIKI_* 権限に加え、読み込み専用 ページを管理する

その他

TIMELINE_VIEW タイムライン を表示する
SEARCH_VIEW 検索 の表示と実行
CONFIG_VIEW Trac について のページに追加して、現在のコンフィグやインストールされている
プラグインの表示を可能にする


なんてあります。

とりあえず全権限はTRAC_ADMINで付与できるようなので、

$ trac-admin /home/trac/project permission [ユーザー名] TRAC_ADMIN

とかしておいた。

Tracはスウェーデンにある EdgeWall Software が開発した プロジェクト管理ツールです。 Python で作成された Web アプリケーションであり、ソフトウェア開発のプロジェクト管理に特化しています。
最近ではOpenSourceプロジェクトをTracで管理する事が非常に多いです。
バグ情報や、変更依頼をチケットと呼ぶもので管理して、タスクやマイルストーンとして管理出来ます。
ちょっと使ってみただけですが、かなり良い感じです。また、SVNリポジトリのブラウザ機能まで付いています。

インストール

yumを使ってインストールします。
yumでインストールすると日本語化が一部されません。
Trac日本語化の準備で紹介している日本語版を最初から入れましょう。

$ yum -y install trac

Trac日本語化の準備

先に日本語化の準備をしておきます。
日本語化パッチはインタアクト株式会社さんから出ていますので、それを使わせて頂きました。


解凍したフォルダ内の、templatesと、wiki-defaultフォルダを/usr/share/trac/に移動するだけです。

最近のバージョンは日本語化パッチはなく、trac本体を含めているようです。
trac-0.10.3-ja-1というファイルをダウンロードして、付属のINSTALLに書いてある通り、インストールします。

$ python ./setup.py install

tracサイトの作成

$ mkdir /home/trac
$ trac-admin test initenv
 Project Name => [プロジェクト名]
 Path to repository => [ローカルリポジトリパス]

他にも聞かれますがデフォルトにしました。
DBはデフォルトでSQLiteを使うようですがPostgreを使う事もできるようです。今回はデフォルトにしてあります。

Apatchから使いたい場合はchown忘れずに。
seLinux使っているかたは、chconを。

$ chown -R apache:apache /home/trac
$ chcon -R system_u:object_r:httpd_sys_content_t /home/trac

tracdで動作確認。
$ tracd --port 8080 /home/trac/test

http://localhost:8080/にアクセスしてtracの画面が出れば成功です。
ここで、[パス] does not appear to be a Subversion repositoryとか怒られた方はSVNリポジトリの設定が間違っていると考えられます。リポジトリはローカルのパスを設定します。

"/home/trac/test/conf/trac.ini"が設定ファイルですので、ここを参考に設定を見直してください。他にも色々設定できるので、いじってみるとイイかも。

Apacheでtrac公開

mod_pythonが入ってい無ければインストール

$ yum -y install mod_python

/etc/httpd/conf.d/trac.confの編集

最終行に以下を追加

$ vim /etc/httpd/conf.d/trac.conf
ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi
<Location "/main">
  SetHandler mod_python
  PythonHandler trac.web.modpython_frontend
  PythonOption TracEnv /home/trac/BizTrip
  PythonOption TracLocale "ja_JP.utf8"
  PythonOption TracUriRoot /main
</Location>
<Location "/main/login">
  AuthType Basic
  AuthName "Trac Autentication"
  AuthUserFile /home/trac/.htpasswd
  Require valid-user
</Location>
<Location "/main/svn_repos">
  DAV svn
  SVNPath "/home/svn/test"
  AuthType Basic
  AuthName "svn Autentication"
  AuthUserFile /home/svn/test/.htpasswd
  Require valid-user
</Location>

この例では/home/svnにリポジトリが有るものと想定しています。

Apacheを再起動

$ /sbin/servise httpd restart

Apache経由でアクセスしてみましょう。
上の設定ならhttp://localhost/mainですね。

Subversion(以下svn)はバージョン管理ツールです。
CVSとかVSSなどと同様、複数人で開発を行う際に、バージョン管理やロック、マージ、チェックアウト機能を持つ必須ツールです。
WebDAVを使って運用するのが定番なので、WebDAVの設定も同時に行います。

svn導入

初めはとりあえず targeted ポリシーでの SELinux の運用を考えます。
SELinuxといっても、selinux-policy-targeted-1.17.30-2.34 からは apache に関する制限もゆるくなったため、 標準の状態でもポリシーの変更なしに利用できるになっているようです。

まずは selinux-policy-targeted を最新の状態に更新します。

$ yum -y update selinux-policy-targeted

WebDAV/Subversion 関連のパッケージを一括インストール。

$ yum -y install mod_dav_svn

リポジトリ作成

次に管理DBを作成してゆきます。
Apachから見える用にしたい+tracを使いたいので、chownとSELinux用にchconを忘れずに行います。

$ svnadmin create --fs-type=fsfs /home/svnroot
$ htpasswd -cm /home/svnroot/.htpasswd test
パスワードの設定を求められる。
$ chown -R apache:apache /home/svnroot
$ chcon -R system_u:object_r:httpd_sys_content_t /home/svnroot

最後に、WebDAV の設定。設定ファイルは、/etc/httpd/conf.d/subversion.conf ですので、 コメントを消して設定を有効にします。

$ vim /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
#
# Example configuration to enable HTTP access for a Subversion
# repository, "/home/svnroot".  This repository must be readable
# and writable by the 'apache' user.
#
<Location /svn/repos>
   DAV svn
   SVNPath /home/svnroot
   # Limit write permission to list of valid users.
   <LimitExcept GET PROPFIND OPTIONS REPORT>
      # Require SSL connection for password protection.
      # SSLRequireSSL
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /home/svnroot/.htpasswd
      Require valid-user
   </LimitExcept>
</Location>

これで一通りの設定は完了です。httpd を再起動しましょう。

$ service httpd restart

http://localhost/svn/repos/につないで、svnの画面が出れば成功です。

自宅サーバーを公開してみました。
とはいってもグローバルIPは1アドレス年間1万以上するので、ちょっと敷居が高い。
そこでダイナミックDNSを遣って公開することにしました。


ダイナミックDNSとは

一般家庭でネットに接続している方はどこかのプロバイダと契約していると思うのですが、ネットにつないでいる以上、プロバイダからグローバルIPが割り当てられています。原理的には此のIPアドレスを打てば、グローバルIPがなくても、外から自宅のサーバーにつなぐ事が可能です。

問題は、時折此のIPアドレスが変わってしまう事です。
此のIPを固定に出来れば問題はないのですが、別の方法も有ります。ドメイン(hoge.example.comのような文字でIPを表す)をDNS(ドメインとIPアドレスを結びつけるサービス)に登録して、IPアドレスが変わる度に更新してあげれば良いわけです。
それがダイナミックDNSです。

無料でサービスを公開しているところもありますので、こちらのサイトを参考にしてみてください。


ダイナミックDNSに登録


今回はDynDNSというサイトを使うことにしました。

リンクをたどるとDynDNSのホームページが開くと思いますが、サイト右上のCreate Accountをクリックして、必要な項目を入力してアカウントを作成してください。といっても名前とメールアドレスとパスワードと希望するドメイン位なので、非常に簡単です。

Create Accountボタンを押したら、登録確認メールが来るまで待ちましょう。

登録確認メールが来たら、一番上のリンクをクリックしてアカウントをアクティブにします。
そのあと、トップページから先ほど登録したアカウントとパスワードでログインしてください。

ログインしたら左側のメニューにあるMyServiceをクリックして、Host Level Servicesの横にあるAdd Host Servicesをクリック。

追加画面でDynamicDNSを登録してドメインを作成してください。
以上でDDNSの設定は終わりです。自分が使っているグローバルIPは自動的に取得してくれます。


DiCEでDDNSの自動更新

DDNSは登録したものの、自宅サーバーのグローバルIPが変わった場合に通知するソフトが必要です。
DiCEや、ddclientが有名ですが、今回はDiCEをFedora Coreで使ってみます。

こちらから最新版をダウンロードしてLinux版をダウンロードします。適当なフォルダで解答してください。

DiCEを起動します。

# ./DiCE/diced

対話モードに入るのでコマンドを入力して行きます。
わからなくなったらとりあえず"?"を入力しましょう。

:?
*** 起動オプション ***

diced [-s|-d|-h|-e] [-b] [-l]

-s 起動と同時に開始します
-d 起動と同時にバックグラウンドで開始します
-h コマンドオプションを表示します
-b イベント実行時にビープ音を鳴らします
-l ログを作成します
-e 指定のイベントを実行して終了します


*** コマンド一覧 ***

exit DiCEを終了します
start DiCEを開始します
startd DiCEをバックグラウンドで開始します
setup DiCEの環境設定を行います
list 登録済のイベント一覧を表示します
add イベントを追加します
ed[it] <番号> イベントを編集します
del <番号> イベントを削除します
en[able] <番号> イベントを有効にします
dis[able] <番号> イベントを無効にします
ev[ent] <番号> イベントの情報を表示します
ex[ec] <番号> イベントを今すぐ実行します
logcr ログをクリアします

:add
新しくイベントを追加します

DynamicDNSサービス名を入力してください
"?"で対応しているサービスを一覧表示します
(P)戻る
対応しているサービスを表示してみる
>?
ZoneEdit unicc MyIP.US DtDNS
BIGLOBE dnip Now.nu StaticCling
theBBS ysdn Netservers dyns
Dynamx GetmyIP onamae.com IPDYN
yi my-domain MyDNS.JP JPN.ch
instat VALUEDOMAIN cheapnet Dyn.ee
DNS2Go dyndns @nifty SelfHOsT
ddns.ca ZENNO.COM p2p miniDNS
MyServer todd Earth ddo.jp
livedoor dhs ieServer dynDNS.it

=================================================
新しくイベントを追加します

DynamicDNSサービス名を入力してください
"?"で対応しているサービスを一覧表示します
(P)戻る
>dyndns
-------------------------------------------------
<< dyndns.org >>
URL: http://www.dyndns.org/
*** 情報 ***
dyndns.orgのオプションについて
「オフライン」オプションは、
dyndns.orgドナー登録者のみ利用できます。
=================================================
ドメイン名を入力してください
"?"でドメイン一覧を表示します
(P)戻る
ドメイン一覧を表示
>?
dyndns.org homeip.net ath.cx itacs.to
dnsalias.net dnsalias.org dyndns.info dyndns.tv
dyndns.ws homedns.org homeftp.net homeftp.org
homelinux.com homelinux.net homelinux.org homeunix.com
homeunix.net homeunix.org kicks-ass.net kicks-ass.org
serveftp.net serveftp.org
=================================================
ドメイン名を入力してください
"?"でドメイン一覧を表示します
(P)戻る
Dynamic Network Services(DynDNS.org)で設定したドメインを入力
>homelinux.com
=================================================
ホスト名を入力してください
(P)戻る
ホスト名を入力
>hoge
(このホスト名とドメイン名をくっつけたものがDNSです)
=================================================
ログインユーザ名を入力してください
(P)戻る
(DynDNSのログインするユーザ名を入力します)
>xxxxxxxxxx
=================================================
ログインパスワードを入力してください
(P)戻る
(DynDNSのログインパスワードを入力)
>xxxxxxxxxx
=================================================
登録するIPアドレスを入力してください
空白にすると現在のIPアドレスを自動検出します
(P)戻る
IPアドレスを自動検出させる為何も入力しない
>
=================================================
このイベントに題名を付けてください
(P)戻る
何でもかまいません。分かりやすいイベント名を入力します
>DynDNS_Update
=================================================
このイベントを実行するスケジュールを設定します
-------------------------------------------------
実行する頻度を指定してください (番号入力)
(0)1回のみ (1)1日1回 (2)1週間に1回 (3)1ヵ月に1回
(4)その他の周期 (5)IPアドレス変化時 (6)起動時
(P)戻る
> 5
-------------------------------------------------
IPアドレスがあまり変化しない環境の場合、更新せずに一定期間を過ぎると
アカウントを削除されてしまうことがあります
IPアドレスの変化が無い時に実行する間隔を指定してください
(0)7日毎 (1)14日毎 (2)21日毎 (3)28日毎
(4)35日毎 (5)56日毎 (6)84日毎
(P)戻る
> 0
=================================================
詳細オプションを設定します
-------------------------------------------------
[ ワイルドカード ]
(0)OFF (1)ON
番号>1
ワイルドカード(www)を有効にすることにより、「www.linux.homeip.net」になります
-------------------------------------------------
[ メールエクスチェンジャ ]
入力>
-------------------------------------------------
[ バックアップMX ]
(0)NO (1)YES
番号>0
-------------------------------------------------
[ オフライン ]
(0)NO (1)YES
(0)NOを選択
番号>0
-------------------------------------------------
[ システム ]
(0)dyndns (1)statdns (2)custom
番号>0
=================================================
このイベントを有効にしますか? (Y/N)
(イベントの有効/無効は"EN/DIS"コマンドで切替えられます)
有効にする
>y
=================================================
イベントを保存しますか? (Y/N)
保存する
>y
イベント"DynDNS_Update"を保存しました
=================================================
:

イベントリストを表示
:list
(No.) (イベント名) (スケジュール) (次回予定)
0 * DynDNS_Update IPアドレス変化時 (7日毎) 02/28 21:14
イベント詳細を表示
:ev 0
-------------------------------------------------
[イベント名 ] DynDNS_Update
[状態 ] 有効
[DNSサービス ] dyndns
[更新ホスト ] hoge.homelinux.com
[ユーザ名 ] xxxxxxxxxx
[IPアドレス ]
[スケジュール ] IPアドレス変化時 (7日毎)

[次回更新日時 ] 2005年2月21日、21:14:06
[最終実行日時 ] 1899年12月30日、0:00:00
[最終更新IPアドレス] *
[最終更新結果 ] コマンドが実行されました
(ID:000000)
-------------------------------------------------

:exit


さて、自動的にIP更新にしてもIPがとれない方もいるかもしれません。
私がそうでした。

そこで、設定をもう一つします。

# ./DiCE/diced
:setup
IPアドレスの検出方法を指定してください
(0)自動検出
(1)ローカルのネットワークアダプタから検出
(2)外部のスクリプトから検出
>2
------------------------------------------------
スクリプトのURLを入力してください
(www.ugtop.comの確認くんを使わせていただきます。)
>http://www.ugtop.com/spill.shtml
------------------------------------------------
プライベートIPアドレスも検出対象ですか?(Y/N)
>N
------------------------------------------------
IPアドレスの検出をテストしますか?(Y/N)
>Y
検出IPアドレスxx.xxx.xx.xxx
------------------------------------------------ 

デーモンの起動

デーモンの起動と自動起動を設定します。

# ./DiCE/diced -d
# vi /etc/rc.d/rc.local
最終行に以下を追加
[DiCEをおいたディレクトリ]/DiCE/diced -d -l

以上で終了です〜。
あとはモデムルーターにスタティックIPマスカレードをしていしてあげればOKです。
ルーターによって設定が違うので、詳しくはお使いのルーターのマニュアルを読んでください。

別の所に書いていた日記なんですが、エライ苦戦したので、Blogにアップしておきます。第二段。

レシピはSSHの多段階接続です。
ちなみにsshdはOpenSSHです。

なんというか、networkの華がある機能ですねぇ。


が。。。。

ssh+proxycommandに大苦戦。

構成としては、


クライアント -----> 踏み台sshサーバ(a) -----> 目的のサーバ(b)

って事がやりたい訳です。
なんでこんな面倒な事するかというと、
直接目的のサーバへはセキュリティ上sshを許可したくない。
かといって、一端踏み台サーバにログインして、目的のサーバにsshすると、踏み台サーバに全ての公開鍵を持っていなくてはならないので、セキュリティ上問題があるから。

で対策として考えたのはssh -D かProxyCommandの2通り。

ssh -Dのダイナミックルーティングだと、踏み台サーバに鍵を持っていないといけないらしいので、却下。ProxyCommandで対応することにした。

やり方は結構単純で、
クライアントのlinux内に〜/.ssh/configというファイルを作っておいて、
こんな感じに記入。

Host hoge.example.com
  ProxyCommand ssh -l [踏み台サーバのユーザ] piyo.example.com nc %h %p

コレでhoge.example.comにsshすると、piyo.example.com へ ssh 接続して nc コマンドを起動します。
nc コマンドの引数には %h と %p を指定していますが,これは (b) を起動する際に,(a) を起動したときの接続先のホスト名とポート番号に置き換えられます。
この設定なら %h は hoge.example.com に,%p は 22 に置き換えられます。

問題はsshを全て公開鍵認証にしてあること、
踏み台サーバも公開鍵がないとアクセスできないので、
実際sshはこうやって打ちます。

# ssh -l [目的サーバのユーザ] hoge.example.com -i [公開鍵のパス]

この公開鍵は、踏み台サーバ+目的のサーバ双方で同一の鍵にして有ります。(別々に指定するやり方もあるかも・・・)

これから実験する予定な事

1 踏み台と目的サーバの公開鍵を分けられるか?
2 分けられない場合パスフレーズだけでも別にできるか?
3 クライアントがwinの場合はどうやる?

辺りです。1はよく解らないのですが、2はいけそうな気がします。
2段階目の接続のときにもパスフレーズ聞かれましたから。
windowsで同じことをやる方法はソフトゥエア依存なので、これから調べます。PuTTyにはそういう機能があるらしいけど。。。どうなだろ?

ちなみに調べていくうち知ったTips

  • sshコマンドで公開鍵を指定しない場合、〜/.ssh/identityというファイルを探しに行く。ファイルが見つかった場合、コレを公開鍵として使う。通常のパスワード認証のサーバにアクセスしても問題はない。(鍵のパスフレーズを無駄に入力させられるだけ)この方がオススメ。
  • 公開鍵のパーミッションは600にしておくべし。他のユーザが読めるようだとエラーになる。
  • sshでつながらない場合はssh hoge.example.com -vとやるとデバック出力が見れる。
  • ログが見たい場合は/var/log/secure。ただほとんど接続先のログに吐かれる(あたりまえか・・)

はぁ〜、しんどかった。 ヽ(´Д`;)ノアゥア...

別の所に書いていた日記なんですが、エライ苦戦したので、Blogにアップしておきます。

レシピはOpenPNEへ携帯から日記投稿機能の設定です。

以前会社でSNSを構築した際に、
SNSにOpenPNE,メールサーバーにPostfix + Dovecot + Procmailで構築したんですが、携帯からの投稿機能を最後の最後に回していて、すっかりわすれていたんですね。

実際に投稿しようとしてエラーになって、初めて思い出したんです。迂闊。
「こんなのちょろいだろ〜」とか思っていたのですが・・・

       大 苦 戦 ヽ(´Д`;)ノアゥア...

誰かが二の鉄を踏まないようにアップします。

まず構成を書いておきましょうか

メールサーバはPostfixを使っていて、受信用にDovecot。メール振り分けにProcmailを使っています。

受信メールをユーザーのメールボックスへ送信設定

SNSを立てた時に、送信側は設定していたんですけど受信側が手付かずだったので、まずこのマシンのユーザーにメールが届くように設定しました。

早速此処からトラブルです。/etc/log/mail.logを見ると、

 
(expanded from ): can't create user output file. Command output: procmail: Renaming bogus mailbox
"/var/mail/snsadmin" info "/var/mail/BOGUS.snsadmin.Xj0y" procmail:
Couldn't create "/var/mail/snsadmin" procmail: Couldn't chdir to
"/home/snsadmin/Maildir" procmail: Couldn't create or rename temp file
"./tmp/1162346941.5352_0.sns.example.com"

なんて事をおっしゃる。
要するに書き込み権限が無いよって言われているんだが・・・
Procmailって何の権限で動いているんだ!?

rootではないな・・・と思い。手当たり次第Mailboxをpostfix : postdropに設定して回るもダメ・。
仕方ないので、秘奥義" chmod 777 *" を発動。・・・全然ダメ。

行き詰まったので、google先生に質問すると、procmailrcが怪しい。
メーリングリストとか漁っていたら、書くユーザーのホームディレクトリに.procmailrcを書くと各ユーザーごとに反映されるらしい。

というわけで、実際に

SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
LOGFILE=$HOME/procmail.log

というファイルをホームディレクトリに置いてみたら、あっさりOK。デーモンがユーザー単位でrc読んでいるって感覚がよくつかめてないけど、とりあえず解決。

各ユーザー宛のメールは、ユーザの権限で書き込みされるようだ。具体的に言えば、hogeユーザーのMaildirにはhoge:hoge権限でOK

OpenPNEの携帯投稿スクリプトに受け取ったメールを転送

次に実際に携帯メールでsnsに投稿してみると・・・
あて先が[b2-1f.....386397@sns.example.com]のように乱数がユーザー名になっている・・・

これは参った。しかも全員違うらしい。

メール投稿の仕組みはメールの内容を "/OpenPneルート/bin/mail.php"に渡してあげればよいのだが・・・

メールアドレスのユーザー名と、システムのユーザー名をマッピングしているのがエイリアス (/etc/aliases または /etc/postfix/aliases)なのだけど、まさか此処に全ユーザー入れて、システムに全ユーザー登録するのも現実的でないし、毎回ユーザー名変わったらそれだけでアウト。

なんとかユーザー名以外で取りたい。
始めは正規表現でいけないかと思ったのだけれど、上手く行かない。regexpテーブルって有るんだけどなぁ・・・(´・ω・`)ショボーン

今度はvirtualドメインを使ってみるコレはいけそう!
と思いきや今度はvirtualドメインだとコマンドが投げられない。
・・・(,,゚Д゚)† (この辺りで悶絶)

この後あれこれ試して、ようやく見つけた解決法が、

これ

/etc/postfix/main.cf
virtual_alias_maps = hash:/etc/postfix/virtual
alias_maps = hash:/etc/aliases

/etc/postfix/virtual
@sns.example.com sns_mailphp

/etc/aliases
sns_mailphp: "|/usr/bin/php /var/www/sns/bin/mail.php"


要するに何をしているかというと、
virtual_host_mapsで/etc/postfix/virtualを読み込んで、此処で@sns.example.comドメイン宛に飛んできたメールをsns_mailphpという架空のユーザーに割り当て。
そのあとaliasesをlookupして、sns_mailphpがマッピングしている"|/usr/bin/php /var/www/sns/bin/mail.php"コマンドを呼び出す・・と。
(補足:ちなみにsns_mailphpというユーザーをOSに作成する必要はない)

こうしてみると結構単純なんだけど、知らなかったからえらい時間食った。

・・・やれやれ。

OpenSSH は、SSH プロトコルを使用するネットワーク接続ツールの フリーな 実装です。最近のLinuxディストリにはデフォルトで入っているものも多く、Fedoraにも標準で搭載されています。今回はそのまま使う事にします。

インストール

openssh-serverのインストール

# yum -y install openssh-server

openssh-clientsのインストール

# yum -y install openssh-clients

OpenSSHの設定

sshd_configの変更

# vi /etc/ssh/sshd_config

ルートログインの禁止
#PermitRootLogin yes
を変更
PermitRootLogin no

パスワード認証を禁止(鍵方式にするため)
#PasswordAuthentication yes
#PermitEmptyPasswords no
を変更
PasswordAuthentication no
PermitEmptyPasswords



SSH2鍵の作成


さて鍵の作成に移るわけですが、此処でちょっと注意点というか勘違いしやすい所を一つ。
一般的にSSHの鍵はクライアントで作成した公開鍵を、SSHサーバー側のauthorized_keysに登録するものです。
初め設定したときは、勘違いしていて、サーバーで生成した鍵をクライアントに持って行くものだと思っていました。其れも不可能ではないのですが、クライアントによっては繋がらない可能性が有ります。

Unix系OSでしたらopenssh-clientsを使って生成すればよいでしょうし、
Windows系なら,Puttyやpoderosaなどのsshクライアントで生成出来ます。

此処では、OpenSSHでの鍵生成方法を記載します。

鍵を作成するユーザーになる。


# su - hoge

rsa方式の鍵作成

# ssh-keygen -t rsa
デフォルトの出力先に出力するか確認。

何も入力しないでエンターOKです。
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa): エンター

鍵に設定するパスフレーズ入力を求められます。
Enter passphrase (empty for no passphrase): パスワード入力
Enter same passphrase again:パスワード再入力


ユーザーディレクトリの.sshディレクトリの下の、
id_rsaが秘密鍵、id_rsa.pubが公開鍵です。

この公開鍵をサーバーのログインユーザーに設定します。
リモートログインしたいユーザーでサーバーに入ってください。
公開鍵はUSBやFTPでサーバーにアップしましょう。
置き場はユーザールート/.ssh/です。

# cd 〜/.ssh

ユーザーディレクトリから公開鍵をauthorized_keysに変更します。


# cat id_rsa.pub >> authorized_keys

鍵が第三者から読める用だと警告メッセージがでますので、
鍵のパーミッション変更しておきます。

# chmod 600 .ssh/authorized_keys


使った公開鍵を削除


# rm -f .ssh/id_rsa.pub

sshdの再起動


# sudo /etc/rc.d/init.d/sshd restart


これでクライアントから公開鍵認証でssh接続できるはずです。
ここではCLIからの接続方法を書いておきます。

# ssh -l ログインユーザー名 -i 秘密鍵のパス 接続先サーバーIPアドレス

鍵の生成で聞かれたパスフレーズを聞かれますので入力すれば繋がります。

Fedora Core6をサーバーとして公開するための最低限のセキュリティメモ第2段。
念のためウィルス対策ソフトを入れます。
今回はClam AntiVirusというソフトを使います。

ウィルス対策ソフト Clam AntiVirusのインストール

本体のインストール

# yum -y install clamav

続いてウィルス定義ファイルアップデータのインストールをします。

# yum -y install clamav-update

設定ファイルを変更します。

# vim /etc/freshclam.conf

# Comment or remove the line below.
Example

Exampleをコメントアウト

# Comment or remove the line below.
#Example


定義ファイルの最新化

# freshclam

ウィルスチェックのテスト

# clamscan --log=/var/log/clamav.log --infected --remove --recirsive /home/root

----------- SCAN SUMMARY -----------
Known viruses: 87363
Engine version: 0.88.7
Scanned directories: 1
Scanned files: 5
Infected files: 0
Data scanned: 3.30 MB
Time: 2.009 sec (0 m 2 s)


Infected filesが0ならば、ウィルスは検出されなかった事を表しています。

起動用shellの作成と登録

起動用shellの作成してcloneに登録しておくと良いでしょう。

# vim /root/clamav.sh

 #!/bin/sh
echo "Job Name (clamav.sh)"
echo "  開始(`date +"%k時%M分%S秒"`)"

rm -f /var/log/clamav.log > /dev/null 2>&1
freshclam --quiet
clamscan --log=/var/log/clamav.log --infected --remove --recursive / > /dev/null 2>&1
grep FOUND /var/log/clamav.log
rm -f /var/log/clamav.log > /dev/null 2>&1

echo " 終了(`date +"%k時%M分%S秒"`)"


シェルをrootのみ実行可能にしてcloneに登録

# chmod 700 /root/clamav.sh

# crontab -e
00 01 * * * /root/clamav.sh | nkf -n


コレでウィルス対策を自動的に毎日深夜1時に行ってくれます。

自宅のPCにFedora Core6入れて、DDNSでそとから繋げるようにしようと考えています。

最近会社のサーバーをあれこれいじっていたので、大分設定は慣れたのでメモ代わりに書いていきます。

インストールが終わったら初期設定をしていきます。


.bash_profileの変更


デフォルトだと/usr/sbin/にpathが通っていないので、.bash_profileにパスを加えます

# vim 〜/.bash_profile

PATH=$PATH:$HOME/bin

最後にパスを追加


PATH=$PATH:$HOME/bin:/usr/sbin



sudoの登録


sudoの設定です。
初めの設定はrootでしていくのですが、後々はsudoを使ってrootにならずにroot権限でコマンドを実行するようにしてゆきます。
viなどのエディタで/etc/sudoersを編集も出来ますが、visudoという専用のコマンドがあって構文チェックもできるので、こちらを使います。

# visudo

root ALL=(ALL) ALL

下記一行を追加

hoge ALL=(ALL) ALL

これでhogeユーザーはコマンドの前にsudoを付ければ、rootと同じようにコマンドを実行できます。
またコマンド単位でパスワードなしでroot権限と同じように実行するにはこんな風に記述も出来ます。

hoge ALL = (root) NOPASSWD: /usr/bin/vim

sshで接続出来るユーザーの限定

sshはセキュアなプロトコルですが、ちゃんと設定しないと危険です。 sshでrootにアクセス出来ないようにするべきです。 sshdファイルを編集しておきましょう。

# vim /etc/pam.d/sshd

最終行に以下を追加

account required pam_access.so

次にaccess.confを編集します。

vim /etc/security/access.conf


最終行に以下を追加します。

-:ALL EXCEPT wheel:ALL

上記でwheelグループのユーザーのみsshでアクセス可能になります。
wheelの代わりにユーザー名単位でも設定できますが、一部のディストリビューションでは有効にならないようです。

ユーザーのセカンダリグループにwheelを追加するのですが、ついでにやっておくことが有ります。

rootになれるユーザー制限

どのユーザーでもrootに慣れるのは個人使用なら問題ないですが、 複数ユーザーで使う場合は明確にrootに慣れるユーザーを制限すべきです。

login.defsを編集することで変更できます。

# vim /etc/login.defs

以下を追加。

SU_WHEEL_ONRY yes

続いてpam.dのsuを変更

# vim /etc/pam.d/su

#auth required pam_wheel.so use_uid

コメントを外す

auth required pam_wheel.so use_uid

最後にユーザーのセカンダリグループにwheelを追加します。

# usermod -G wheel hoge

ここまでが基本設定です。
といってもまだまだ危ないので、 sshを公開鍵認証にしてから公開しましょう。

このアーカイブについて

このページには、2007年2月以降に書かれたブログ記事のうちLinuxカテゴリに属しているものが含まれています。

前のアーカイブはLinux: 2007年1月です。

次のアーカイブはLinux: 2007年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.0

アドセンス

MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore
MoMAstore
MoMAstore
MoMAstore