2017年9月18日 星期一

透過 Samba 設定 AD DC 及將 NAS (Synology) 加入網域

主要是參考 這系列的文章 , 這系列文章都有 簡體中文翻譯 的版本 (事實上我是先查到簡體版本, 沒寫文章出處但感覺是翻譯的, 才自行找到原文).

如果單純只是要設定 Samba 作為 AD Server, 這系列的前兩篇就足夠了.
後面的部份我也沒有設定過, 因為手上沒有可以加入網域的 windows client (隨機版的 windows 10 沒有加入網域的功能).

原本對 Samba 的印像還停留在很久前, 最多就是設定為 PDC BDC 之類的.
看了這系列文章, 加上正好公司進了台 Synology NAS,  因此找了台 linux 設定為 AD DC , 然後將 Synoloy NAS 加入網域並同步帳號, 來讓 NAS 的使用管理上更為方便.

基本上照文章來設定, 大致上不會遇到什麼問題, 很容易就設定好一台 AD DC.
在設定過程中, 會因為測試或管理的需求, 使用到很多平常不會用到的指令.

samba-ad-dc 管理上主要的指令是 samba-tool , 最常見的 user / group 的管理, 指令本身的 help 做的很完善, 大部份參數都很直覺, 一看就知道用途  ,  例如:
  • samba-tool user add duan  #網域裡新增使用者 duan
  • samba-tool user list
  • samba-tool group add mygroup
  • samba-tool group addmembers mygroup duan   #使用者 duan 加入 mygroup 群組
  • samba-tool user setpassword duan
另外內建的 password policy 很嚴格, 如果要變更寬鬆一些, 可以用 samba-tool domain passwordsettings 指令及相關參數來檢視現有規則及進行變更.

這篇文章 有蠻完整的 samba-tool 指令介紹.


將 Synoloy NAS 和 AD DC 同步帳號

在控制台的 "網域/LDAP" 設定裡, 設定網域的部份
  • 勾選 "加入網域"
  • 設定 "網域名稱"  "DNS 伺服器" , 後者即設定為 samba AD DC 的 IP
  • 勾選 "進階網域選項"
  • 設定 "DC IP/FQDN" (DNS 伺服器)   "網域的 Netbios 名稱"  "網域 FQDN" 
設定完後 Synology 會詢問 AD DC 的 administrator 密碼, 然後進行一些連線檢查,  都通過的話, 在 "網域使用者" 及 "網域群組" 就會出現  samba AD DC 上所設定好的資料.  之後就可以透過網域使用者或群組來設定 NAS 使用權限.


管理  AD DC 裡的使用者/群組資料

我要讓 AD DC 裡的使用者/群組資料同步的來源是 mysql ,  因此自己寫 php script 先從 mysql 拉資料出來, 然後用 shell script 讀資料同步到 samba AD DC 裡.

script 寫的不好, 就不在這裡獻醜了.  不過有兩個經驗可以分享:

1. 在用 samba-tool  add user 時, 有參數可以直接設定 password .
但是平日太習慣一遇到問題就 google,  沒去查 samba-tool 本身的文件, 直接 google 網路上其他人的設定經驗, 結果大部份文件因為不是用 script 處理, 所以沒有需求要直接帶參數設定密碼, 結果繞了半天路才發現可以直接設定, 浪費了不少時間.  samba-tool 在新增使用者時, 可以直接設定一些 attribute , 例如:

samba-tool user create $user $passwd --mail-address "$email" --department "$depart" --description "$name"

2. samba-tool 本身不提供 "修改" 使用者資訊的功能, 除了密碼以外.
也就是如果要修改使用者資訊, 要透過其他方式.
如果刪除使用者重新新增,  實際上會是不一樣的使用者 (ID).  這點從 Synology 同步過後的資料可以明顯看出.
如果在同步後刪除了某個使用者, 再新增名稱一樣的使用者, 從 Synology 同步後會發現該使用者的家目錄是一個新的位置, 原本的家目錄就只有 admin 可以看到了.


變更 AD DC 使用者資料的方法

