7c. サーバ構築(Linux)

SambaをインストールしてActive Directoryに参加させ、メールサーバを構築してアカウントはActive Directoryから引っ張って来たかったのですが、帰国が迫り断念しました。

Moodleインストール

MoodleはPHPでメモリを使用しそうなので、PHPの設定ファイルの以下パラメータの値を変更しておきます。
※ 時間が足りなくてMoodleインストールは断念しました。

# vi /etc/php.ini
memory_limit = 2048M
post_max_size = 16M
upload_max_filesize = 4M

# Moodle用のデータベースを作成
# mysql -u root -p
Enter password:												# パスワードを入力
mysql> create database moodle default character set utf8;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| moodle             |		# moodleDBが追加
| mysql              |
| performance_schema |
+--------------------+

# moodleユーザを作成し、moodleDBへ全権限を付与
mysql> grant all on moodle.* to moodle@localhost identified by '******';
mysql> select user from mysql.user;					# moodleユーザ登録確認
+--------+
| user   |
+--------+
| root   |
| root   |
| moodle |					# moodleユーザが追加
| root   |
| root   |
+--------+

mysql> flush privileges;	# 上記設定をMySQLサーバーへ反映
mysql> exit

# moodleをダウンロード
# wget https://download.moodle.org/download.php/stable34/moodle-3.4.tgz
# 続きは別途

参考
CentOS 7 Moodleのインストール

LinuxサーバをActiveDirectoryに参加させる

Sambaのインストール

# yum clean all						# キャッシュのクリア
# yum install samba					# sambaインストール
# yum install samba-client			# samba-clientインストール
# yum install samba-winbind			# winbindインストール
# yum install samba-winbind-clients	# winbind-clientsインストール

# vi /etc/samba/smb.conf
[global]
workgroup = XXXXX		# ドメイン名を記載
security = ads			# ADドメインで認証をするという宣言

password server = XXXXXX.XXXXX.XX.ac.bw	# ドメインコントローラーのFQDN
realm = XXXXX.XX.AC.BW					# ドメインのFQDN

winbind offline logon = false				# ドメインコントローラーと通信途絶時にキャッシュログオンを許可しない
winbind use default domain = true			# ログオン時にドメイン名を明示的に指定しない事を許可
idmap config * : range = 16777216-33554431
template shell = /bin/bash
log file = /var/log/samba/log.%m
max log size = 50

# systemctl start smb			# sambaデーモンを起動
# systemctl start winbind		# winbindデーモンを起動
# systemctl is-active smb		# 起動したことを確認
# systemctl is-active winbind
# systemctl enable smb			# 自動起動の設定
# systemctl enable winbind
# systemctl is-enabled smb		# 自動起動になっていることを確認
# systemctl is-enabled winbind
# systemctl list-unit-files -t service	# 全てのサービスの自動起動の有無を確認する場合

# この段階ではwinbindは起動しないので、下記エラーで起動できなくても気にせず先に進みます。
# systemctl start winbind
Job for winbind.service failed. See 'systemctl status winbind.service' and 'journalctl -xn' for details.

ネームサービススイッチ(NSS)の設定変更

# vi /etc/nsswitch.conf		# winbindを追加
passwd:     files winbind
shadow:     files winbind
group:      files winbind

バケットフィルタリングの設定

Sambaサーバの公開(外部からの通信の許可)

# firewall-cmd --permanent --add-service=samba			# sambaを許可
# firewall-cmd --permanent --add-service=samba-client	# samba-clientを許可
# firewall-cmd --reload									# 設定を反映
# firewall-cmd --permanent --list-services				# 公開されているサービスを確認

Sambaをドメインメンバとして動作させる為に、Kerberos認証の設定

–krb5kdc/–krb5realmオプションにより,XXXXX.XX.AC.BWというレルムに関する設定が追加されます。

# 設定ファイルはあるもののkinitがないので、インストールしておきます。
# yum clean all
# yum install krb5-workstation

# 設定ファイルの変更
# cp -p /etc/krb5.conf /etc/krb5.conf.org
# authconfig --krb5kdc=10.XX.XX.XX --krb5realm=XXXXX.XX.AC.BW --update

# kinitコマンドを実行してKerberosのチケットを受け取る
# kinit administrator@XXXXX.XX.AC.BW
Password for administrator@XXXXX.XX.AC.BW:		# パスワードを入力

# Kerberos チケットが取得できたことを確認
# klist
Default principal: administrator@STAFF.XXXXX.XX.AC.BW

Valid starting       Expires              Service principal
18/11/2017 13:55:19  18/11/2017 23:55:19  krbtgt/XXXXX.XX.AC.BW@XXXXX.XX.AC.BW
        renew until 25/11/2017 13:55:13

Active Directory ドメインに参加

# ドメインに参加
# net ads join -U administrator
Enter Administrator's password:			# パスワードを入力
Using short domain name -- XXXXX
Joined 'XXXXX' to dns domain 'XXXXX.XX.ac.bw'

# systemctl start winbind		# 再度winbindを起動
# systemctl is-active winbind	# 起動を確認

# ドメイン情報表示
# net ads info
LDAP server: 10.XX.XX.XX
LDAP server name: XXXXX.XX.ac.bw
Realm: XXXXX.XX.AC.BW
Bind Path: dc=XXXXX,dc=XX,dc=AC,dc=BW
LDAP port: 389
Server time: Wed, 15 Nov 2017 22:16:46 CAT
KDC server: 10.XX.XX.XX
Server time offset: -24
Last machine account password change: Wed, 15 Nov 2017 21:55:05 CAT

