星期一, 6月 20, 2022

以 AD 管理 Linux 的帳密(以 CentOS 7 為例)

過去筆者手下眾多 Linux 都是用本機帳號維運,每到稽核規定的密碼修改週期就是一次不小的工程。既然公司是以 AD 為主,不如來研究看看如何讓 Linux 也加入 AD Domain,並且授權為 Linux 上的管理者。

在 CentOS 7,要先安裝一些套件: 

sudo yum install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python

然後是決定要加入的網域與帳號,我的帳號是 david_chou,要加入 dev.gss 這個網域。

sudo realm join --user=david_chou dev.gss

打完正確的密碼後,可以用 realm list 確認一下,像我的結果會是這樣:













上圖也可以在提示符號看出,hostname 是 QAC-ELASTALERT,這待會兒要用到。接下來我們要先修正幾個問題,細節在,懶人請直接跟我來。sudo vi /etc/sssd/sssd.conf 編輯一個設定檔:
















存檔後重啟服務 systemctl restart sssd 就會生效。換成網域帳號登入看看:











因為我們有設 default_domain_suffix 的關係,帳號只要 david_chou 而不用 david_chou@dev.gss 這麼長。最後記得再用舊的本機管理權限帳號登入,授權給網域帳號 sudo usermod -aG wheel david_chou@dev.gss,以後就可以只靠網域帳號做事了。

附帶一提,當網域密碼變更後,可能因快取的關係導致新密碼不能登入,可採取以下步驟:

  • login (old password)
  • sudo sss_cache -E (old password)
  • systemctl restart sssd (old password)
  • logout
  • login (new password)
[2022/12/22] 在 RockyLinux 9 的經驗,需要的套件有一個名稱變了,policycoreutils-python 要改成 policycoreutils-python-utils。

[2023/06/13] 經同事認證,sudo realm join --user=... 看起來很正常,其實會把該網域下所有的使用者都列進去可登入名單了,所以後面記得「用另一個管理帳號」 sudo realm deny --all; sudo realm permit david_chou@dev.gss 才不會過度授權,也不會把自己關在外面。

星期五, 4月 22, 2022

OpenLDAP on Docker

  • docker run -d --name openldap -p 1389:1389 [-e LDAP_USERS=user01,user02 -e LDAP_PASSWORDS=bitnami1,bitnami2] bitnami/openldap:2.6.1
  • ldapsearch -H ldap://localhost:1389 -x -b dc=example,dc=org 

星期六, 12月 25, 2021

修改 Docker Container 預設使用 STDOUT / STDERR 以致不易查看的問題​

每一個 Dockerfile 都可能或多或少地「定義」了一些應用程式本身與外在環境的關係,這次我們以 Nginx 為例,各位可以把它看做是一個輕量級的網頁伺服器。當我們把 Nginx 塞到 Docker 裡面,可能有許多細節我們不會想花時間去了解太深入,畢竟以 Scrum 的精神先讓事情發生,所以用以下的指令把它跑起來:

  • docker run -d --name nginx -p 8080:80 nginx
依這個官網 Image 預設行為,它會把 log 寫到 /var/log/nginx 目錄下,分別是外部訪問的紀錄在 access.log 以及錯誤在 error.log,但這兩個檔案又被連結到 STDOUT / STDERR 去了,好處是不太會因為檔案太大而爆掉,但壞處就是一下就捲過去了,很難在裡面慢慢查問題。這裡我們先看第一招:在這個 Image 有指令可以在「Container 內部」重啟的情況下,可以直接進到 Container 裡面,把這兩個連結刪掉,再重啟 Nginx 就好了,過程細節請參考下圖。
​但依作者的經驗,不是每一個 Image 都留有內部重啟的餘地,有時候我們得遷就一下。接下來第二招,利用映射保留 Container 所用到的磁碟空間,再把它跑起來:

​當我們在當前目錄下,開了 log/nginx 子目錄,並對應到 Container 裡面的 /var/log/nginx 目錄,在此狀況下的 Nginx 就不會再產生連結,而是直接利用這磁碟空間輸出 log。以上這樣看來很不錯了?不過細究起來,「映射就不產生連結」應該也是由 Nginx Dockerfile 所決定的特性,換言之,其他的 Image 不見得能這麼容易修改,這時我們還有最後一招:找找 Docker Host(也就是「外面」)是不是有這樣的檔案?
  • /var/lib/docker/containers/<containerId>/<containerId>-json.log
雖然內容形式有些修改,但 Container 的 STDOUT / STDERR 都集中在此,資訊是不漏接的。

星期一, 4月 19, 2021

From Dynamic to Static IP Address on CentOS 7

Get the current network status related on some Network Interface (ex: ens192):

Now we get some important information:

  • 192.168.109.56/23 => IP 192.168.109.56 & MASK 255.255.254.0
  • GATEWAY=192.168.109.254

We keep all the settings except "dynamic", in /etc/sysconfig/network-scripts/ifcfg-ens192:

  • ONBOOT=yes
  • NM_CONTROLLED=no
  • BOOTPROTO=static
  • IPADDR=192.168.109.56
  • NETMASK=255.255.254.0
  • GATEWAY=192.168.109.254

After configuration saved, restart network service and verify:

  • service network restart
  • ip a show ens192

星期三, 4月 14, 2021

星期二, 3月 23, 2021

NFS on CentOS 7

  •  Server Side (server.nfs.net)
    • install
      • yum install nfs-utils
    • share /var/share
      • mkdir /var/share
      • chmod 755 /var/share
      • chown nfsnobody:nfsnobody /var/share
    • service
      • systemctl start rpcbind
      • systemctl start nfs-server
      • systemctl enable rpcbind
      • systemctl enable nfs-server
    • vi /etc/exports
      • /var/share *(ro,wdelay)
      • /var/share client.nfs.net(rw,sync)
    • restart
      • systemctl restart nfs-server
    • firewall
      • firewall-cmd --permanent --add-service=nfs
      • firewall-cmd --permanent --add-service=mountd
      • firewall-cmd --permanent --add-service=rpc-bind
      • firewall-cmd --reload
  • Client Side (client.nfs.net)
    • install
      • yum install nfs-utils
    • share mapping
      • mkdir -p /mnt/nfs/var/share
      • mount -t nfs server.nfs.net:/var/share /mnt/nfs/var/share
    • vi /etc/fstab (optional, auto mount after reboot)
      • server.nfs.net:/var/share /mnt/nfs/var/share nfs defaults 0 0

星期五, 9月 18, 2020