要修改使用者資料 ( attribute ,  例如 email ) , 要透過 samba 本身提供的 ldap 相關指令.
使用上和 openldap 的指令很像但又有些差異, 所以一開始我誤以為是 openldap 的指令, 試了半天才發現錯了.

例如 openldap 有 ldapsearch ,  samba 是 ldbsearch,   openldap 有 ldapmodify,  samba 是 ldbmodify  .  指令看起來很像, 但參數不一樣,  而且 samba 的 ldb series 是不直接吃 stdin.

要用 ldbmodify 來修改 attribute,  預設是要先編寫一個 ldif file , 裡面定義好要 modify/add/delete 的參數和指令, 然後再把 ldif file 餵給 ldbmodify 指令來執行

如果要在 script 下指令,  會類似這樣的 command

echo -e "dn: CN=duan,CN=Users,DC=piip,DC=pro\nchangetype: modify\nreplace: department\ndepartment: 資訊室\n" | ldbmodify -H ldap://www2 -k yes -b CN=duan,CN=Users,DC=piip,DC=pro

在執行 ldbmodify 之前, 要先用 kinit 登入 administrator 以取得權限
所以在用 samba-tool 新增使用者之前, 一定要小心, 否則修改起來前會很麻煩的.


最後貼上當初設定 AD DC 做的簡易筆記, 從一些訊息可以大略看出當初設定遇到的小問題, 像是 password 預設要求的 policy 太嚴格之類的.

http://weiwenku.net/d/152352
https://www.tecmint.com/install-samba4-active-directory-ubuntu/

1. sudo apt-get install samba krb5-user krb5-config winbind libpam-winbind libnss-winbind smbldap-tools ldb-tools
   kerb5 server : www2.piip.pro
2. cd /etc/samba; mv smb.conf /tmp
3. samba-tool domain provision --use-rfc2307 --interactive
   "ERROR(ldb): uncaught exception - 0000052D: Constraint violation - check_password_restrictions: the password does not meet the complexity criteria!"  :  password too weak , re-run command
4. systemctl start samba-ad-dc.service
   "Failed to start samba-ad-dc.service: Unit samba-ad-dc.service is masked."  : systemctl unmask samba-ad-dc , systemctl enable samba-ad-dc

5. verify
   a. samba-tool domain level show
   b. kinit administrator@PIIP.PRO 
      "kinit: Cannot find KDC for realm "PIIP.PRO" while getting initial credentials"  :  edit /etc/kerb5.conf 

6 extra
  a. sudo samba-tool domain passwordsettings set --complexity=off  ,  no complex password needed
  b. sudo samba-tool domain passwordsettings show , show policy of password
  c. sudo samba-tool domain passwordsettings set --min-pwd-age=0
     sudo samba-tool domain passwordsettings set --max-pwd-age=0
     sudo samba-tool domain passwordsettings set --min-pwd-length=6
     https://lists.samba.org/archive/samba/2013-August/174949.html



http://weiwenku.net/d/157028

1. sudo samba-tool user create duan  // add samba user
2. samba-tool user list
3. samba-tool user delete [username]
4. samba-tool user setpassword [username]
5. samba-tool user enable/disable [username]
6. samba-tool gorup add/list/delete/listmembers/addmembers/removemembers

7. sudo systemctl disable winbind.service; sudo systemctl stop winbind.service ; sudo service samba-ad-dc restart
8. wbinfo -g
9. wbinfo -u
10. wbinfo -i [username]


https://linux.cn/article-8097-1.html

1. sudo apt-get install ntp ntpdate
   a. http://www.pool.ntp.org/zone/asia  , select ntp server
   b. edit /etc/ntp.conf
      change the pool server to "tw.pool.ntp.org"
      add config under 'driftfile',  "ntpsigndsocket /var/lib/samba/ntp_signd/"
      add config under 'restrict source', "restrict default kod nomodify notrap nopeer mssntp"
   c. sudo chown root:ntp /var/lib/samba/ntp_signd/
   d. sudo chmod 750 /var/lib/samba/ntp_signd/
   e. sudo systemctl restart ntp
   f. verify
      sudo netstat -tulpn | grep ntp
      ntpq -p
   g. force sync,  ntpdate -qu www2

1 則留言:

Mililu123 提到...
作者已經移除這則留言。