Red Hat Enterprise Linux 7

解決問題 OpenLDAP (1)

教學目標

主要解決如何在 Red Hat Enterprise Linux 7 作業系統上安裝和設定 LDAP 伺服器的問題。

重點概念

OpenLDAP 主要為輕量型目錄存取協定的開放源始碼套件,在企業中實作 LDAP 將可以讓所有網域中的電腦從 LDAP 目錄中存取資訊,在 LDAP 目錄中主要儲存不同類型的資料,我們可以將其看成通訊錄,所以主要會包括企業員工的聯絡資訊、組織結構資訊、電腦管理資訊、憑證和金鑰、…等資訊,通常 LDAP 目錄伺服器相較於資料庫伺服器會專門針對讀的效能進行最佳化,所以一般情況下,我們會透過 LDAP 進行使用者登入機制的實作。但是我們要如何在 Red Hat Enterprise Linux 7 作業系統上安裝和設定 LDAP 伺服器,其實只要簡單三個階段即可完成 LDAP 伺服器的安裝和設定,分別為:

  1. 安裝 LDAP 伺服器
  2. 設定 LDAP 伺服器
  3. 測試 LDAP 伺服器

安裝 LDAP 伺服器

安裝 OpenLDAP 伺服器相關套件

1
$ yum install -y openldap openldap-clients openldap-servers migrationtools

複製 LDAP 資料庫範例檔。

1
2
$ cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
$ chown ldap /var/lib/ldap/DB_CONFIG

產生資料庫檔案,出現錯誤是正常(?)

1
2
3
4
$ slaptest
59924dd5 hdb_db_open: database "dc=my-domain,dc=com": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2).
59924dd5 backend_startup_one (type=hdb, suffix="dc=my-domain,dc=com"): bi_db_open failed! (2)
slap_startup failed (test would succeed using the -u switch)

設定 /var/lib/ldap/* 相關檔案權限

1
$ chown ldap:ldap /var/lib/ldap/*

設定和啟動 slapd 服務

1
2
$ systemctl enable slapd
$ systemctl start slapd

檢查 LDAP 啟動狀況

1
2
3
$ netstat -lt | grep ldap
tcp 0 0 0.0.0.0:ldap 0.0.0.0:* LISTEN
tcp6 0 0 [::]:ldap [::]:* LISTEN

設定 LDAP 伺服器

將 LDIF 檔案導入系統中,主要以 Cosine and Internet X.500 和 Network Information Services 綱要為主。

1
2
3
4
5
6
7
8
9
10
11
$ cd /etc/openldap/schema
$ ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"
$ ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"

建立 SSL 安全通訊協定的憑證和金鑰

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ openssl req -new -x509 -nodes -out /etc/openldap/certs/certificate.pem -keyout /etc/openldap/certs/privatekey.pem -days 3650
Generating a 2048 bit RSA private key
.....................................................................+++
...................................+++
writing new private key to '/etc/openldap/certs/privatekey.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank

For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----

Country Name (2 letter code) [XX]:TW
State or Province Name (full name) []:Taiwan
Locality Name (eg, city) [Default City]:Taipei
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:ip-172-31-24-216.ldapserver.com
Email Address []:

設定 SSL 安全通訊協定的憑證和金鑰的權限

1
2
3
$ cd /etc/openldap/certs
$ chown ldap:ldap *
$ chmod 600 privatekey.pem

取得加密之後的密碼

1
2
3
$ slappasswd -s redhat -n > /etc/openldap/passwd
$ vi /etc/openldap/passwd
{SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

建立 changes.ldif 檔案

1
$ vi /etc/openldap/changes.ldif

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=ldapserver,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=ldapserver,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/certificate.pem

dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/privatekey.pem

dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: -1

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=ldapserver,dc=com" read by * none

將 changes.ldif 檔案導入至 LDAP 伺服器中。

1
$ ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/changes.ldif

建立 base.ldif 檔案

1
$ vi /etc/openldap/base.ldif

1
2
3
4
5
6
7
8
9
10
11
12
13
14
dn: dc=ldapserver,dc=com
dc: ldapserver
objectClass: top
objectClass: domain

dn: ou=People,dc=ldapserver,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit

dn: ou=Group,dc=ldapserver,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit

將 base.ldif 檔案導入至 LDAP 伺服器中。

1
ldapadd -x -w redhat -D cn=Manager,dc=ldapserver,dc=com -f /etc/openldap/base.ldif

增加系統記錄檔

1
$ vi /etc/rsyslog.conf

1
local4.* /var/log/ldap.log

重新啟動系統記錄服務

1
$ systemctl restart rsyslog

測試 LDAP 伺服器

建立使用者帳號進行測試。

1
2
3
$ mkdir /home/guests
$ useradd -d /home/guests/ldapuser01 ldapuser01
$ passwd ldapuser01

設定 migrate_common.ph 內容

1
2
$ cd /usr/share/migrationtools
$ vi migrate_common.ph

1
2
$DEFAULT_MAIL_DOMAIN = "ldapserver.com";
$DEFAULT_BASE = "dc=ldapserver,dc=com";

在 LDAP 伺服器中建立目前的使用者與群組

1
2
3
4
5
6
7
8
9
10
$ grep ":10[0-9][0-9]" /etc/passwd > passwd
$ ./migrate_passwd.pl passwd users.ldif
$ ldapadd -x -w redhat -D cn=Manager,dc=ldapserver,dc=com -f users.ldif
adding new entry "uid=ldapserver-user,ou=People,dc=ldapserver,dc=com"
adding new entry "uid=ldapuser01,ou=People,dc=ldapserver,dc=com"
$ grep ":10[0-9][0-9]" /etc/group > group
$ ./migrate_group.pl group groups.ldif
$ ldapadd -x -w redhat -D cn=Manager,dc=ldapserver,dc=com -f groups.ldif
adding new entry "cn=ldapserver-user,ou=Group,dc=ldapserver,dc=com"
adding new entry "cn=ldapuser01,ou=Group,dc=ldapserver,dc=com"

測試 ldapuser01 使用者。

1
$ ldapsearch -x cn=ldapuser01 -b dc=ldapserver,dc=com

總結只要簡單三個階段即可在 Red Hat Enterprise Linux 7 作業系統上完成 LDAP 伺服器的安裝和設定。

相關資源

解決問題 Ansible (1)

教學目標

主要解決在 Red Hat Enterprise Linux 7 的作業系統環境安裝 Ansible 工具的問題。

重點概念

我們只需要透過簡單三步驟,就能夠在 Red Hat Enterprise Linux 7 的作業系統環境安裝 Ansible 工具進行多台機器自動化部署,主要有兩種方式。

方式一

安裝 Virtualenv 套件

首先透過 Virtualenv 套件建立虛擬且獨立 Python 環境,主要可以讓我們在沒有權限的情況下安裝新套件,不同專案可以使用不同版本的相同套件和套件版本升級時不會影響其他專案。

1
2
3
4
5
6
7
8
$ sudo yum install -y epel-release 
$ sudo yum install -y gcc automake
$ sudo yum install -y openssl-devel python-devel libffi-devel
$ sudo yum install -y python-crypto python-paramiko python-keyczar python-setuptools python-pip python-six python-pip
$ sudo yum install -y python-virtualenv
$ mkdir work && cd work
$ virtualenv deployment
$ source deployment/bin/activate

安裝 Ansible 工具

接著在虛擬且獨立 Python 環境中安裝 Ansible 工具。

1
$ pip install ansible==2.2.1

測試 Ansible 工具

最後當 Ansible 工具安裝完成之後,請進行測試。

1
2
$ ansible --version
$ ansible localhost -m ping

方式二

安裝 Yum 套件

若是我們不習慣使用 Virtualenv 獨立環境使用 Python 則可以透過 Yum 套件安裝安裝 Ansible 工具,首先安裝 Yum 套件相關的前置作業。

1
2
3
$ wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-10.noarch.rpm
$ rpm -ivh epel-release-7-10.noarch.rpm
$ yum install epel-release

安裝 Ansible 工具

接著透過 Yum 套件安裝 Ansible 工具。

1
$ yum install ansible

測試 Ansible 工具

最後當 Ansible 工具安裝完成之後,請進行測試。

1
2
$ ansible --version
$ ansible localhost -m ping

總結不論透過哪種方式皆是簡單三步驟就能夠在 Red Hat Enterprise Linux 7 的作業系統環境安裝 Ansible 工具進行多台機器自動化部署,下一步我們將會透過 Playbook 進行自動化部署之前必須先確認 SSH 連線登入是否設定正確。

相關資源

解決問題 Repository (2)

教學目標

主要解決當我們在 Aamzon 雲端服務 EC2 建立「Red Hat Enterprise Linux 7」作業系統虛擬機器中透過 yum 安裝套件時,發生安裝錯誤的問題。

重點概念

當我們在 Aamzon 雲端服務 EC2 建立「Red Hat Enterprise Linux 7」作業系統虛擬機器中透過 yum 安裝套件時,若發生安裝錯誤的問題,是否可以採用 CentOS 7 的儲存庫進行安裝。

事實上只要簡單三步驟就能夠將「Red Hat Enterprise Linux 7」的儲存庫設定為 CentOS 7 的儲存庫,分別為:

  1. 啟用和停用儲存庫。
  2. 匯入儲存庫的驗證金鑰。
  3. 測試儲存庫設定。

啟用和停用儲存庫

在 /etc/yum.repos.d/ 目錄中建立 CentOS.repo 新的儲存庫檔案。

1
$ vi /etc/yum.repos.d/CentOS.repo

輸入 CentOS.repo 儲存庫的檔案的內容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[CentOS7base]
name=CentOS-7-Base
mirrorlist=http://mirrorlist.centos.org/?release=7&arch=$basearch&repo=os
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7

[CentOS7updates]
name=CentOS-7-Updates
mirrorlist=http://mirrorlist.centos.org/?release=7&arch=$basearch&repo=updates
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7
[CentOS7plus]
name=CentOS-7-Plus
mirrorlist=http://mirrorlist.centos.org/?release=7&arch=$basearch&repo=centosplus
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7

[centos]
name=CentOS $releasever - $basearch
baseurl=http://ftp.heanet.ie/pub/centos/7/os/$basearch/
enabled=1
gpgcheck=0

開啟 /etc/yum.repos.d/ 目錄中 Red Hat 舊的儲存庫檔案。

1
vi /etc/yum.repos.d/redhat-rhui.repo

將 enable 的值設定為 0,停用 Red Hat 舊的儲存庫。

1
enable=0

匯入儲存庫的驗證金鑰

透過 RPM 指令匯入 CentOS 7 儲存庫的金鑰。

1
$ rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7

測試儲存庫設定

最後測試儲存庫的設定,待測試無誤之後就能夠開始透過 yum 安裝指令從 CentOS 7 儲存庫中安裝套件。

1
$ yum repolist

總結在「Red Hat Enterprise Linux 7」作業系統中只要設定 CentOS 7 新的儲存庫就能夠透過 yum 安裝指令從 CentOS 7 新的儲存庫中安裝套件。

相關資源