pam_mountを使ってsshをする方法
以上の記事で説明した通りホームディレクトリに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 (ここにマウント)
ファイルサーバー
- Windows Server 2012 R2
- DNS: file.domain.local
- 共有パス: 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回目以降は問題なくマウントされることから、マウントの処理→ホームディレクトリの作成という順で処理しているため最初はマウント先のディレクトリが用意されておらずうまくマウントされないのだと考えています。対策を考えているので後日また記事にするかもしれません。