[料理佳餚] 在 CentOS 7 上安裝 Go Git Service 並透過 LDAP 接 AD 驗證使用者

  • 1910
  • 0
  • Git
  • 2016-05-08

Gogs 是一套 Open Source 的 Git 服務,使用者介面及提供的功能都跟 GitHub 非常相像,支援的作業平台有:Mac OS X、Linux、Windows,如果大家有自建 Git 服務的需求,Gogs 是一個不錯的選擇。

增加 YUM 儲存庫

安裝 Gogs 加入下面這兩個 YUM 儲存庫,會讓我們在安裝的過程中比較順利一點。

增加 nginx YUM 儲存庫

echo "[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1" | tee /etc/yum.repos.d/nginx.repo

增加 Gogs YUM 儲存庫

echo "[gogs]
name=Repository for pkgr/gogs application.
baseurl=https://rpm.packager.io/gh/pkgr/gogs/centos7/pkgr
enabled=1" | tee /etc/yum.repos.d/gogs.repo

安裝 MariaDB

MariaDB 是 MySQL 的一個分支,自從 MySQL 被 Oracle 買走之後,MySQL 有了閉源的風險(Oracle 實在讓我愈來愈反感),開源社群的神人們就從 MySQL 分支出 MariaDB 來避開侵權的風險,我們就輸入下列指令把 MariaDB 安裝起來。

yum -y install mariadb-server mariadb

啟動 MariaDB

systemctl enable mariadb
systemctl start mariadb

設定 root 密碼

mysqladmin -u root password "{密碼}"
mysqladmin -u root --password="{密碼}" password "{密碼}"

建立 gogs 資料庫

mysql -u root -p{密碼} -e "CREATE DATABASE IF NOT EXISTS gogs; use gogs; set global storage_engine=INNODB;"
-p{密碼}中間沒有空格

安裝 nginx

yum -y install nginx

設定 nginx 反向代理

cat > /etc/nginx/conf.d/default.conf <<EOF
server {
  listen          80;
  server_name     {HOSTNAME};
  location / {
    proxy_pass      http://localhost:3000;
  }
}
EOF

啟動 nginx

systemctl enable nginx
systemctl start nginx

安裝 Gogs

# Import RPM Key
rpm --import https://rpm.packager.io/key
yum -y install gogs

開啟防火牆 3000 埠號

firewall-cmd --permanent --add-port=3000/tcp
firewall-cmd --reload

初始化 Gogs 設定

上面的步驟都完成之後,這時候只要在瀏覽器打上 http://{HOST_NAME}:3000/ 就會出現初始設定畫面。

我們針對下面這些必要的參數進行設定,其餘的參數如果不確定的話就保持預設值即可,更詳細的參數說明請參考 Configuration Cheat Sheet

Application General Settings

  • Application URL: 請設定成 http://{HOST_NAME}:3000/ 或 http://{IP}:3000/

Database Settings

  • Password: 輸入您設定的 MySQL root 帳號的密碼。

Admin Account Settings

建立 Gogs 的第一個使用者,這個第一個使用者預設就是管理者。

  • Username: 使用者名稱(即登入帳號)
  • Password: 使用者密碼(即登入密碼)
  • Confirm Password: 再次輸入使用者密碼
  • Admin Email: 使用者的 Email 信箱

參數設定完成之後,按下 Install Gogs 按鈕,稍待一會兒就會以預設管理者的身份登入系統並顯示首頁。

設定 LDAP

Gogs 安裝成功之後,預設是讓使用者用自行註冊的方式來建立帳號,如果我們已經有 AD 了就可以透過 LDAP 直接跟 AD 接起來做使用者的驗證。

進入 Admin Panel

用具有管理者帳號的身份登入,在右上角的大頭貼點開,進入 Admin Panel

Add New Source

接著到 Authentications 區塊,點擊 Add New Source 按鈕來新增的一個驗證來源。

LDAP (via BindDN)

  • Authentication Type: 請選擇 LDAP (via BindDN)
  • Authentication Name: 指定一個 Source 的名稱
  • Host: AD 的 Hostname
  • Port: 通常是 389
  • Bind DN: 指定一個使用者的 DN,以上面圖片中的設定值為例,意思就是在 chef.com.tw 這個網域的 Users 群組的 administrator。
  • Bind Password: Bind DN 使用者的密碼
  • User Search Base: 要尋找使用者用的基礎 DN
  • User Filter: 用來告訴 AD 要過濾的方式,輸入 (&(objectCategory=person)(objectClass=user)(sAMAccountName=%s))
  • Email attribute: 輸人 mail

按下 Add News Source 按鈕就設定成功了,之後使用者只要輸入 AD 的帳號及密碼就可以登入使用了。

另外在選擇 Authentication Type 的時候,我們有看到另外一個設定叫 LDAP (simple auth),差別在於 LDAP (simple auth) 在設定時不需要先給一個 Bind DN,但是 User DN 的設定值必須要是完全符合的 DN 規則,舉例來講,我們要開放系統給一個在 Users 群組裡面叫 Admin 的人使用,傳送給 AD 的 DN 就會是 CN=Admin,CN=Users,DC=chef,DC=com,DC=tw,可是如果我們要開放給一個在 IT 群組裡面叫 Johnny 的人使用的話,LDAP (simple auth) 就做不到,所以我們的組織結構如果是很單純的只有一個群組,裡面有所有允許被開放使用的人,就用 LDAP (simple auth),如果要被開放的人是屬於不同群組,我們就必須選用 LDAP (via BindDN)。

參考資料

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學