読者です 読者をやめる 読者になる 読者になる

uyamazakのブログ

仕事中の問題と解決メモ。PythonとGoogle Cloudがメイン。bizoceanで新規事業の企画と開発担当。 BigQueryを使ったビッグデータ収集・解析・リアルタイム処理プロジェクト進行中 https://github.com/uyamazak/oceanus

Ubuntu16.04のサーバーを、会社のActive Directoryに参加させて、アカウント、ファイル共有を行う

新会社の設立に際し、新たにActive Directory(以下AD)を使い、Windowsのユーザー管理をすることになった。

資産管理、情報統制の意味で必要だったけど、せっかくだからLinuxのサーバーも参加させたいし、ユーザー、ファイルなども共有したい。

作業メモとして動いている状態の設定情報を残す。

やりたいこと

ADのユーザーでLinuxサーバーも使いたい。AD上にはいるのに、いちいち別にLinuxでユーザー作ったり、消したりするの面倒だし、いなくなったユーザーが残り続けるのはまずい。どうせなら一括管理
AD認証でファイル共有をしたい。社内ファイルサーバーには、機密情報もはいるので、LANに繋げるだけですべて見れたりするのは、まずい。できればAD上のグループ単位で制限などができればベスト

構成

ADサーバー:Windows Server 2012

(ハードウェア管理・保守が面倒なので、既存のデータセンターに追加で借りた。そのためVPNで繋げてるけどそこは意識しなくて大丈夫だった)

標準テキスト Windows Server 2012 R2 構築・運用・管理パーフェクトガイド

標準テキスト Windows Server 2012 R2 構築・運用・管理パーフェクトガイド

クライアントサーバー:Uubuntu 16.04 デスクトップ(HP ML30 Gen9)

今すぐ使えるUbuntu入門ガイド Linuxをはじめよう

今すぐ使えるUbuntu入門ガイド Linuxをはじめよう

会社のPC:Windows10とか7とかMacとか雑多。ドメイン参加必須なので、WindowsはPro

もちろんすべて同セグメント内にあって、192.168.x.xなどでpingが通る前提

ADサーバー

自分がやってないからわからないけど、おそらく普通に構築

Linuxサーバー

普通に15.10を入れて、16.04がでたのでアップグレードしたもの。サーバー室にあるので普段使いのPCからSSH接続して使う

必要なものをインストール

Google検索と日本語では、新しいものが見つからない。

結局Ubuntuの公式が最強だった。

ActiveDirectoryWinbindHowto - Community Help Wiki


ファイル共有のsamba,

ADユーザーでLinuxに入れるようにするWinbind

LinuxをADに参加させるためのKerberosをイントールする

% sudo apt-get install winbind samba libnss-winbind libpam-winbind krb5-user

途中、Kerberosの設定情報入力を求められるけど、テキストで管理したいのでそのままエンター

ネットワーク周りの設定

ADに参加させるためには、Windowsでやる場合と同じく、ネームサーバーをADサーバーにする必要がある。

ドメイン名:bizocean.local
realm:BIZOCEAN.LOCAL
ワークグループ名:BIZOCEAN
ADサーバーのIP:192.168.87.11
ADサーバーの名前:bizadwsp01
liniuxサーバーの名前:ml30gen9

Linuxサーバーのhostnameを変更
% sudo vim /etc/hostname

ml30gen9

今回は、型番からml30gen9を使用。

ADサーバー側でも、ml30gen9と下記で設定する固定IPを登録しておく。

/etc/hostsに、hostnameと、ADサーバーの情報もいれる
127.0.0.1   localhost
127.0.1.1   ml30gen9 ml30gen9.bizocean.local

#AD周りの情報を入れる
192.168.87.11 bizocean.local bizadwsp01 bizadwsp01.bizocean.local
/etc/resolv.confを変更

新し目のUbuntuだと、/etc/resolv.confを直接編集せずにいろんな所からresolvconfというサービスが、自動で情報をひっぱって作っているらしい。なかなか変わらなくてはまる。

% vim /etc/resolvconf/resolv.conf.d/base
search bizocean.local
nameserver 192.168.87.11
nameserver 192.168.0.254


上記だけでは変わらないので、ネットワークインターフェースの方もいじる
また、固定IPの設定もする。
インターフェースに無線などがある場合はややこしくなる。

% vim /etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto eno1
iface eno1 inet static
address 192.168.2.70
netmask 255.255.252.0
gateway 192.168.0.254
#dns-nameservers 192.168.0.254
dns-nameservers 192.168.87.11 192.168.0.254


変更したら、いろいろ再起動してみて

% sudo service network-manager restart
% sudo service resolvconf restart


/etc/resolv.confがいい感じになるまでいじくる

% cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.87.11
nameserver 192.168.0.254
search bizocean.local