# wbinfo -t				# Winbind機構とADとの通信が行われていることを確認
checking the trust secret for domain XXXXX via RPC calls succeeded
# wbinfo -u				# ADに存在するアカウントを表示

# wbinfo -a ユーザ名%パスワード					# Winbindによるユーザ認証を確認
plaintext password authentication succeeded
challenge/response password authentication succeeded

# ユーザのホームディレクトリを自動で作成(下記行を追記)
# vi /etc/pam.d/system-auth
session     required      /usr/lib64/security/pam_mkhomedir.so skel=/etc/skel umask=0022

# winbindの再起動
# systemctl restart winbind

# AD のユーザーに遷移可能か確認
# su - administrator
$ id
uid=16777216(administrator) gid=16777220(domain users) groups=16777220(domain users),16777216(BUILTIN\administrators),16777217(BUILTIN\users),16777221(denied rodc password replication group),16777222(enterprise admins),16777223(schema admins),16777224(domain admins),16777225(group policy creator owners) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

# Windowsクライアントのエクスプローラーから、Linuxサーバのホームディレクトリにアクセス(\\10.XX.XX.XX)
# smbstatus						# 接続状態を確認

Samba version 4.6.2
PID     Username     Group        Machine                               Protocol Version  Encryption  Signing
--------------------------------------------------------------------------------------------------------------------------
6446    XXXXXXXX     domain users 10.XX.XX.XX (ipv4:10.XX.XX.XX:55653)  SMB3_11           -           partial(AES-128-CMAC)

Service      pid     Machine       Connected at                  Encryption   Signing
-------------------------------------------------------------------------------------
XXXXXXXX     6446    10.XX.XX.XX   Sat Nov 18 16:51:53 2017 CAT  -            -      

Locked files:
Pid          Uid        DenyMode   Access      R/W        Oplock  SharePath               Name  Time
----------------------------------------------------------------------------------------------------------------------
6446         16777217   DENY_NONE  0x100081    RDONLY     NONE    /home/STAFF/XXXXXXXX    .   Sat Nov 18 16:51:52 2017

参考
LinuxマシンをActive Directoryに参加させる簡単な方法
Active DirectoryとLinuxの認証を統合しよう
Samba : Winbind で ADドメイン参加

UNIX ベースのアプリケーション用サブシステムのユーティリティーと SDK のインストール

ADから詳細なユーザ情報を取得するには、「UNIX ベース アプリケーション用サブシステムのユーティリティと SDK」をインストールする必要があるので、下記を参考にインストールします。

参考
UNIX ベースのアプリケーション用サブシステムのインストールと構成
Services for UNIX のインストール

ADからユーザ情報を収集

ADからユーザ情報を抜き出したかったのですが、ユーザと所属グループだけで、他のオフィス名や内線番号は取得できないことがわかりました。

# net usersidlist | grep -v "^ "		# ユーザ名のみ抜き出す
# net user info ユーザ名				# ユーザの詳細(グループ)を表示
Domain Users
ICT SUPPORT

参考
netコマンド(ドメイン連携・管理)
Samba が動作する Linux マシンを Windows ドメインに参加させる方法

Active Directoryのアカウント情報をcsvdeコマンドでエクスポート

LinuxからADのユーザ情報を抜き出せなかったので、Windowsサーバ上でcsvdeコマンドを実行してユーザ情報を取得します。

;; Unicodeでexport.csvにエクスポートする
;; ユーザー・アカウントのみエクスポートするには、-rオプションを指定
;; -lオプションで必要な属性をカンマで区切って指定可能
C:\> csvde -u -f export.csv -r objectCategory=user -l dn,homeDirectory,sAMAccountName,givenName,sn,physicalDeliveryOfficeName,telephoneNumber,description,userPrincipalName

参考
Active Directoryのアカウント情報をcsvdeコマンドでエクスポートする

Linux上で上記エクスポートファイルをカスタマイズ

Linuxへftp転送し、sed&awkコマンドを使用して必要な情報以外は削除し、フォーマットを整えます。

# iconv -f Unicode -t UTF-8 export.csv > export.data	# 文字コードをUTF8に変換
# sed -e '1d' export.data > export.data2				# タイトル行を削除
# sed -e '/CN=Users/d' export.data2 > export.data3		# 不要行を削除

# フォーマットを編集
# sed -e 's/OU=OCAAT NON-ACCADEMIC OU/NON-ACCADEMIC/g' export.data3 > export.data4
# sed -e 's/OU=OCAAT ACCADEMIC OU/ACCADEMIC/g' export.data4 > export.data5
# sed -e 's/OU=//g' export.data5 > export.data6
# sed -e 's/L_//g' export.data6 > export.data7
# sed -e 's/\\\\\\\\NX3000STAFF\\\\//g' export.data7 > export.data8
# sed -e 's/MANAGEMENT/ADMINISTRATION/g' export.data8 > export.data9
# sed -e 's/_HOME$\\\\/,/g' export.data9 > export.data10

# 必要な列のみ抽出
# awk -F, '{print $3,$13,$2,$15,$12,$9,$10,$11,$17}' export.data10
NON-ACCADEMIC ADMINISTRATION ICT SUPPORT アカウント名 FirstName SirName ICTG05 4653 ADMG2101
  :

メールサーバ構築(Postfix+Dovecot)

※ 帰国が迫り時間が足りなくて断念。。日本戻ってから構築してみようと思います。