今だったらAWSとかにまかせてしまって/etc/aliases
を触る機会なんてないかもしれんが、最近あったので書いておく。
課題
- WEBサーバーが複数ある状態
- 全てのサーバーで
/etc/aliases
が同じ状態であること - /etc/aliasesを書き換えることがある
上記を踏まえた結果、/etc/aliases
を共有化してしまおうとして奮闘した話。
/etc/aliasesを共有化する方法
サーバーには既に共有化ディレクトリ(マウントしてあるディレクトリ)がある状態。
- 案1:/etc/aliasesをシンボリックリンクにして、実体ファイルを共有ディレクトリに置く
- 案2:/etc/aliasesをハードリンクにして、リンク先を共有ディレクトリに置く
- 案3:/etc/sendmail.cf内のaliasesのPATHを変更し、共有ディレクトリに向ける。
それぞれ試してどんなエラーが出るのか検証してみた。
案1:/etc/aliasesをシンボリックリンクにして、実体ファイルを共有ディレクトリに置く
以下のように/etc/aliasesを共有ディレクトリに移し、/etc/aliasesはシンボリックリンクにする。
[root@vagrant etc]# ll | grep aliase lrwxrwxrwx 1 root root 36 3月 1 11:23 aliases -> /home/shared/aliases
newaliases
を実行するとエラーがでる
[root@vagrant etc]# newaliases hash map "Alias0": unsafe map file /etc/aliases.db: Symbolic links not allowed WARNING: cannot open alias database /etc/aliases Cannot create database for alias file /etc/aliases
結論:ダメ。/etc/aliasesをシンボリックリンクにするとnewaliasesできない。
ただ実はこれ、無理やり解除する方法がある。
/etc/sendmail.cfに下記を記載
O DontBlameSendmail=mapinunsafedirpath
これはインフラの鬼と勝手に呼ばさせて頂いている人から聞いた。ソースを直接見て発見したらしい。すげえ。
その人が送ってくれた参考リンクも載せておく。
https://docstore.mik.ua/orelly/other/Sendmail_3rd/1565928393_ch24-65639.html
ただ、その人も言っていたがセキュリティ的にどうなの?的な話もあるので判断する時は注意しておいたほうが良いだろう。
案2:/etc/aliasesをハードリンクにして、リンク先を共有ディレクトリに置く
案1と同じくsharedに実体ファイルを置いた状態でハードリンクを貼る
[root@vagrant etc]# ln /home/shared/aliases ln: `/home/shared/aliases' へのハードリンク `./aliases' を作成します: 無効なクロスデバイスリンクです
結論:ダメ。マウントしているディレクトリorパーティションが異なるものへのハードリンクは貼れない。
案3:/etc/sendmail.cf内のaliasesのPATHを変更し、共有ディレクトリに向ける。
/etc/sendmail.cfを編集
# location of alias file # O AliasFile=/etc/aliases # コメントアウト O AliasFile=/home/shared/aliases # aliasesのPATHを変更
newaliase
を実行するとエラーがでる。
[root@vagrant etc]# newaliases WARNING: World writable directory /home/shared hash map "Alias0": unsafe map file /home/shared/aliases.db: World writable directory WARNING: cannot open alias database /home/shared/aliases Cannot create database for alias file /home/shared/aliases
結論:ダメ。aliasesを置いているディレクトリ権限が777だとセキュリティの観点から弾いてしまう。
案3-2:sharedの中に権限755ディレクトリを作成し、その中にaliasesを置く
下記のような構造
/home/shared # 権限777 |_sendmail # 権限755のディレクトリ |_aliases
newaliases
を実行
[root@vagrant etc]# newaliases WARNING: World writable directory /home/shared hash map "Alias0": unsafe map file /home/shared/sendmail/aliases.db: World writable directory WARNING: cannot open alias database /home/shared/sendmail/aliases Cannot create database for alias file /home/shared/sendmail/aliases
が、、、ダメ、、、。
どうやらnewaliases
は道中に権限777のディレクトリがあると弾かれてしまうよう。
/755_dir # 権限755 |_777_dir # 権限777のディレクトリ |_sendmail # 権限755 |_aliases sendmail.cf # location of alias file O AliasFile=/755_dir/777_dir/sendmail/aliases [root@vagrant etc]# newaliases WARNING: World writable directory /755_dir/777_dir hash map "Alias0": unsafe map file /755_dir/777_dir/sendmail/aliases.db: World writable directory WARNING: cannot open alias database /755_dir/777_dir/sendmail/aliases Cannot create database for alias file /755_dir/777_dir/sendmail/aliases
失敗。
下記のように道中に権限777のディレクトリがなければnewaliases
成功する。
/755_dir # 権限755 |_sendmail # 権限755 |_aliases sendmail.cf # location of alias file O AliasFile=/755_dir/sendmail/aliases
結論
newaliases
の注意点
- aliasesをシンボリックリンクにすることはできない
- 権限777のディレクトリにaliasesを配置することはできない
なので権限755で新たに共有ディレクトリを作成し、aliasesを設置。sendmail.cfを編集し、作成したディレクトリ内のaliasesを参照するようにする。ならばイケる。別に755じゃなくても構わない。777以外であればOK。
まあそもそもこんなことをしないよう他で解決できないかを考えたほうが良いと思う。