QNAP NASにはMicrosoft Active Directoryのドメインコントローラ機能があります。これにより、WindowsとLinuxとMacのユーザー管理を一元化することができます。つまり、ドメインコントローラにユーザーアカウントを作成するだけで、WindowsとLinuxとMacにも全て自動的に同じユーザーが作成されます。利用者は共通のユーザー名とパスワードでログインできるようになります。さらに、ファイル共有機能を適切に設定することで、WindowsとLinuxで共通のホームディレクトリを使用することができ、データの転送も不要になります。Macもホームディレクトリ共有はできるはずなのですが、私の手元の環境ではうまく動作していません。なお、ドメインコントローラはLDAPサーバを含んでいるので、両方を有効化することはできません。LDAPサーバとの違いをまとめると以下のようになります。
機能 | ドメインコントローラ | LDAPサーバ |
---|---|---|
Windowsのユーザー認証 | Yes | No |
Macのユーザー認証 | Yes | Yes |
Linuxのユーザー認証 | Yes | Yes |
Windowsのホームディレクトリ共有 | Yes | No |
Macのホームディレクトリ共有 | リンクのみ(注1) | No(注2) |
Linuxのホームディレクトリ共有 | NFS | NFS |
Windowsからの共有フォルダへのアクセス | ドメイン内外Yes | ドメイン内外Yes |
Macからの共有フォルダへのアクセス | ドメイン内外Yes | ドメイン内外Yes |
Linuxからの共有フォルダへのアクセス | ドメイン内外Yes | ドメイン内外Yes |
QNAP NASでのドメインコントローラ有効化手順
QNAP NASでドメインコントローラを有効にする前に、管理画面から「コントロールパネル→権限設定→共有フォルダー」を開き、「高度な許可」タブ内の「拡張フォルダー許可を有効にする」にチェックを入れておく必要があります。次に「コントロールパネル→権限設定→ドメインコントローラ」を開き、「ドメインコントローラを有効にします」にチェックを入れて、以下の設定を行って「適用」ボタンを押すことで、ドメインコントローラが有効になります。
- ドメイン: 適当に設定する(hogehoge.localとかhogehoge.tohoku.ac.jpとか)
- 管理者パスワード: 大文字・小文字・数字・記号を全て1文字以上含めた8文字以上
- パスワードの再入力: 管理者パスワードと同じもの
- サーバー署名: 強制的(QTS 4.3.xではこの項目はない)
なお、QNAP NASでドメインコントローラを有効にすると、Windowsのファイル共有(CIFS/SMBプロトコルでのファイル共有)は、ドメインユーザーしか行えなくなります。つまり、QNAP NASのローカルユーザーはWindowsからアクセスできなくなりますので注意して下さい。
SSHの有効化
QNAP NASではドメインユーザーの追加は管理画面から行えますが、きめ細かな設定ができませんので、SSHでログインしてコマンドでドメインユーザーの追加を行うことにします。そこで、「コントロールパネル→ネットワークとファイルサービス→Telnet / SSH」を開き、「SSH接続を許可する(管理者だけがリモートログインできます)」にチェックを入れ、「アクセス許可の編集」ボタンを押して適当な管理者アカウントにチェックを入れて「適用」を押す。コントロールパネルの画面でも「適用」を押す。これでSSH接続が可能になる。ただ、admin以外のアカウントではsudoができないかもしれない。QNAPはadminを無効化することを推奨しているので、無効化している場合はsudoが実行不可能になってしまう。その場合は、一時的にadminを有効化してSSHでログインし、以下のコマンドでsudoersファイルを編集します。
vi /usr/etc/sudoers
sudoersに追加するのは以下の行になります。
%administrators ALL=(ALL) ALL
これでadministratorsグループのユーザー(QNAP NASの管理者アカウント)はsudoできるようになります。ただし、再起動の度にリセットされてしまいますので注意しましょう。
QCLIによる共有フォルダ設定
ドメインユーザー追加の前に、共有フォルダ設定を行っておきましょう。QNAP NASでは初期設定でhomesという共有フォルダがあるはずです。また、ドメインコントローラを有効化するとnetlogonとsysvolも作成され、適切にアクセス権が設定されています。この後必要になるので、homesに「Domain Users」グループからの読み書き権限を付与し、さらにprofilesとshareを作成し、これらにも「Domain Users」グループからの読み書き権限を付与します(shareはユーザー間で共有するファイル置き場として作成していますが、名前は何でも構いません)。管理画面からも行えますが、SSHでログインすればQCLIのコマンド群で操作できます。上記の共有フォルダ設定は下記のようになります。
# Login to QCLI
sudo qcli --login user=USERNAME pw=PASSWORD saveauthsid=yes
# Change Samba server configurations
sudo qcli_networkservice --editadvancedmsnet WINSserverEnabled=Disabled
# Add 'homes' read/write permission to 'Domain Users'
sudo qcli_sharedfolder --addusergrouppermission sharename=homes domain_grouprw='DOMAIN\Domain Users'
# Add 'homes' access permission to 192.168.0.0/24,192.168.1.0/24 via SMB
sudo qcli_sharedfolder --setmicrosoftaccess sharename=homes HostIP=192.168.0.0/24,192.168.1.0/24
# Add 'homes' access permission to 192.168.0.0/24,192.168.1.0/24 via NFS
sudo qcli_sharedfolder --setnfspermission sharename=homes Access=Enabled
sudo qcli_sharedfolder --addnfspermissionhostip sharename=homes HostIP=192.168.0.0/24,192.168.1.0/24 Permission=rw Squash=no_root_squash
# Make 'profiles' sharedfolder
sudo qcli_sharedfolder --createsharedfolder sharename=profiles volumeID=1
# Add 'profiles' read/write permission to 'Domain Users'
sudo qcli_sharedfolder --addusergrouppermission sharename=profiles domain_grouprw='DOMAIN\Domain Users'
# Add 'profiles' access permission to 192.168.0.0/24,192.168.1.0/24 via SMB
sudo qcli_sharedfolder --setmicrosoftaccess sharename=profiles HostIP=192.168.0.0/24,192.168.1.0/24
# Make 'share' sharedfolder
sudo qcli_sharedfolder --createsharedfolder sharename=share volumeID=1
# Add 'share' read/write permission to 'Domain Users'
sudo qcli_sharedfolder --addusergrouppermission sharename=share domain_grouprw='DOMAIN\Domain Users'
# Add 'share' access permission to 192.168.0.0/24,192.168.1.0/24 via SMB
sudo qcli_sharedfolder --setmicrosoftaccess sharename=share HostIP=192.168.0.0/24,192.168.1.0/24
# Add 'share' access permission to 192.168.0.0/24,192.168.1.0/24 via NFS
sudo qcli_sharedfolder --setnfspermission sharename=share Access=Enabled
sudo qcli_sharedfolder --addnfspermissionhostip sharename=share HostIP=192.168.0.0/24,192.168.1.0/24 Permission=rw Squash=no_root_squash
# Add 'netlogon' access permission to 192.168.0.0/24,192.168.1.0/24 via SMB
sudo qcli_sharedfolder --setmicrosoftaccess sharename=netlogon HostIP=192.168.0.0/24,192.168.1.0/24
# Add 'sysvol' access permission to 192.168.0.0/24,192.168.1.0/24 via SMB
sudo qcli_sharedfolder --setmicrosoftaccess sharename=sysvol HostIP=192.168.0.0/24,192.168.1.0/24
# Logout from QCLI
sudo qcli_admin -o
なお、DOMAINはドメイン名をhogehoge.localとした場合はHOGEHOGEになるはずです。volumeIDの値は、ほとんどの場合1のはずです。qcli_sharedfolder -l
で共有フォルダのリストが見られますが、その際に左端のカラムに出る数値です。上記の例では接続を許可するIPとして192.168.0.0/24,192.168.1.0/24を設定していますが、実際にはNASの属するネットワークを指定して下さい。例えばNASのNICが2つあり、それぞれIPアドレスが192.168.0.254と192.168.1.254だった場合は、192.168.0.0/24,192.168.1.0/24で問題ないことが多いでしょう。
Sambaの設定変更
以下のコマンドでSambaの設定を書き換えます。なお、viの操作方法は適当に検索して調べて下さい。
sudo vi /etc/config/smb.conf
[global]セクションに以下の行を加えます。これにより、LinuxやMac用にUIDやGIDのデータを持てるようになります。
idmap_ldb:use rfc2307 = yes
以下のコマンドでSambaを再起動します。
sudo /etc/init.d/smb.sh restart
LDAPAdminによるUID・GIDの編集
LDAPでドメインコントローラのデータベース中のデータを編集します。ここではLDAPAdmin(Windowsアプリ)を使うことにしますが、他のソフトでも構いません。起動して「Start→Connect...」で接続先選択ダイアログが出ます。そこで「New connection」を押します。設定画面が出るので、以下のように設定して「OK」を押します。
- Connection name: 適当
- Host: QNAP NASのIPアドレス
- Port: 389
- Version: 3
- Base: DC=hogehoge,DC=local (ドメインがhogehoge.localの場合)
- Simple authenticationを選択してTLSにチェックを入れる
- Username: CN=Administrator,CN=Users,DC=hogehoge,DC=local
- Password: ドメインコントローラを有効化したときのパスワード
登録した接続先をダブルクリックすると接続します。TLS暗号化をしていますが証明書を登録していないので進めてもいいのかと質問されますが、「Yes」を押して接続して下さい。
接続したら、下記のように各グループにgidNumberを設定します。他にも使用するグループがある場合は適宜設定して下さい。
- Administrators: 10000
- Users: 10001
- Remote Desktop Users: 10002
- Domain Admins: 10003
- Domain Users: 10004
- Enterprise Admins: 10005
- Schema Admins: 10006
- Group Policy Creator Owners: 10007
設定するには、左側のツリー画面でグループ名を選択します。AdministratorsとUsersはCN=Builtinの下にあります。他のグループはCN=Usersです。その状態で「Edit→Modify set...」を選択すると設定画面が出ます。OperationをAddにして、AttributeをgidNumber、Valueを上記の値にしてEnterを押せばデータベースに登録されます。
また、同様にしてCN=Usersの下にあるユーザーAdministratorにuidNumberとgidNumberを設定します。どちらも値は10000です。
ユーザーアカウント・グループの作成
QNAP NASにドメインユーザーを追加するには、通常は管理画面から行えるのですが、CSVファイルのバッチインポートでは指定できない項目があるため、SSHでリモートログインしてコマンドで追加する必要があります。
ドメインユーザーを追加するコマンドは下記のようになります。
# Add user as domain user to domain controller
sudo /mnt/ext/opt/samba/bin/samba-tool \
user create \
USERNAME PASSWORD \
--use-username-as-cn \
--surname=LASTNAME \
--given-name=FIRSTNAME \
--initials=INITIALS \
--company=COMPANY \
--mail-address=MAILADDRESS \
--home-drive='H:' \
--home-directory='\\NASNAME.DOMAINNAME\homes\USERNAME' \
--profile-path='\\NASNAME.DOMAINNAME\profiles\USERNAME' \
--nis-domain=DOMAINNAME \
--unix-home=/home/USERNAME/UbuntuHome \
--uid=USERNAME \
--uid-number=XXXXX \
--gid-number=10004 \
--login-shell=/bin/bash
# Set ACLs
sudo -E setfacl \
-m 'd:u:DOMAIN\USERNAME:rwx' \
/share/CACHEDEV1_DATA/homes \
/share/CACHEDEV1_DATA/share
sudo -E setfacl \
-m 'u:DOMAIN\USERNAME:rwx' \
/share/CACHEDEV1_DATA/homes \
/share/CACHEDEV1_DATA/share
# Make user's home and profile directory
sudo mkdir -p \
/share/homes/USERNAME \
/share/profiles/USERNAME \
/share/profiles/USERNAME.V6
# Change owner
sudo chown 'DOMAIN\USERNAME:DOMAIN\domain users' \
/share/homes/USERNAME \
/share/profiles/USERNAME \
/share/profiles/USERNAME.V6
# Change permission
sudo chmod 777 \
/share/homes/USERNAME \
/share/profiles/USERNAME \
/share/profiles/USERNAME.V6
# Add user to 'Remote Desktop Users' group
sudo /mnt/ext/opt/samba/bin/samba-tool \
group addmembers \
'Remote Desktop Users' USERNAME
大文字で書いている部分を適宜変更して下さい。--uid-numberは10001から付けていくといいでしょう。NASNAMEは、NASに付けたサーバー名で、管理画面の「コントロールパネル→システム→一般設定→システム管理」にある「サーバー名」のことです。NASNAME.DOMAINNAMEは完全修飾ドメイン名(FQDN)です。WindowsとMacからのマウント時はFQDNを指定して接続します。FQDNは、ドメインコントローラの有効化時に付けたドメイン名がhogehoge.localであれば、「QNAPNAS.hogehoge.local」という風になります(大文字小文字の区別はないはずです)。ユーザーのフォルダのパーミッションをここでは777に設定してしまっていますが、本来はこれはよくありません。信用できるユーザーしかいない非常に狭い範囲の共用計算機と仮定しています。
これに加えて、管理者権限を与えるユーザーでは以下のコマンドも実行します。
# Add user to 'Domain Admins' group
sudo /mnt/ext/opt/samba/bin/samba-tool \
group addmembers \
'Domain Admins' USERNAME
# Add user to 'Enterprise Admins' group
sudo /mnt/ext/opt/samba/bin/samba-tool \
group addmembers \
'Enterprise Admins' USERNAME
# Add user to 'Schema Admins' group
sudo /mnt/ext/opt/samba/bin/samba-tool \
group addmembers \
'Schema Admins' USERNAME
# Add user to 'Group Policy Creator Owners' group
sudo /mnt/ext/opt/samba/bin/samba-tool \
group addmembers \
'Group Policy Creator Owners' USERNAME
なお、参考までに、以下が新規グループの作成方法になります。
# Add GROUPNAME group as domain group to domain controller
sudo /mnt/ext/opt/samba/bin/samba-tool \
group add \
GROUPNAME \
--group-scope=Global \
--group-type=Security \
--nis-domain=DOMAINNAME \
--gid-number=XXXXX
DNSサーバの設定
ドメインコントローラはDNSサーバを内包しています。DNS設定は「コントロールパネル→権限設定→ドメインコントローラ→DNS」にあります。設定にはユーザー名とパスワードを求められることがありますが、ユーザー名はadministrator、パスワードはドメインコントローラの管理者パスワードです。QNAP NASにNICが複数あると、「システムの既定のゲートウェイ」で選択されているNICから見たIPアドレスが各ドメイン参加マシンに割り当てられますが、優先度の低いNICからアクセスしたい場合、各マシンのAレコードを編集して優先度の低いNICからアクセスできるようにします。
ドメインに参加するマシンの側も、DNSサーバをQNAP NASにする必要があります。また、大変困ったことに、QNAP NASのDNSサーバは「システムの既定のゲートウェイ」で選択されているNICからしか提供されません。この点に注意して下さい。
Windowsマシンからの接続とグループポリシーオブジェクトの登録
Windowsマシンを用意して(ドメインに参加できるPro以上のエディションである必要があります)、まずグループポリシー管理ツールをインストールします。「設定→アプリ→オプション機能→RSAT:グループポリシー管理ツールにチェックを入れる→インストール」でインストールできます。次に、「コントロールパネル→システム→コンピュータ名(Windowsのバージョンによって多少異なる)→変更…→ドメインを選択→hogehoge.localなどと入力→OK→ユーザー名Administrator・パスワードはドメインコントローラを有効化したときのパスワードを入力→OK→OK→閉じる→今すぐ再起動」で再起動し、再起動後にユーザー名を「HOGEHOGE\Administrator」としてログインします。ログインできたら「Win+Rでgpmc.mscを起動→グループポリシーの管理→フォレスト→ドメイン→hogehoge.localを右クリック→新規→Folder Redirectionと入力→OK→Folder Redirectionを右クリック→編集でグループポリシー管理エディターが起動→ユーザーの構成→ポリシー→Windowsの設定→フォルダーリダイレクト→Pictures・Music・Videos以外の各項目を右クリックしてプロパティを以下のように編集」。
- 設定: 基本 – 全員のフォルダーを同じ場所にリダイレクトする
- 対象のフォルダーの場所: ルートパスの下に各ユーザーのフォルダーを作成する
- ルートパス: \\NASNAME.DOMAINNAME\homes
これで、ドメインに参加しているWindowsマシンにドメインユーザーでログインすると、移動ユーザープロファイルは\\NASNAME.DOMAINNAME\profilesに保存されますが、ドキュメントなどのフォルダは\\NASNAME.DOMAINNAME\homes\USERNAME以下のフォルダにリダイレクトされます。また、\\NASNAME.DOMAINNAME\homes\USERNAMEがHドライブとしてマウントされるように設定してありますので、Hドライブを開けば各種フォルダが見えます。また、UbuntuでホームディレクトリとしてマウントされるフォルダはH:\UbuntuHomeとして見えるはずです(ただし、Ubuntuでログイン後に作成されるフォルダなので、Ubuntuでログインするまでは存在しない)。
さらに、以下の設定を行うことで*.hogehoge.localをイントラネットゾーンに登録します。これをやらないと、共有フォルダ上のプログラムを実行する際に管理者権限が要求され、さらに管理者でも毎回警告が出てしまいます。「Win+Rでgpmc.mscを起動→グループポリシーの管理→フォレスト→ドメイン→hogehoge.localを右クリック→新規→Intranet Zoneと入力→OK→Intranet Zoneを右クリック→編集でグループポリシー管理エディターが起動→ユーザーの構成→ポリシー→管理用テンプレート→Windowsコンポーネント→Internet Explorer→インターネットコントロールパネル→セキュリティページ→サイトとゾーンの割り当て一覧を右クリックしてプロパティを以下のように編集」。
- 「有効」を選択
- 「表示...」をクリック
- 以下の項目を追加
- 値の名前: *.DOMAINNAME (*.hogehoge.localなど)
- 値: 1 (イントラネットゾーン)
クライアントでの設定方法
Ubuntuでの設定方法はこちらに書いておきました。MacのActive Directoryドメイン参加方法はこちらをご覧下さい。
Windowsからの共有フォルダへのアクセスと、ドメイン参加PCへのリモートデスクトップ接続についての注意事項
いずれもユーザー名を「DOMAIN\USERNAME」にする必要があります。ただし、ルータ側でドメインをDOAMINと同じに設定していれば不要です。なお、DOMAINはドメインコントローラとなるQNAPでのドメイン名をhogehoge.localとした場合はhogehoge.localまたはHOGEHOGEとなります。