老派的outlook 使用習慣

我個人很喜歡老派這個字, 英文叫做 old school


周遭的人有好多好多老派的人, 他們不喜歡網頁版郵件, 只習慣使用單機版的outlook收發信件, 作業系統更是windows不做他想.
因為公司多了一個越南廠, 考量初期VPN自架, 不作為主力, 該廠的通訊錄就無法透過vpn, 以LDAP方式分享 .

可是outlook通訊錄就只有兩種 : MAPI, LDAP
MAPI可以是離線版, LDAP必須連線才能使用

偏偏老派的做風就是: 離線也要能寫寫郵件, 看看郵件(pop3完全下載), 與存取完整的通訊錄

這下好了, 我得準備離線版的通訊錄, 爬文好幾天, 終於找到一個方式跟大家分享:

  1. 網域伺服器新增排程, 可下指令自動產生csv版本的通訊錄
  2. 自己開發一個app , 方便老派的人使用, 將csv檔案自動匯入到outlook通訊錄

網域伺服器上, 可透過powershell執行指令,匯出csv通訊錄

Get-ADUser -Filter 'mail -like "*<domain>"' -SearchBase "<search base>" -Properties * | Select -Property DisplayName,GivenName,Surname,mail,Title,Department,Office | Export-CSV "<csv file location>" -NoTypeInformation -Encoding UTF8

以test.com為例子

Get-ADUser -Filter 'mail -like "*test.com"' -SearchBase "OU=taipei,DC=test,DC=com" -Properties * | Select -Property DisplayName,GivenName,Surname,mail,Title,Department,Office | Export-CSV "c:\aaa.csv" -NoTypeInformation -Encoding UTF8

我開發的windows app, 使用visual studio 2019 community version , 語言使用vb

https://github.com/WilliamFromTW/ImportFromCsvToOutlook
https://github.com/WilliamFromTW/ImportFromCsvToOutlook/releases

因為時間不多, 未來也不打算花太多時間在通訊錄上面, 爬文的過程只能找到零星vba for outlook版本或是程式片段, 四處碰壁, 無人可以解答, 頂多就是要你教老派的人, 使用outlook匯出匯入功能, 一堆步驟, 將csv檔案匯入到outlook, 這簡直是天方夜譚.
因此就自行開發,並且開源, 這樣直接編譯成可安裝執行的APP, 讓他們透過定期提供的csv檔案, 就能很方便匯入通訊錄了.

(docker)透過Web修改Active Directory密碼-PWM

微軟的網域主控站非常好用, 尤其用來管控帳號密碼.
但是修改密碼,就必須透過加入網域的主機才能修改, 有點不方便,
尤其有些人的電腦並沒有加入網域, 要是想改密碼更是麻煩.

基於APACHE 2.0授權的 https://github.com/pwm-project/pwm 就能協助我們修改密碼.

簡易安裝步驟:



確認AD安裝certificate service


產生ad自己的證書(需要有private key) , 否則無法使用port 636 + tls 加密方式連線


安裝


1. 下載做好的container
https://www.pwm-project.org/artifacts/pwm
下載最新版docker images .tar 檔案
如:
wget https://www.pwm-project.org/artifacts/pwm/build/2020-08-20T23_36_49Z/pwm-docker-image-2.0.0-SNAPSHOT.tar

2. 安裝
docker load –input=pwm-docker-image-2.0.0-SNAPSHOT.tar

3. docker 執行
docker run -d –name pwm -p 8443:8443 –restart always –dns=<active directory ip> -v “/opt/pwm/config/:/config/” pwm/pwm-webapp

4. 登入進行第一次安裝設定
https://ip:84443/


安裝過程注意事項:


1. 連線要用加密的方式,否則無法改密碼
2. 要提供管理者群組的LDAP
如:
CN=Domain Admins,CN=Users,DC=test,DC=com
3. 因為PWM額外提供安全提問, 這些提問並不是Active Directory原本的, 需要另外提供空間,此時請選擇local db存放.
其實這不是很重要, 忘了密碼,還能在域控直接修改

安裝成功後, 請先用管理者帳號登入, 登入時需要額外設定忘記密碼的安全提問(管理者可直接跳過),
此時要選擇修改設定檔案, 將修改密碼的複雜度降低(但不可低於原本網域設定), 我是順便將安全提問改成一個就好.

搭配httpd reverse proxy