Sambaの設定

ファイルは、/etc/samba/smb.confという名前だけど、winbindもこの設定を使う

ADユーザーでログインした際に使われるディレクトリはtemplate homedirで設定する。
/home/%D/%Uだと、/home/BIZOCEAN/yu_yamazakiのようなディレクトリになる。

[global]の最初の方を変更

$ sudo vim /etc/samba/smb.conf
[global]
workgroup = BIZOCEAN
password server = bizadwsp01.bizocean.local
#password server = 192.168.87.11
realm = BIZOCEAN.LOCAL
security = ads
idmap config * : range = 16777216-33554431
template homedir = /home/%D/%U
template shell = /bin/bash
winbind use default domain = true
winbind offline logon = yes
winbind enum users = yes
winbind enum groups = yes

再起動

sudo /etc/init.d/samba restart
sudo /etc/init.d/winbind restart

Kerberosの設定

3か所変更する

% sudo vim /etc/krb5.conf

[libdefaults]
    default_realm = BIZOCEAN.LOCAL
    dns_lookup_realm = false
    dns_lookup_kdc = true

[realms]
    BIZOCEAN.LOCAL = {
        kdc = 192.168.87.11
        admin_server = ml30gen9.bizocean.local
    }

[domain_realm]
    .bizocean.local = BIZOCEAN.LOCAL
    bizocean.local = BIZOCEAN.LOCAL

nsswitchのにwinbind追加

公式だとshadowには入れてないけど一応入れておく

% sudo vim /etc/nsswitch.conf

passwd:         compat winbind
group:          compat winbind
shadow:         compat winbind

PAM回り

公式ドキュメント通り設定

PAM

% sudo vim /etc/pam.d/common-account

account sufficient pam_winbind.so
account required pam_unix.so

他はコメントアウト

% sudo vim /etc/pam.d/common-auth
auth sufficient pam_winbind.so
auth sufficient pam_unix.so nullok_secure use_first_pass
auth required   pam_deny.so

他はコメントアウト

% sudo vim /etc/pam.d/common-session
session [default=1]         pam_permit.so
# here's the fallback if no module succeeds
session requisite           pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required            pam_permit.so
# The pam_umask module will set the umask according to the system default in
# /etc/login.defs and user settings, solving the problem of different
# umask settings with different shells, display managers, remote sessions etc.
# See "man pam_umask".
session optional            pam_umask.so
# and here are more per-package modules (the "Additional" block)
session optional            pam_krb5.so minimum_uid=1000
session required    pam_unix.so
session optional    pam_systemd.so
session optional            pam_mkhomedir.so
# end of pam-auth-update config

session optional    pam_mkhomedir.so skel=/etc/skel umask=0022

足りない分追記

ADドメインに参加

% sudo net ads join -U domain_add
Enter domain_add's password:
Using short domain name -- BIZOCEAN
Joined 'ML30GEN9' to dns domain 'bizocean.local'
No DNS domain configured for ml30gen9. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER
  • Uでドメイン追加権限のあるADユーザーを指定する。

joinedが出てるので成功
Administoratorでもいいけど、今回はドメイン参加用ユーザーがいたので使う
DNSエラーは無視してもいいっぽい。

ユーザー、グループ確認

% id yu_yamazaki
uid=16777233(yu_yamazaki) gid=16777220(domain users) groups=16777220(domain users),16777245(g_all_bizocean),16777217(BUILTIN\users)

% getent group
% getent passwd

各コマンドで、Linux上にいなくて、AD上にはいるユーザー、グループの情報をとれることを確認する。

このグループを使って、Sambaの共有フォルダ、sudoresなどを変えるけど
上記"domain users"のようにグループ名にスペースが入っていると使えなくてはまる。gidもダメだった。

そのため、スペースのないグループを作って、ユーザーを参加させる必要がある。

ADドメインユーザー限定共有フォルダの作成

AD認証を使って、Windowsから書き込みなどができるフォルダを作る。
今回はg_all_bizoceanグループのみを追加。@をつけるとグループの意味らしい。

pathは今回、別途HDDを追加したのでマウントしたものを使っている

% sudo vim /etc/samba/smb.conf
[bizocean-ws]
   path = /mnt/HGST3TB/bizocean-ws
   browseable = yes
   read only = no
   public=no
   guest ok = no
   create mode = 0770
   directory mode = 0770
   valid users = @g_all_bizocean

これでおおよそやりたいことはできた。

ADのグループが反映されないとき

ADでユーザーをグループに追加し、samba、winbind等を再起動したけど反映されないときがあった。
sambaのキャッシュファイルを消し、サービスの再起動などをしたら反映された。

<s>sudo rm /var/cache/samba/*</s>

netコマンドに専用のがあった

sudo net cache flush