web-dev-qa-db-ja.com

NFS、SambaサーバーとActive Directoryのユーザーを組み合わせたもの

SMB/CIFSおよびNFSを介してユーザーのホームディレクトリをエクスポートするサーバーを構築したいと考えています。このサーバーは、ユーザーデータベースを保持するWin2k3 ADドメインコントローラーに参加します。私が理解しているように、winbindはこれらのユーザーのUIDをその場で発明します。このユーザー名とUIDのマッピングは、ホームディレクトリをマウントするNFSクライアントで使用できる必要があります。そうしないと、ファイルの所有権が正しく表示されません。

これはSFUを使用して達成できると思いますが、SFUは廃止され、最近のバージョンのWindowsではサポートされないことがわかるので、使用しないことをお勧めします。

このマッピングをNFSクライアントに提供するにはどうすればよいですか?

(これは一般的な使用例だと思うかもしれませんが、関連するhowtoを見つけることができません。私のGoogle-fuは弱いかもしれません。)

編集:余談ですが、このシナリオでは、ユーザーが最初にSMB/CIFS経由で接続していなくてもNFS経由で接続することは可能ですか?

8
Bittrance

(2017-07-05用に編集)私は今、sssdを使用することをお勧めします。以下の元の回答は、歴史的な参照のために残しています。 Ubuntuに関する現在の注意事項は次のとおりです。

apt-get install openssh-server sssd-ad realmd packagekit
realm -v join example.com --computer-ou="OU=someOU,DC=example,DC=com" --user=someuser
  • /etc/sssd/sssd.conf[sssd]セクションに、default_domain_suffix = example.comfull_name_format = %1$sを追加します。 [domain/example.com]セクションで、fallback_homedir = /home/%d/%uを編集し、ignore_group_members = Trueを追加します。大規模なドメインの場合、enumerate = falseを追加して、sssdがAD全体を横断してグループメンバーシップを検索しないようにします(キャッシュされていないログインをそれぞれ1〜2分遅らせます)。
  • session required pam_mkhomedir.so skel=/etc/skel/ umask=0076の末尾に/etc/pam.d/common-sessionを追加します。 (または使用したい任意のumask)。
  • sssdサービスをservice sssd restartで再起動します。
  • 2番目のテキストまたはGUIコンソール、またはssh localhostを使用してログインしてください。

winbindは、古いバージョンのSambaではデフォルトでUIDを構成するか、またはすべての整合性を保つためにLDAPストアを参照する必要があります。これはしばらくの間そうではありません(2004年11月、私の情報が正しければ)-idmap_ridは、Active Directory RID(相対識別子、ユーザーのSIDの一部)からUIDを生成できるバックエンドです。

Debianシステムを既存のADに結び付けるための構成をここに記述しました -Puppetを使用しますが、SambaおよびPAM構成の開始点についてのみそれを読んだ場合、同等の機能で動作するはずです。 UNIXシステム。

SFUを使用したり、ADスキーマを変更したりしていないことに注意してください。私が欲しかったのは、ユーザー向けの一貫したUIDのセットだけでした。

4
Mike Renfro

Services for UnixのNFSコンポーネントは、Server 2003 R2以降のServices for Network File Systemロールの一部になりました。

SFUについてのすばらしいMicrosoftブログがあります- http://blogs.msdn.com/b/sfu/それを設定する の方法を説明する関連のブログエントリで、Technetの最終的な記事は ここ です。

Identity Management for UNIX Active Directoryスキーマ拡張を使用してマッピングを行うと、最初にCIFSを使用しなくてもNFSクライアントがサーバーに接続できるようになります(CIFSが可能である場合、NFSにはあまり意味がありませんか?)。

2
Jon Rhoades

上記のMike Renfroが提案したように、idmap_ridが中心的なコンポーネントです。以下は、新しいRHEL5.5ボックスが与えられたときに、ボックスを起動して実行するシェルコマンドのリストです。

client_packages:

yum -y install samba3x-winbind krb5-workstation nfs-utils portmap pam_krb5
chkconfig --add winbind
chkconfig winbind --level 345 on
chkconfig --add rpcidmapd
chkconfig rpcidmapd --level 345 on
chkconfig --add portmap
chkconfig portmap --level 345 on
chkconfig --add nfslock
chkconfig nfslock --level 345 on

client_setup:

umount /cpy/shared || true
umount /cpy/users || true

install samba-winbind.conf /etc/samba/smb.conf
install krb5.conf /etc/krb5.conf
install idmapd.conf /etc/idmapd.conf

if ! net -S ad.example.com ads testjoin ; then
    net -S ad.example.com ads join -UAdministrator
fi

if ! grep -q winbind /etc/nsswitch.conf ; then
    sed -r  -e 's/^(passwd|shadow|group):.*$/& winbind/g' \
        -e 's/^hosts:.*$/& wins/g' -i /etc/nsswitch.conf
fi

( grep -v '172.18.0.2:' /etc/fstab && cat fstab.nfs-client ) \
    > /tmp/fstab.new && mv /tmp/fstab.new /etc/fstab

service winbind restart
service rpcidmapd restart
install -d /cpy/shared
install -d /cpy/users
mount -a
authconfig --enablewinbind --enablewinbindauth --enablekrb5 --update
echo "Make sure that /etc/hosts has an entry with .example.com"

samba-winbind.conf:

[global]
unix charset = LOCALE
workgroup = EXAMPLE
realm = example.com
security = ADS
log level = 2
syslog = 0
log file = /var/log/samba/%m
max log size = 50
idmap backend = idmap_rid:EXAMPLE=10000-20000
idmap uid = 10000-20000
idmap gid = 10000-20000
template Shell = /bin/bash
template homedir = /cpy/users/%u
winbind separator = +
winbind cache time = 60
winbind enum groups = yes
winbind enum users = yes
winbind use default domain = yes

krb.conf:

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]

 default_realm = EXAMPLE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 forwardable = yes

[realms]
 PILOTFISH.SE = {
  kdc = ad.example.com
  admin_server = ad.example.com
  default_domain = example.com
 }

[domain_realm]
 .pilotfish.se = EXAMPLE.COM
 pilotfish.se = EXAMPLE.COM

[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }

idmapd.conf

[General]

Verbosity = 1
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = example.com

[Mapping]

Nobody-User = nfsnobody
Nobody-Group = nfsnobody

[Translation]
Method = nsswitch

fstab.nfs-client

172.18.0.2:/users       /cpy/users              nfs4    defaults        0 0
172.18.0.2:/shared      /cpy/shared             nfs4    defaults        0 0
1
Bittrance