需修改SiteURL,改完需要重開pwm才能生效
這種方式可以讓網址擁有正式的加密證書(e.g. let’s encrypt)

roundcubemail 加上Active Directory 通訊錄範例

修改config/config.inc.php
網域伺服器 192.168.1.1
網域: test.com

$config['address_book_type'] = 'ldap';

$config['ldap_public']['Global'] = array(
'name' => '台灣總公司',
'hosts' => array('192.168.1.1'),
'port' => 3268,
'user_specific' => false,
'base_dn' => 'dc=test,dc=com',
'bind_dn' => 'cn=administrator,cn=users,dc=test,dc=com',
'bind_pass' => 'password',
'ldap_version' => 3,
'search_fields' => array (
'mail','cn',),
'name_field' => 'cn',
'email_field' => 'mail',
'writable' => 'false',
'scope' => 'sub',
'sizelimit' => 6000,
'sort' => 'cn',
'filter' => '(&(mail=)(|(&(objectClass=user)(!(objectClass=computer)))))',
'fuzzy_search' => true,
'global_search' => true
);

2022/11/05

我後來使用docker doundcubemail 重新安裝, 因為用latest , 當時版本 1.6.x 版本 , 發現上面的設定已經不能用了, 改用以下設定(紅色部分需調整)

$config['address_book_type'] = 'ldap';
$config['ldap_debug'] = true;
$config['ldap_public'] = array(
    'MyAdLdap' => array (
        'name' => 'TW',
        'hosts' => array('網域主機IP'),
        'sizelimit' => 6000,
        'port' => 3268,
        'use_tls' => false,
        'user_specific' => false,
        'base_dn' => 'OU=group,DC=test,DC=com',
        'bind_dn' => 'user@test.com',
        'bind_pass' => 'password',
        'writable' => false,
        'ldap_version' => 3,
        'search_fields' => array(
           'mail',
           'cn',
        ),
        'fieldmap' => array(
            'name' => 'cn',
            'email' => 'mail',
            'surname' => 'sn',
            'firstname' => 'givenName',
        ),
        'sort' => 'sn',
        'scope' => 'sub', # or 'list'
        'filter' => '(&(mail=*)(|(&(objectClass=user)(!(objectClass=computer)))(objectClass=group)))',
        'global_search' => true,
        'fuzzy_search' => true,
        'vlv' => false,
    ),
);

詳請參考 https://github.com/roundcube/roundcubemail/wiki/Configuration:-LDAP-Address-Books#prerequisites

dovecot如何承接Active Directory的額外變數

這種小細節原本不想寫出來,但是很容易忘,又特別重要,
我在 dovecot v2.2發現的, 舉dovecot-ldap.conf.ext 為例子, 如何將AD的mail屬性值承接起來

user_attrs = mail=sieve=/home/vmail/%$/sieve/dovecot.sieve, mail=sieve_dir=/home/vmail/%$/sieve
上面粗黑體的 mail 傳送給sieve與sieve_dir這兩個變數(沒錯,你沒看錯,一堆等號,超怪異的), 
而這兩個變數利用 %$ 這個來承接最左邊的mail的數值:
例如AD上某帳號的數值為:test@kafeou.pw 
我們就能輕易變更整個dovecot系統的變數值,而且彈性很大,結果如下:
  sieve = /home/vmail/test@kafeiou.pw/sieve/dovecot.sieve
  sieve_dir = /home/vmail/test@kafeiou.pw/sieve

另外要注意的地方是, 這些變數原本所在的位置, 千萬不要移除, 就算預設值不對也沒關係(會被蓋過去),

否則會被當作沒此變數

CEntOS 7.8 postfix 新增lda 與 managesieve功能

2017 年曾經在centos 7.3版本讓postfix擁有vacation功能, 當時 dovecot 是1.x版 , 後來不慎直接upgrade 到2.x, 結果整個都不能用, 很慘,
之前2014年也在CentOS 6.x 新增過vacation, 也是耗了極大精神才弄出來. 這就是opensource的最大問題, 他可以直接停止更新舊版本, 新版本又必須大改才能相容.

現在我在 CentOS 7.8 再次挑戰lda managesieve功能, 請到這觀看,

帳密都是guest/guest

https://docs.kafeiou.pw/iammis/技術文章/HowTo/10031_(CEntOS7.8)新增lda_managesieve功能.txt

