hack のためのネタ帳, etc,,,

未解決案件

状況

mount.cifs で username と password を入れるのが面倒臭いんだけど、credentials に平文で password 書いとくのはなんか抵抗がある。
そこで、何らかの keyring 系のサービスから credentials に username と password を流し込みたい。

ところが、bash の Process Substitution である <(list) を使って以下のようにしてみたところエラーになった。
$ sudo mount -t cifs //$HOTS/$DIR $MOUNTPOINT -ocredentials=<(echo -e "username=xxx\npassword=xxx")
error 2 (No such file or directory) opening credential file /dev/fd/63

これはどうも sudo しているのが悪いらしく、sudo なしだと
$ cat <(echo hello)
hello
のように大丈夫なのだが sudo を噛ませると以下のようにしてもエラーになる。
$ sudo cat <(echo hello)
cat: /dev/fd/63: そのようなファイルやディレクトリはありません

redirection を用いて /proc/$PID/fd 以下を拾えばどうにかなるかなと思って、以下のようにしてみるとこれは OK
$ echo $$; { ls -ld /proc/$$/fd; ls -l /proc/$$/fd; sudo awk '{print "["$0"]"}' /proc/$$/fd/3; } 3< <(echo hello)
4761
dr-x------ 2 kou kou 0  6月  5 10:07 /proc/4761/fd
合計 0
lrwx------ 1 kou kou 64  6月  5 10:07 0 -> /dev/pts/0
lrwx------ 1 kou kou 64  6月  5 10:07 1 -> /dev/pts/0
lrwx------ 1 kou kou 64  6月  5 10:07 2 -> /dev/pts/0
lrwx------ 1 kou kou 64  6月  5 10:08 255 -> /dev/pts/0
lr-x------ 1 kou kou 64  6月  5 14:53 3 -> 'pipe:[527107]'
lr-x------ 1 kou kou 64  6月  5 14:46 63 -> 'pipe:[527107]'
[hello]

ところが mount.cifs に食わせるとエラーになる
$ { sudo mount -t cifs //$HOST/$DIR $MOUNTPOINT -ocredentials=/proc/$$/fd/3; } 3< <(echo -e "username=xxx\npassword=xxx")
error 13 (Permission denied) opening credential file /proc/4761/fd/3

仕方がないので、素直に /dev/stdin を食わせてみるとこれは OK
$ sudo mount -t cifs //$HOST/$DIR $MOUNTPOINT -ocredentials=/dev/stdin < <(echo -e "username=xxx\npassword=xxx")

ここでふと気がついたのだが、Process Substitution、pipe、redirect では /etc/fstab から credentials に渡せないじゃないかと。

パスフレーズ解除にスクリプト使えたのは Apache - mod_ssl の話だったか?
/etc/fstab にスクリプトから生成したパラメータ渡すにはどうすればよいのだろう?

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます