1. (60%)實作題:啟動 Server 作業硬碟 - unit07
    1. 網路參數的設定,請依據底下的方式來設定好你的網路環境:
      1. 因為我們的系統是 clone 來的,因此裡面的網路卡連線會跑掉。所以,請先刪除所有的連線界面後, 再依據底下的要求逐次建立好你的網路環境:
      2. 建立 eth0 為外部的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
        • IPv4 的 IP位址: 172.18.255.*/24 ,其中 * 為老師規定的 IP 尾數
        • gateway 為 172.18.255.254
        • DNS 為 172.16.200.254 以及 168.95.1.1
      3. 使用 teamd 的機制建立內部區域網路的備援功能:
        • team 的界面使用 team0 卡號,且連線名稱請命名為 team0
        • team 使用 activebackup 備援功能,不要使用 loadbalance
        • team 的實體網卡 (team slave) 請使用 eth1 及 eth2 ,且其連線名稱名稱亦請命名為 eth1, eth2
        • 內部網路參數為: 172.19.*.254/24,不需要 gateway
      4. 主機名稱指定為: server*.example.dic
      5. 最終你的主機名稱與 IP 的對應為:
        server*.example.dic	172.18.255.*		別名為 server*
        server254.example.dic	172.18.255.254		別名為 server254
        server.lan*.example.dic	172.19.*.254		別名為 server
        client.lan*.example.dic	172.19.*.1		別名為 client
        
    2. 基本的伺服器作業系統設定行為:
      1. 使用崑山的 FTP 網站作為你的 YUM server 來源,並且清除一次 yum 清單快取
      2. 安裝相關的軟體,至少須安裝 vim-enhanced, bash-completion, net-tools, mailx, wget, links, bind-utils
      3. 全系統自動升級,且每天凌晨 3 點也會自動升級一次。(請寫入 /etc/crontab 為主)
      4. 將 SELinux 修改成為 Enforcing 模式,且未來每次開機都自動為 Enforcing 才行
    3. 實際設定好本機防火牆
      1. 請關閉 firewalld 服務,並且自行安裝、啟動 iptables 服務
      2. 將預設的規則轉存到 /root/firewall.sh 這個檔案內
      3. 首先將全部的規則刪除 (應該有三條指令)
      4. 設定好預設政策,讓 INPUT 成為 DROP 而 OUTPUT 與 FORWARD 成為 ACCEPT
      5. 針對 INPUT 前三條規則為 (1)回應封包 (2)放行 lo 界面 (3)放行 icmp 封包
      6. 放行你自己的內部區域網路那個網域的連線要求
      7. 讓 ssh 只對外部的區網放行,不會對 Internet 放行
      8. 讓 http 針對整個 Internet 放行
      9. 最後讓確定的規則轉存到 /etc/sysconfig/iptables 這個設定檔
      10. 重新啟動 iptables 服務,然後觀察規則是否正確
    4. 實際設定好 Server 的路由功能
      1. 讓核心支援 IP 轉遞的功能
      2. 修改 /root/firewall.sh ,增加刪除 nat 表格的規則與自訂鏈
      3. 增加讓來自內部網路的封包,並預計由 eth0 對外網卡出去的封包,全部偽裝成為 eth0 的 public IP
      4. 在 /etc/sysconfig/iptables-config 當中增加 nf_nat_ftp 及 nf_conntrack_ftp 模組功能
      5. 此功能在開機後依舊能夠順利啟動
    5. 建置專屬你區域網路的 LDAP 服務
      yum install openldap-servers openldap-clients openldap migrationtools
      systemctl start slapd
      systemctl enable slapd
      
      1. 建立你的 LDAP 相關節點如下:
        • baseDN 設定為: dc=example,dc=dic
        • RootDN 設定為: cn=Manager,dc=example,dc=dic
        • RootDN 的密碼設定為: 2727175
      2. mkdir ldap
        cd ldap
        vim basedn.ldif
        
        dn: olcDatabase={2}hdb,cn=config
        changetype: modify
        replace: olcSuffix
        olcSuffix: dc=example,dc=dic
        
        dn: olcDatabase={2}hdb,cn=config
        changetype: modify
        replace: olcRootDN
        olcRootDN: cn=Manager,dc=example,dc=dic
        
        dn: olcDatabase={2}hdb,cn=config
        changetype: modify
        replace: olcRootPW
        olcRootPW: 2727175		//可使用 slappasswd 設定加密密碼
        
        ldapmodify -Y EXTERNAL  -H ldapi:/// -f basedn.ldif
        
        cat /etc/openldap/slapd.d/cn=config		//查詢內容是否修改
        
      3. 因為預計要作為 Linux 的帳號驗證功能,因此請載入與 Linux 帳號相關的三個主要綱要檔 (schema)
      4. cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
        chown ldap:ldap /var/lib/ldap/DB_CONFIG
        
        ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
        ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
        ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
        
        slaptest -u
        
      5. 基礎 LDAP 資料庫節點設計中,至少應具有底下的節點存在,請將這些節點匯入到資料庫內:
        • dn: dc=example,dc=dic
        • dn: cn=Manager,dc=example,dc=dic
        • dn: ou=People,dc=example,dc=dic
        • dn: ou=Group,dc=example,dc=dic
      6. vim base.ldif
        
        dn: dc=example,dc=dic
        objectClass: top
        objectClass: dcObject
        objectclass: organization
        o: example dic
        dc: example
        
        dn: cn=Manager,dc=example,dc=dic
        objectClass: organizationalRole
        cn: Manager
        description: Directory Manager
        
        dn: ou=People,dc=example,dc=dic
        objectClass: organizationalUnit
        ou: People
        
        dn: ou=Group,dc=example,dc=dic
        objectClass: organizationalUnit
        ou: Group 
        
        ldapadd -x -W -D "cn=Manager,dc=example,dc=dic" -f /root/ldap/base.ldif
        
      7. 建立 10 個 LDAP 所管理的相關帳號,帳號相關資訊如下,請將該資訊匯入 LDAP 資料庫中:
        • 假設使用者名稱為 webuser1 ~ webuser10
        • 預設使用者密碼為 webpasswd 這個密碼
        • 假設使用者的 UID 從 8001 開始編號
        • 假設使用者的 GID 也是從 8001 開始編號,且有對應的私有群組
        • 假設使用者的預設家目錄在 /rhome/ 底下
      8. 承上,這 10 個用戶的家目錄亦請自行設定好相關的位置與權限
      9. mkdir /rhome
        
        useradd -d /rhome/webuser1 -u 8001 webuser1
        useradd -d /rhome/webuser2 -u 8002 webuser2
        
        echo "webpasswd" | passwd --stdin webuser1
        echo "webpasswd" | passwd --stdin webuser2
        
        vim /usr/share/migrationtools/migrate_common.ph
        
        $DEFAULT_MAIL_DOMAIN = "dc=example,dc=dic";		# 71 行左右
        $DEFAULT_BASE = "dc=example,dc=dic";       		# 74 行左右
        $EXTENDED_SCHEMA = 1;                      		# 90 行左右
        
        grep webuser /etc/passwd > user.txt
        grep webuser /etc/group > group.txt
        
        /usr/share/migrationtools/migrate_passwd.pl user.txt > user.ldif
        /usr/share/migrationtools/migrate_group.pl group.txt > group.ldif
        
        vim /root/ldap/"腳本名稱".sh
        
        #!/bin/bash
        
        minuid=8000
        home=/rhome
        
        [ ! -d "${home}" ]  && mkdir ${home}
        date=$( echo $(( $(date +%s)/60/60/24 + 1)) )
        ufile=/root/ldap/webuser.ldif
        gfile=/root/ldap/webgroup.ldif
        [ -f "${ufile}" ] && mv ${ufile} ${ufile}.backup
        [ -f "${gfile}" ] && mv ${gfile} ${gfile}.backup
        
        for i in $( seq 1 10)
        do
                username="webuser${i}"
                userid=$( echo $(( ${minuid} + ${i} )) )
        
        echo "${這裡加上 user.ldif 的內容
        homeDirectory: /rhome/${username}
        " >> ${ufile}
        
        echo "${這裡加上 group.ldif 的內容
        gidNumber: ${userid}
        " >> ${gfile}
        
        	cp -a /etc/skel ${home}/${username}
        	chown ${userid}:${userid} -R ${home}/${username}
        	chmod 700 ${home}/${username}
        done
        
        ldapadd -x -W -D "cn=Manager,dc=example,dc=dic" -f /root/ldap/webuser.ldif
        ldapadd -x -W -D "cn=Manager,dc=example,dc=dic" -f /root/ldap/webgroup.ldif
        
      10. 使用非加密的 LDAP 傳輸行為,因此請完成底下工作:
        • 讓 server 自己可以使用 ldapsearch 查詢 ldap:// 的資料
        • 讓 server 自己可以使用 LDAP 的帳號登入 Server 本身的系統 (請使用 ldap:// 網址)
      11. ldapsearch -x -H ldap://127.0.0.1 -b "dc=example,dc=dic"
        
        第二個步驟太複雜 在 例題 7.3.H 到 例題 7.3.J
        
    6. 建置 NFS 檔案伺服器
      1. 讓你的 /rhome 針對你的區域網路分享,權限請設定為可讀寫。
      2. vim /etc/exports
        
        /rhome  172.19.*.0/24(rw,async)
        
  2. (30%)實作題:啟動 client 作業硬碟
    1. 網路參數的設定,請依據底下的方式來設定好:
      1. 因為我們的系統是 clone 來的,因此裡面的網路卡連線會跑掉。所以,請先刪除所有的連線界面後, 再依據底下的要求逐次建立好你的網路環境:
      2. 建立 eth0 的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
        • IPv4 的 IP位址: 172.19.*.1/24 ,其中 * 為老師規定的 IP 尾數
        • gateway 為 172.19.*.254
        • DNS 為 172.16.200.254 以及 168.95.1.1
      3. 主機名稱指定為: client.lan*.example.dic
      4. 最終你的主機名稱與 IP 的對應為:
        server*.example.dic	172.18.255.*		別名為 server*
        server254.example.dic	172.18.255.254		別名為 server254
        server.lan*.example.dic	172.19.*.254		別名為 server
        client.lan*.example.dic	172.19.*.1		別名為 client
        
    2. 實際設定好本機防火牆
      1. 預設請使用 firewalld 防火牆服務,不要使用 iptables 服務!
      2. 預計放行的服務主要有 ssh 與 http 兩個服務,其他還可能有預設會啟用的 dhcp 用戶端服務。
      3. 查詢 rich rule (man firewalld.richlanguage),確認來自本機同一個 LAN 網段的封包,通通給予放行。
      4. 上述放行的防火牆服務,在下次重新開機後,依舊會存在才行
    3. 讓你的用戶端主機也能夠支援 LDAP 的帳號驗證,並且使用的是 ldap:// 的網址功能
    4. 在 例題 7.3.K
      
    5. 請使用 autofs 的機制,讓網路用戶登入時,能夠透過 NFS 取得自己的家目錄
    6. yum install autofs
      
      vim /etc/auto.master
      加入 /home/rhome /etc/auto.rhome
      
      vim /etc/auto.rhome
      加入 * -rw,soft,intr server:/rhome/&.
      
      systemctl start autofs
      systemctl enable autofs
      
      su - webuser1		//測試