cetnos 7 + postfix 新增dkim功能

  1. 安裝

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y opendkim

  1. 產生private key與dns的TXT Record

opendkim-genkey -d <domain name>
cp default.* /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim

  1. 修改/etc/opendkim.conf
    確認該設定檔案有以下的設定( KeyFile /etc/opendkim/keys/default.private 要mark起來 )

Mode sv
Socket inet:8891@127.0.0.1
Canonicalization relaxed/simple
Domain <domain name>
#KeyFile /etc/opendkim/keys/default.private
KeyTable refile:/etc/opendkim/KeyTable
#ps 若使用測試軟體出現invalid data set, 請改成 KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts

  1. 修改 /etc/opendkim/KeyTable

default._domainkey.<domain name> <domain name>:default:/etc/opendkim/keys/default.private

以 test.com 為例子

default._domainkey.test.com test.com:default:/etc/opendkim/keys/default.private

  1. 修改 /etc/opendkim/SigningTable

*@<domain name> default._domainkey.<domain name>

以test.com為例子

*@test.com default._domainkey.test.com

  1. 修改 /etc/opendkim/TrustedHosts

127.0.0.1
<mail host name>
<domain name>

以 test.com 為例子

127.0.0.1
mail.test.com
test.com

  1. 新增以下設定 /etc/postfix/main.cf

smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

  1. 將/etc/opendkim/key/default.txt的資料更新到dns上

  2. 啟用service

systemctl start opendkim ; systemctl enable opendkim ; systemctl restart postfix

  1. 測試
    • opendkim-testkey -x /etc/opendkim.conf 若無錯誤訊息代表成功
    • 測試網站 https://www.appmaildev.com/

pve遇到硬碟已清空,但顯示尚在使用之解決方法

最近遇到pve 6.2 某硬碟解除lvm後, 發現還無法另作他用, 系統出現device mapper的狀態, 代表系統還認為正在使用中,
爬了一下文, 發現一個好用的指令 dmsetup status可以看出所有lvm狀態,


確認那些不再使用後, 使用 dmsetup remove 移除, 該硬碟才算是真正自由

pve maintenance mode

先前遇到一件事情, 其實說來話長, 也是因為covid-19造成的
因為無法親自到公司越南廠處理pve server, 偏偏又遇到pve不穩的狀況, 只好移除一些當時手動掛載的硬碟.

這下好了, 請當地的電腦公司人硬是移除手動掛載的硬碟 , 重開機後發現總是進入maintenance mode,
搞了好久才發現必須把/etc/fstab 的手動掛載硬碟資訊移除, 才能正常開機, 因此紀錄一下,以免重蹈覆轍.

pve 6上調整zfs快取大小

我自己在pve 6上使用zfs的經驗不是很順利;有遇到慢的、不穩的,現在可能還需要調整zfs的快取大小,才能讓zfs順利使用。
新增一個檔案 /etc/modprobe.d/zfs.conf
並修改如下:

範例為最小4G, 最大16G, 可自行依照主機實力設定,千萬不可多。 修改後重開機, 可下arcstat 查詢是否成功

options zfs zfs_arc_min=4294967296
options zfs zfs_arc_max=17179869184
options zfs zfs_flags=0x10

git server移轉注意事項

我工作上用的git server有兩個, 一個是吉茶(gitea), 另一個是吉累(gitlab), 因為重新使用吉碧麗(gitblit), 所以將吉累狠心地關閉, 因為他功能太多, 架構龐大, 太耗資源, 願意用的原因只有一個, 就是分類的方式比吉茶好, 現在終於來了一個分類更強的server – gitblit.

我將gitlab上面的git專案, 直接複製到gitblit 目錄上, 一切正常, 但卻遇到 lfs 檔案移轉失敗的現象, 也就是gitblit上面的lfs並無法真正的指向檔案實體位置, 全部都是空的.

我嘗試很多指令想解決這問題, 如 git lfs clean , git lfs pust –all 等等要麻就是無反應timeout, 要麻就是出現檔案不存在等等奇怪現象, 皇天不負苦心人, 我終於爬文爬到有位專家 https://github.com/sprohaska 提出解法 https://github.com/git-lfs/git-lfs/issues/1113 , 最後如願從client端將大檔案正確的放到新的gitblit上, 指令如下:

git lfs ls-files -l | awk '{ print $1 }' | xargs git lfs push --object-id origin

1 29 30 31 32 33 61