読者です 読者をやめる 読者になる 読者になる

h-otterの備忘録

サーバー・プログラミング・自作PCなど自分のやったことを忘れないように書いていきます。お役に立てたら幸いです。

pam_mountを使ってsshをする方法

h-otter.hatenablog.jp

以上の記事で説明した通りホームディレクトリにcifsの共有フォルダをマウントすると、ssh鍵がうまく認証されない問題が起こります。gitlabのcloneができなくて長時間悩みました。

具体的に言うとcifsでマウントしたファイルはchmodでパーミッションを変更することができません。しかしssh鍵を利用するためには秘密鍵パーミッションを最低限にする必要があり、もし最低限に設定されてない場合以下のようなエラーが発生してアクセスすることができません。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/home/user/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /home/user/.ssh/id_rsa

今回はホームディレクトリに共有にアクセスするディレクトリを作成し、そこにマウントすることでsshキーのパーミッションの問題を解決しようと思います。

環境

クライアント

  • ubuntu 14.04.3 LTS
  • ホームディレクトリ構造
/home/user
├ .ssh
│ ├ id_rsa
│ ├ id_rsa.pub
│ └ known_hosts
└ private (ここにマウント)

ファイルサーバー

操作

pam_mountの更新

pam_mountを/home/user/privateにマウントするように変更します。

/etc/security/pam_mount.conf.xml

                <!-- Volume definitions -->
<volume
user="*"
server="file.domain.local"
path="private"
mountpoint="home"
fstype="cifs"
/>

<cifsmount>mount -t cifs //%(SERVER)/%(VOLUME)/%(USER) %(MNTPT)/%(USER)/private -o "user=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=\",\" OPTIONS)"</cifsmount>

<umount>umount %(MNTPT)/%(USER)/private</umount>

                <!-- pam_mount parameters: General tunables -->

<!-- 下のほう -->
<mkmountpoint enable="1" remove="false" />

skelの変更

pamを設定しておけば初ログイン時に/etc/skelをひな形にして、ホームディレクトリを自動的に作成することができます。詳細は前述した記事を参考にしてください。今回はskelを変更し、マウントする先のディレクトリを前もって作っておきます。

$ sudo mkdir /etc/skel/private

以上で設定は完了です。

注意点

最初にログインしたときには共有フォルダがマウントされません。2回目以降は問題なくマウントされることから、マウントの処理→ホームディレクトリの作成という順で処理しているため最初はマウント先のディレクトリが用意されておらずうまくマウントされないのだと考えています。対策を考えているので後日また記事にするかもしれません。