Sunday | November 9, 2008
自宅サーバいじり(今日は主に Samba)でマズイ点がぼろぼろと明るみに。 今日の今日まで気づきませんでしたが、Samba の homes 共有を使うとサーバの / 以下すべてが共有されてしまう模様。。。 というのは、 $ getent passwd nobody nobody:x:99:99:Nobody:/ :/sbin/nologin ということで、nobody の home directory は / に設定されています(他にも / が home dir になっているアカウントは存在するケースがあります)。 つまり homes 共有が有効だと、「\\SambaServer\nobody」というような UNC パスで / へのアクセスが得られてしまいます。 この時の権限は nobody ではなく接続時に入力したユーザ名になるので、 valid users = +somegroup のように指定を行っても、nobody の共有は消えることはありません。 valid users は [homes] という共有へログオン可能なユーザ のアクセスを制限するだけで、実際にそのユーザの共有が停止されるわけではないということです(ログオンを許可した後の挙動はパーミッションに依存)。 コンソールログオンを想定している場合はセキュリティレベルは変わりませんが、そうではない場合、/tmp 以下に大量のファイルを作成されるなど、予期しない結果が起こる可能性があります。 * 結論 1. homes 共有を使う場合は、「valid users = %S」を設定するべき %S はサービス名に置換され、「\\SambaServer\user1」というパスであれば user1 に相当する。 これによって、「\\SambaServer\ユーザ」 に対するアクセスを「ユーザ」のみに限定することが可能。 結論 2. [global] セクションに「invalid users = root」を追加しておくべき smbldap-tools を使って LDAP 上でアカウントを管理している場合、UID = 0 のユーザがログオン可能なことがあるが、これは好ましくないので禁止する。 ドメイン環境でなければ管理者アカウントは不要だと思われるので、 # smbldap-userdel root のように削除してもよいだろう(自分のスタンドアロンサーバではそうしました)。 *一番ベストなのは、 [myhome] path = /home/%U ... のように設定することですが、これだと階層的なホームディレクトリを構成できないという弱点が。~%U とか出来ればいいのにな。 (追記) これは %H でできますね。というか、これを何故ベストだと思ったのか思いだせない...。