この記事が誰かの何かの役に立つだろうか?いや、立つまい。 ここに記されるのは「addrle」という名前のサービスを 構築するにあたっての試行錯誤の記録。まとめでもないし 手順としても行きつ戻りつの内容だ。 だが何かのヒントにはなるかもしれない。そう願う。
では、試行錯誤を始めよう。
/etc/resolv.conf (ESXi環境固有)
Input:nameserver 192.168.11.187
sudo yum -y upgrade
df -hT
/dev/sda1 xfs 25G 1.4G 24G 6% /
前提:VMコンソールで10GBのDisk追加済であること
LVM インストール
sudo yum search lvm
lvm2.x86_64 : Userland logical volume management tools
sudo yum -y install lvm2.x86_64
Package 7:lvm2-2.02.177-4.amzn2.0.2.x86_64 already installed and latest version
Nothing to do
追加DriveのLVM設定
情報表示
lsblk
> NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
> sda 8:0 0 25G 0 disk
> ├─sda1 8:1 0 25G 0 part /
> └─sda128 259:0 0 1M 0 part
> sdb 8:16 0 10G 0 disk
指定した情報表示
sudo lsblk -a -o NAME,SIZE,FSTYPE,MOUNTPOINT,UUID,LABEL
NAME SIZE FSTYPE MOUNTPOINT UUID LABEL
sda 25G
├─sda1 25G xfs / 8b852a7d-459f-4eb2-988f-5f3e2196b74a /
└─sda128 1M
sdb 10G
sr0 368K iso9660 2019-09-22-10-06-15-00 cidata
参考:https://mattintosh.hatenablog.com/entry/20140926/1411686000
sudo gdisk /dev/sdb
Command (? for help): ?
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu
Command (? for help): o
Proceed? (Y/N): y
Command (? for help): n
[Enter]
,[Enter]
,[Enter]
,Hex code or GUID (L to show codes, Enter = 8300): 8e00
Command (? for help): p
で確認
Disk /dev/sdb: 20971520 sectors, 10.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 03CE336D-672F-4DE0-A42B-DF19DF500F2E
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 20971486
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 20971486 10.0 GiB 8E00 Linux LVM
Command (? for help): w
で書き込んで proceed? (Y/N): y
で終了。
LVMのボリューム作成
一応現在の情報表示
sudo pvs
sudo vgs
sudo lvs
sudo lsblk -a -o NAME,SIZE,FSTYPE,MOUNTPOINT,UUID,LABEL
sdb 10G
└─sdb1 10G
PV作成
sudo pvcreate /dev/sdb1
sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- <10.00g <10.00g
VG作成(adrl-usersという名のVG)
sudo vgcreate adrl-users /dev/sdb1
sudo vgs
VG #PV #LV #SN Attr VSize VFree
adrl-users 1 0 0 wz--n- <10.00g <10.00g
LV作成(LVは1つだけで、どんどん拡張していく想定)
sudo lvcreate --name addrle -l 100%FREE adrl-users
sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
addrle adrl-users -wi-a----- <10.00g
ファイルシステム作成
`sudo lvdisplay`
LV Path /dev/adrl-users/addrle
LV UUID REBC40-KFir-CvuK-pIXe-qa8A-dyo0-ZXkStE
sudo mkfs.xfs /dev/adrl-users/addrle
マウントする
sudo mkdir -p /adrl/USERS
sudo mount -t xfs /dev/adrl-users/addrle /adrl/USERS
findmnt
sudo vi /etc/fstab
Input:/dev/adrl-users/addrle /adrl/USERS xfs defaults,attr2,inode64,uquota 0 2
再起動して確認
sudo reboot
ログインして
findmnt
/adrl/USERS をエクスポートする
/etc/exports
Input:/adrl/USERS 192.168.11.0/24(rw,no_root_squash)
ファイル変更読み込み
sudo exportfs -r
sudo lsof -i -P
サービス起動
sudo systemctl start nfs-server.service
sudo systemctl status nfs-server.service
起動時に有効化
sudo systemctl enable nfs-server.service
MSの/adrl/USERSを/home/USERSとしてマウントする
まずはコマンドで
sudo mkdir /home/USERS
sudo mount -t nfs -o rw,intr 192.168.11.122:/adrl/USERS /home/USERS
df -hT
192.168.11.122:/adrl/USERS nfs4 10G 42M 10G 1% /home/USERS
/etc/fstab
Input:192.168.11.122:/adrl/USERS /home/USERS nfs rw,intr 0 0
メールユーザー作成
sudo useradd -b /home/USERS -m mailuser1
echo mailuser1:**[PASSWORD]** | chpasswd
2019-09-22 ここまで
Maildir作成
sudo mkdir /etc/skel/Maildir && sudo chmod 700 /etc/skel/Maildir
quota limit
状態確認
sudo xfs_quota -x -c 'report -h' /adrl/USERS
limit 設定
sudo xfs_quota -x -c 'limit bsoft=190m bhard=200m 1002' /adrl/USERS
ディレクトリ作成
sudo mkdir /adrl/{_sysrepo,_bin}
cron設定 /etc/cron.daily/sysrepo.bash
sudo vi /adrl/_bin/sysrepo.bash
#!/bin/bash
###output
EXECDATE=$(date +%y%m%dT%H%M%S)
xfs_quota -x -c 'report -h' /adrl/USERS > /adrl/_sysrepo/quotarepo-${EXECDATE}.log
###CleanUP
find /adrl/_sysrepo -atime +7 > /adrl/_sysrepo/removefiles-${EXECDATE}.log
find /adrl/_sysrepo -atime +7 -exec rm {} \;
###EndofScript
sudo chmod 750 /adrl/_bin/sysrepo.bash
sudo ln -s -T /adrl/_bin/sysrepo.bash /etc/cron.daily/sysrepo.bash
vi ~/.bashrc
Input:
unalias vi
alias ffd='find `pwd` -type d'
alias fff='find `pwd` -type f'
sudo vi /etc/chrony.conf
#server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4
server ntp.jst.mfeed.ad.jp iburst
server ntp.nict.jp iburst
server 0.jp.pool.ntp.org iburst
Java 8 JDK
sudo yum -y install java-1.8.0-openjdk.x86_64
java.security.egd で urandom
java -Djava.security.egd=file:/dev/./urandom
こうするらしいが、一旦保留zip or gzip
→両方標準で入っている
PostgreSQL (with JDBC)
sudo yum -y install postgresql-server.x86_64 postgresql-jdbc.noarch postgresql.x86_64
Keycloak
https://www.keycloak.org/docs/latest/getting_started/index.html この辺を読みながら
cd ~ && mkdir keycloaksetup && cd keycloaksetup && wget https://downloads.jboss.org/keycloak/7.0.0/keycloak-7.0.0.tar.gz
tar -xzf keycloak-7.0.0.tar.gz
sudo mkdir /addrle
sudo mv keycloak-7.0.0 /addrle/keycloak
standalone で起動してみる
cd /addrle/keycloak/bin
sudo ./standalone.sh
127.0.0.1 しかLISTENしてないので /addrle/keycloak/standalone/configuration/standalone.xml 編集
sudo vi /addrle/keycloak/standalone/configuration/standalone.xml
/127.0.0.1 で検索して IP 修正 → 192.168.11.121
/8080 で検索して Bind Port 修正 → 9801
また、送信元IP制限を設定する場合は以下を参照。※非常に分かりにくいが standalone.xml または domain.xml を編集せよと。
https://www.keycloak.org/docs/latest/server_admin/index.html#ip-restriction
http://mf1.esxi.home.lan:9801/auth/admin でアクセスできるが、ユーザー名/パスワードを聞かれる。localhostからのアクセスでないと、イニシャライズが走らないらしい。
ガイドには bin/add-user-keycloak を実行せよとある。
sudo ./add-user-keycloak.sh -r master -u <username> -p <password>
sudo ./add-user-keycloak.sh -r master -u keymaster -p PSS-adminrole
Added 'keymaster' to '/addrle/keycloak/standalone/configuration/keycloak-add-user.json', restart server to load user こう出る
sudo cp /usr/lib/systemd/system/chronyd.service /etc/systemd/system/keycloak.service
sudo vi /etc/systemd/system/keycloak.service
[Unit]
Description=Keycloak standalone
[Service]
Type=simple
ExecStart=/addrle/keycloak/bin/standalone.sh
PrivateTmp=yes
[Install]
WantedBy=multi-user.target
sudo systemctl start keycloak.service
sudo systemctl status keycloak.service
sudo systemctl enable keycloak.service
改めてブラウザで http://mf1.esxi.home.lan:9801/auth/admin
https://www.keycloak.org/docs/latest/server_admin/index.html 3.1 あたりから
Master Realm ※ガイドにはマスターレルムではユーザー管理を行わない方がいい、とある。
Realm Settings
Name ※変更不可
master
Display name
Keycloak
HTML Display name
<div class="kc-logo-text"><span>Keycloak</span></div>
Enabled
[ON]
User-Managed Access
[OFF]
Endpoints
OpenID ~~
SAML 2.0 ~~
左上の「Master」のところで「Add Realm」
Import ... [Select file]とあるので、エクスポートしたファイルを読み込めそう。
Name
addrle-users
Enabled
[ON]
→[Create]
addrle-users Realm
Configure
Realm Settings
General
Name
addrle-users
Display name
addrle-users
HTML Display name
Enabled
[ON]
User-Managed Access
[OFF] ※暫定
Endpoints
OpenID ~~
SAML 2.0 ~~
Login
User registration
[OFF]→[ON]
Email as username
[OFF]→[ON]
Edit username
[OFF]
Forgot password
[OFF]→[ON]
Remember Me
[OFF]→[ON]
Verify email
[OFF]
Login with email
[ON]
Require SSL
[external requests] ※暫定
→[Save]
Keys ※今はとりあえずスルー
Host
localhost
Port
25
From Display Name
addrle ID management
From
info@esxi.home.lan
Reply To Display Name
Reply To
Envelope From
Enable SSL
[OFF]
Enable StartTLS
[OFF]
Enable Authentication
[OFF]
→[Save]
Themes
Login Theme
keycloak
Account Theme
keycloak
Admin Console Theme
base
Email Theme
keycloak
Internationalization Enabled
[OFF]→[ON]
Supported Locales
※jaとenがあれば良いが、消す必要もないので初期値
Default Locale
ja
→[Save]
Cache ※キャッシュのクリアーボタンしかない
Tokens
Default Signature Algorithm
RS256
※あとは初期値で
→[Save]
Client Registration
Initial Access Tokens
→※保留
Clients
Client Scopes
Roles
Identity Providers
User Federation
Authentication
Manage
Groups
Users
Sessions
Events
Import
Export
※一旦はここまで
Getting Start に倣っていく。3.3 New User
http://mf1.esxi.home.lan:9801/auth/admin/ → 「addrle-users」→「User」→「Add User」
Username
adrl-u01
adrl-u01@esxi.home.lan
First Name
Last Name
User Enabled
[ON]
Email Verified
[OFF]
Required User Actions
Locale
→[Save]
Credentials タブ
New Password
[PASSWORD]
Password Confirmation ※Retype
Temporary
[ON]→[Off]
→[Reset Password]
3.4 User Account Service
Domain Clustered Mode
https://www.keycloak.org/docs/latest/server_installation/index.html#_domain-mode
2019-09-23 ここまで
main.cf 設定
現状確認
sudo postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = localhost
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
main.cf編集
sudo vi /etc/postfix/main.cf
home_mailbox = Maildir/
recipient_delimiter = +
mail_name = addrle
maximal_queue_lifetime = 2d
myhostname = mf1.esxi.home.lan
mydomain = esxi.home.lan
mydestination = $mydomain, $myhostname, localhost
myorigin = $mydomain
mailbox_size_limit = 262144000
message_size_limit = 47185920
smtpd_recipient_limit = 13
inet_interfaces = $myhostname, localhost
リロードして確認
sudo systemctl reload postfix
sudo systemctl status postfix
warning: bounce_queue_lifetime is larger than maximal_queue_lifetime - adjusting bounce_queue_lifetime
もう一回編集
sudo vi /etc/postfix/main.cf
bounce_queue_lifetime = 2d
リロードして確認
sudo systemctl reload postfix
sudo systemctl status postfix
一応メールを送ってみる to mailuser1
mail mailuser1
-bash: mail: command not found
後で。
dovecotインストール
sudo yum install dovecot
dovecot.conf編集
sudo vi /etc/dovecot/dovecot.conf
protocols = imap
listen = *
login_trusted_networks = 192.168.11.0/24 127.0.0.0/8
起動して確認
sudo systemctl start dovecot
sudo systemctl status dovecot
自動起動有効化
sudo systemctl enable dovecot
Edmaxで確認
ログインエラー。サーバーログを見よと。
Sep 25 01:36:14 mf1 dovecot: imap(mailuser1): Error: user mailuser1: Initialization failed: Namespace '': Mail storage autodetection failed with home=/home/USERS/mailuser1
Sep 25 01:36:14 mf1 dovecot: imap(mailuser1): Error: Invalid user settings. Refer to server log for more information.
dovecotの設定追加
sudo vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
リスタートして確認
sudo systemctl restart dovecot.service
sudo systemctl status dovecot
2019-09-24 ここまで
OpenLDAPインストール
sudo yum -y install openldap-servers.x86_64 openldap-clients.x86_64
サービス起動・有効化
sudo systemctl start slapd
sudo systemctl status slapd
sudo systemctl enable slapd
config確認
sudo ldapsearch -L -Y EXTERNAL -H ldapi:/// -b cn=config dn
sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'olcDatabase={2}hdb,cn=config'
schema確認
sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn
dn: cn={0}core,cn=schema,cn=config
コアスキーマしかない。。。
初期設定
初期設定用LDIF
sudo vi /addrle/slapd010_setup.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}L+j4i1HEA2OFrTeWVhrKxuQSMZaAGTuO
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=addrle,dc=info
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=ldapmaster,dc=addrle,dc=info
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}L+j4i1HEA2OFrTeWVhrKxuQSMZaAGTuO
初期設定用LDIF反映
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /addrle/slapd010_setup.ldif
スキーマ追加
sudo ldapadd -H ldapi:/// -Y EXTERNAL -f /etc/openldap/schema/cosine.ldif
sudo ldapadd -H ldapi:/// -Y EXTERNAL -f /etc/openldap/schema/nis.ldif
sudo ldapadd -H ldapi:/// -Y EXTERNAL -f /etc/openldap/schema/inetorgperson.ldif
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn
初期登録用LDIF
sudo vi /addrle/slapd020_mailuser2.ldif
dn: dc=addrle,dc=info
objectClass: dcObject
objectClass: organization
dc: addrle
o: ALTERWORKS
dn: ou=USERS,dc=addrle,dc=info
objectClass: organizationalUnit
ou: USERS
dn: uid=ldapuser,ou=USERS,dc=addrle,dc=info
objectClass: account
objectClass: posixAccount
uid: mailuser2
cn: mailuser2
userPassword: {SSHA}AYbiWUWj5f4rYOAkrBVEKG2ZGKoujcu+
loginShell: /bin/bash
uidNumber: 1003
gidNumber: 1003
homeDirectory: /home/USERS/mailuser2
ldapadd -H ldapi:/// -D "cn=ldapmaster,dc=addrle,dc=info" -W -f /addrle/slapd020_mailuser2.ldif
Enter Password
登録内容確認
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b "dc=addrle,dc=info"
mailuser2のdn間違えた
再登録用LDIF
sudo vi /addrle/slapd021_mailuser2.ldif
dn: uid=ldapuser,ou=USERS,dc=addrle,dc=info
changetype: delete
dn: uid=mailuser2,ou=USERS,dc=addrle,dc=info
objectClass: account
objectClass: posixAccount
uid: mailuser2
cn: mailuser2
userPassword: {SSHA}AYbiWUWj5f4rYOAkrBVEKG2ZGKoujcu+
loginShell: /bin/bash
uidNumber: 1003
gidNumber: 1003
homeDirectory: /home/USERS/mailuser2
再登録
ldapadd -H ldapi:/// -D "cn=ldapmaster,dc=addrle,dc=info" -W -f /addrle/slapd021_mailuser2.ldif
authconfig-tui
sudo authconfig-tui
User Information
[* ] Use LDAP
Authentication
[* ] Use LDAP Authentication
[Next]
ERROR: /usr/lib64/libnss_ldap.so.2 が無い
不足パッケージインストール
sudo yum -y install nss-pam-ldapd
authconfig
sudo id mailuser2
id: mailuser2: no such user
sudo authconfig --test --enableldap --enableldapauth --ldapserver=127.0.0.1 --ldapbasedn="ou=USERS,dc=addrle,dc=info"
sudo authconfig --update --enableldap --enableldapauth --ldapserver=127.0.0.1 --ldapbasedn="ou=USERS,dc=addrle,dc=info"
sudo id mailuser2
uid=1003(mailuser2) gid=1003 groups=1003
ユーザーIDはできているが、当然$HOMEのディレクトリは存在しない
#!/bin/bash
####Set mail HEADER
EXECDATE=$(date +%Y%m%dT%H%M)
echo "From: mailuser1@esxi.home.lan" > /adrl/_sysrepo/quotarepo-${EXECDATE}.log
echo "To: mailuser1@esxi.home.lan" >> /adrl/_sysrepo/quotarepo-${EXECDATE}.log
echo "Subject: DiskUsageReport ${EXECDATE}" >> /adrl/_sysrepo/quotarepo-${EXECDATE}.log
echo "" >> /adrl/_sysrepo/quotarepo-${EXECDATE}.log
####output
df -h /adrl/USERS >> /adrl/_sysrepo/quotarepo-${EXECDATE}.log
echo "" >> /adrl/_sysrepo/quotarepo-${EXECDATE}.log
xfs_quota -x -c 'report -h' /adrl/USERS >> /adrl/_sysrepo/quotarepo-${EXECDATE}.log
####Sendmail
sendmail -i -f mailuser1@esxi.home.lan mailuser1@esxi.home.lan < /adrl/_sysrepo/quotarepo-${EXECDATE}.log
####CleanUP
find /adrl/_sysrepo -atime +3 > /adrl/_sysrepo/removefiles-${EXECDATE}.log
find /adrl/_sysrepo -atime +3 -exec rm {} \;
####EndofScript
/etc/cron.d/sysrepo
sudo vi /etc/cron.d/sysrepo
#Run adrl USERS report
SHELL=/bin/bash
PATH=/usr/bin:/bin:/usr/sbin
0 4,12,20 * * * root /adrl/_bin/sysrepo.bash
2019-09-27 ここまで