2018年1月27日土曜日

FreeBSD 11をNISサーバーに、Ubuntu 16.04をNISクライアントするための設定 - 2

FreeBSD 11をNISサーバーに、Ubuntu 16.04をNISクライアントするときに少し苦労しました。設定は、
FreeBSD 11をNISサーバーに、Ubuntu 16.04をNISクライアントするための設定 - 1
http://www.sakashita-net.jp/2018/01/freebsd-11nisubuntu-1604nis-1.html
だけで終わりかと思ったら、まだありました。

Ubuntu 16.04ではシェルは/binにあります。FreeBSD 11は追加のシェル、たとえばbashやzshは/usr/local/binにあります。この状況でNISでユーザーを共有しようとすると、シェルの場所を統一する必要があります。変更が少ないことを優先して、FreeBSD 11で、これらのシェルについて/binから/usr/loca/binへシンボリックリンクを作ることにしました。
$ cd /bin
$ ls -l *sh
lrwxr-xr-x  1 root  wheel      19  1月 11  2017 bash -> /usr/local/bin/bash
-r-xr-xr-x  2 root  wheel  423784  1月 16 12:24 csh
-r-xr-xr-x  1 root  wheel  161936  1月 16 12:24 sh
-r-xr-xr-x  2 root  wheel  423784  1月 16 12:24 tcsh
lrwxr-xr-x  1 root  wheel      18  1月 11  2017 zsh -> /usr/local/bin/zsh
$
そしてNISサーバーでのシェルの記述をすべて/binに変更しました
$ ypcat passwd

user1:x:2002:2002:USER1:/home/user1:/bin/bash

$
すると、このユーザーでpasswdコマンドでパスワード変更ができなくなりました。
$ passwd
Changing local password for user1
Old Password:
New Password:
Retype New Password:
passwd: pam_chauthtok(): error in service module
$
エラーメッセージは以下のようになっています。
$ sudo cat /var/log/message

Jan 6 12:44:13 host rpc.yppasswdd[108]: /bin/bash is not a valid shell
Jan 6 12:44:13 host rpc.yppasswdd[108]: rejecting change attempt: bad arguments
Jan 6 12:44:13 host rpc.yppasswdd[108]: client address: 172.27.40.1 username: ss
Jan 6 12:44:13 host yppasswd: in pam_sm_chauthtok(): yppasswd_remote(): NIS password update failed: kona: RPC: Server can't decode arguments


$
/bin/bashが/etc/shellsに入っていないのでエラーになっているようです。こんなところで、/etc/shellsが関係するとは思いませんでした。さっそく/etc/shellsに追加しました。
$ cat /etc/shells
# $FreeBSD: releng/11.1/etc/shells 59717 2000-04-27 21:58:46Z ache $
#
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/sh
/bin/csh
/bin/tcsh
/usr/local/bin/zsh
/usr/local/bin/rzsh
/usr/local/libexec/git-core/git-shell
/usr/local/bin/bash
/usr/local/bin/rbash
/bin/bash
/bin/zsh
$
これについて調べてみると以下に記述がありました。
RPC.YPPASSWDD
https://linuxjm.osdn.jp/html/ypserv/man8/rpc.yppasswdd.8.html

-e [chsh|chfn]
    デフォルトでは、 rpc.yppasswdd は passwd エントリにおけるシェルや GECOS フィールドのユーザーによる変更を許さない。 -e オプションを用いると、これらのそれぞれを有効にできる。 ypchsh(1) のサポートを有効にした場合には、ユーザーが選択できるシェルをすべて /etc/shells に記述する必要があることに注意すること。 
私が見た範囲ではFreeBSDのmanには記述がないように思えます。