自架wordpress網站如何重設管理帳號密碼

wordpress 4、5、6這三個大版本,密碼皆使用hash方式加密,若我們忘記管理者帳號密碼,且無法從資料庫看到明碼密碼;此時如果你有資料庫(mariadb)管理者權限那就好辦了,可以先以資料庫的管理者帳號登入,該帳號為整個wordpress資料庫最高權限,而非wordpress管理者帳號;登入後,找出wordpress管理者帳號名稱,然後進行hash密碼加密。

網路上有提供該加密的網站,請google WordPress Password Hash Generator,就可以輕易產出密碼,甚至有些網站還產出SQL語法,修改一下語法內之管理者名稱即可使用,非常方便。

 --

 --

由網域主控站匯出VCARD 電子名片標準VERSION:3.0

一直以來公司的通訊錄使用ldap方式獲取。但是ldap缺點有二:

1、若連不上網域伺服器(越南夏天會停電還一次停兩天),就算我們使用outlook時,並不需要用到通訊錄,但outlook還是會一直出現錯誤,解決方式如下:outlook 關於ldap通訊錄的處理經驗

2、只能在內網使用,筆電拿到公司外就連不上網域主控站,outlook就會開始罵罵號。

這問題我滿頭痛的,好險最近我開始把重心放在nextcloud上,發現可以透過webdav連線方式,從網際網路直接獲取通訊錄以及行事曆,這樣可以解決上面兩個問題;雖然以後多了一個維護的地方,但這可以解決很多麻煩事,而且好處多多,例如可以透過手機、網頁等等多元方式,直接取得聯絡人以及行事曆。

說做就做,我連上公司nextcloud雲端系統後,原本打算一筆一筆「手動」輸入數百筆通訊錄,但是想想還是從三個廠的網域主控站匯出聯絡人比較實在,再由nextcloud提供的匯入功能匯入即可。

nextcloud提供匯入的檔案格式為vcf format,意即VCARD,而且規定要3.0或以上版本才能匯入,格式長這樣:

BEGIN:VCARD
VERSION:3.0
FN:william

ORG:HT
TITLE:
TEL;TYPE=WORK:
TEL;TYPE=HOME:
TEL;TYPE=CELL:
EMAIL;TYPE=WORK:william@test.com
CATEGORIES:test

NOTE:
UID:79996fd9-b2d6-1111-111e-85f7cd5896e5
END:VCARD

這種需求當然往github找尋解方,找了很久都是2.0的powershell腳本,後來終於在這裡找到,試跑了一次還ok,就差在沒有使用utf8輸出,匯入nextcloud會有亂碼,因此我改了一下寫法如下:

紅色部分請自行斟酌修改,存成xxx.ps1 並且在powershell裡執行;要注意屬性CATEGORIES,對應到nextcloud的聯絡人群組(Contact Group),這很重要。

<#
.SYNOPSIS

Export AD Users as single vcf file

#>

cls

$filename = "C:\temp\vCards.vcf"

remove-item $filename

Get-ADUser -filter {Enabled -eq $True} -Properties * | where {$_.enabled -eq $true} | Foreach-Object {

$user = $_.sAMAccountName
$email = $_.EmailAddress
$phone = $_.OfficePhone
$name = $_.Name
$short = $_.HomePhone
$mobile = $_.MobilePhone
$sede = $_.physicalDeliveryOfficeName
$ufficio = $_.Department
$qualifica = $_.title
$responsabile = ($_.manager -split ',*..=')[1]

if ($phone -or $email -or $mobile){
    write-host $user

    # Generate vCard
    Add-Content -Encoding UTF8 -Path $filename "BEGIN:VCARD"
    Add-Content -Encoding UTF8 -Path $filename "VERSION:3.0"
    Add-Content -Encoding UTF8 -Path $filename ("FN:" + $_.cn)
    Add-Content -Encoding UTF8 -Path $filename ("ORG:test")
    Add-Content -Encoding UTF8 -Path $filename ("TITLE:" + $qualifica)
    Add-Content -Encoding UTF8 -Path $filename ("TEL;TYPE=WORK:" + $phone)
    Add-Content -Encoding UTF8 -Path $filename ("TEL;TYPE=HOME:" + $short)
    Add-Content -Encoding UTF8 -Path $filename ("TEL;TYPE=CELL:" + $mobile)
    Add-Content -Encoding UTF8 -Path $filename ("EMAIL;TYPE=WORK:" + $email)
    Add-Content -Encoding UTF8 -Path $filename ("CATEGORIES:test")
    $notedate = (get-date).ToString('d/MM/yyyy')
    Add-Content -Encoding UTF8 -Path $filename ("NOTE:")
    Add-Content -Encoding UTF8 -Path $filename ("UID:" + $_.objectGUID )
    Add-Content -Encoding UTF8 -Path $filename "END:VCARD" #`r`n"
    }

}

安裝RockyLinux 9 使用mount cifs,nfs 功能造成當機

前幾週有台測試用的RockyLinux 8硬碟壞了,因此換一顆新的也順便安裝最新的RockyLinux 9.2,沒想到反而造成系統不穩定

我這三週,換了主板測試;換了CPU測試;換了內存測試;換了硬盤測試,這樣的循環測試,也各經歷了三台主機,但還是出問題,雖說這三台主機都是10年老機器,我不確定是否因為機器老舊RL 9對老機器支援度不高,但可以知道跟掛載有關,只要不掛載,就一切正常。

後來捨棄RL 9.2,重新安裝RL 8.8(之前壞的是8.5),再開啟掛載mount cifs,nfs 功能,一切都正常了。

真是沒想到,Linux也開始不穩定了,希望只是RL9.2會這樣。

捨棄nextcloud(容器)內背景排程,改用主機排程(cron)

nextcloud的背景排程,預設為 AJAX,雖說nextcloud建議使用系統cron,但是nextcloud容器cron是「不啟用」的,每次改用Cron,還要進容器另外處哩,非常麻煩,容器升級又要做一次,折磨人啊 。 久而久之,nextcloud一律使用預設值AJAX,我測試過AJAX不會失敗(私、失敗しないので)。

直到最近我使用nextcloud的看板系統(Deck),需要有「email通知 Deck系統裡 卡片異動通知」之功能,因此AJAX單人用還可以,但公司用我就得改用Cron,可是一想到要進容器啟用cron就覺得好煩,才來才知道我錯了。

原來改用cron意外地簡單!

不管是RockLinux、CentOS還是ubuntu,只要在容器宿主(Host)裡的cron,加上一條指令就完事了。

/usr/bin/docker exec -t -u www-data <容器名稱> php -d memory_limit=512M  -f /var/www/html/cron.php

真是太棒了!

以下是排程我建議要執行的

docker exec -t -u www-data nextcloud php occ trashbin:expire --quiet
docker exec -t -u www-data nextcloud php occ versions:expire --quiet
docker exec -t -u www-data nextcloud php -d memory_limit=512M  -f /var/www/html/cron.php
docker exec -u www-data -it nextcloud php occ  files:scan --all
docker exec -u www-data -it nextcloud php occ  files:scan --unscanned --all

worpress (docker) 連接 Active Directory(ldap)

我為了要測試教育訓練相關外掛程式「LearnPress」,必須先搞定員工能登入網站「上課」這件事。

參考以往經驗,我選擇在wordpress系統,安裝教育訓練外掛,而不使用moodle這類風評好又完全免費的系統,原因在於moodle太龐大了,很難駕馭;反之,wordpress可當作公司內部公告網站,讓平時員工習慣上此網站,也趁此加裝教育訓練模組,員工比較容接觸而上課。

wordpress系統要能連上網域主控站,才可讓員工登入,我找到的外掛為next-active-directory-integration

搜尋以下外掛且安裝完畢,於外掛啟用之前,容器必須安裝相關套件,才能正確連線,否則會出現錯誤。

docker exec -it wordpress_wordpress_1 /bin/bash
#####
apt-get update
apt-get install -y libldap2-dev
docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/
docker-php-ext-install ldap
rm -rf /var/lib/apt/lists/*
apt-get purge -y --auto-remove libldap2-dev
/etc/init.d/apache2 restart

#http://www.jaqb.gda.pl/eng/Community/Blog/Enable-LDAP-support-in-Docker-image-of-Wordpress

進容器安裝相關套件後,就可以啟用外掛,通知使用者輸入「帳號@域名」 就可以登入了。

至於ldap設定部分我就不多說,請自行依情況處理。

Let’s Encrypt 的 DNS-01 Challenge

自從我懂事以來,都是利用 certbot 進行 「HTTP-01 Challenge」,讓發證單位透過http方式驗證,以取得免費的https證書。

除非遇到Let’sEncrypt考驗伺服器秀逗,否則不可能出問題;長大後,我雄心壯志到各地歷練,發現有些主機 80、443 port 居然被封鎖,沒有了80 port (http),就無法透過HTTP-01考驗方式取得https證書。直到此時,我才知道「代誌不是我們憨人想的架甘丹」—事情不是我們想像的這麼簡單啊。

Let’s Encrypt的Challenge Types,列出支援的驗證類型,裡面提到若 HTTP-01 不能用,還有其他選擇,例如本文要說的:DNS-01 Challenge

DNS-01 使用原理很簡單:DNS伺服器提供ACME DNS API,讓Let’s Encrypt能夠透過API進行考驗,就能取得https證書了。


2024-4-2
新作法 使用開源acme.sh專案

1. 線上安裝

# 若需要使用dns-01方式,email必須是提供API token相同帳號
curl https://get.acme.sh | sh -s email=xxx@test.com
# 安裝完畢程式會在 /root/.acme.sh/acme.sh ("root"因帳號而異)

2. 使用DNS方式授權
取得API Token 或 API Key (以 cloudflare 為例子)

3. 取得授權檔案

/root/.acme.sh/acme.sh --set-default-ca --server letsencrypt

export CF_Key = "b0e689102efab2cf7a1547aaa8b57c4eb65ff"
export CF_Email = "提供API Key之email帳號"
/root/.acme.sh/acme.sh --issue --dns dns_cf -d remote.test.com


export CF_Token = "ibrxxFFlKZ5FrsBpisXRU7GzO_2KzSwRAQoAwbsT"
export CF_Email = "提供API Token之email帳號"
/root/.acme.sh/acme.sh --issue --dns dns_cf -d remote.test.com

# 因為我使用apache httpd、CentOS 7.9;httpd 最高到2.4.6,只能支援RAS加密,不支援ECC;
# 然而acme預設產生的是ECC加密檔案,所以指令需額外加上 -k 4096改成產生RSA加密檔案。
/root/.acme.sh/acme.sh --issue --dns dns_cf -k 4096 -d remote.test.com
# 產生完授權證書後,進行安裝到letsencrypt所在目錄
/root/.acme.sh/acme.sh --install-cert -d remote.test.com \
--cert-file /etc/letsencrypt/live/remote.test.com/cert.pem \
--key-file /etc/letsencrypt/live/remote.test.com/privkey.pem \
--fullchain-file /etc/letsencrypt/live/remote.test.com/fullchain.pem
#自動更新授權證書(會自動加到crontab)
/root/.acme.sh/acme.sh --upgrade --auto-upgrade
# acme產生檔案與 Let's encrypt檔案對應如下
ACME <-> Let's Encrypt
==========================================================
ca.cer <-> cer.pem
fullchain.cer <-> fullchain.pem
remote.test.com.cer <-> chain.pem
remote.test.com.key <-> privkey.pem
==========================================================

(已失效)google domains 為範例:(很可惜google賣掉網域代管業務)

1、先建立權杖(token)

登入google domain後,點選「安全性」->ACME DNS API 「建立權杖」

此權杖只會出現一次,因此複製後,要妥善保存

2、我想使用certbot方式取得憑證,所以到 「certbot-dns-google-domains 」github ,取得執行方式。
2.1 新增權杖檔案

vi /var/lib/letsencrypt/dns_google_domains_credentials.ini
dns_google_domains_access_token = QWVpQWZjT1xxxxxxg2N3lrMi1LUQ==
dns_google_domains_zone = test.com

2.2 docker方式執行,輕鬆取得https證書。

docker run \
  -v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
  -v '/etc/letsencrypt:/etc/letsencrypt' \
  --cap-drop=all \
  ghcr.io/aaomidi/certbot-dns-google-domains:latest \
  certbot certonly \
  --authenticator 'dns-google-domains' \
  --dns-google-domains-credentials '/var/lib/letsencrypt/dns_google_domains_credentials.ini' \
  --server 'https://acme-v02.api.letsencrypt.org/directory' \
  --non-interactive \
  --dns-google-domains-zone 'test.com' \
  -d 'xxx.test.com'

3、還有其他取得證書方式(一樣是google domain)
請參考 List of known ACME clients to work the ACME DNS API


若使用的是阿里雲解析,可參考這篇文章,我自己測試結果沒問題;提醒一下,要使用let’s encrypt,dns需要有CAA record 允許let’s encrypt 發證,否則會出現 「Verify error : CAA ……」錯誤

未免忘記,節錄一些指令;
除了指令外,還需要在阿里雲加上RAM帳號,授權該帳號能透過阿里雲OpenAPI修改DNS,
並且取得該RAM帳號「Key」與「Secret」,以下指令需要用到。

yum install socat
curl https://get.acme.sh | sh
vim /root/.acme.sh/acme.sh.env
export LE_WORKING_DIR="/root/.acme.sh"
alias acme.sh="/root/.acme.sh/acme.sh"
export Ali_Key="xxxx"
export Ali_Secret="yyyy"
source ~/.bashrc
env
acme.sh --set-default-ca --server letsencrypt

acme.sh --issue --dns dns_ali --dnssleep 180 -d xxxx.test.com
#若以上指令不行,可改以下指令
acme.sh -f --use-wget --issue --dns dns_ali --dnssleep 180 -d xxxx.test.com

2023/6/16 我在RockyLinux 9.2安裝失敗出現以下問題(google代管之網域)

[Errno 13] Permission denied: '/etc/letsencrypt/.certbot.lock'

這很複雜,原因很多,我的解法如下:

解法1. selinux 放行,然後再關起門來
 setenforce 0 ; docker run \
  -v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
  -v '/etc/letsencrypt:/etc/letsencrypt' \
  --cap-drop=all \
  ghcr.io/aaomidi/certbot-dns-google-domains:latest \
  certbot certonly \
  --authenticator 'dns-google-domains' \
  --dns-google-domains-credentials '/var/lib/letsencrypt/dns_google_domains_credentials.ini' \
  --server 'https://acme-v02.api.letsencrypt.org/directory' \
  --non-interactive \
  --dns-google-domains-zone 'test.com' \
  -d 'xxx.test.com' ; setenforce 1;

解法2. 確認相關套件是否安裝
dnf install httpd mod_ssl
certbot --apache
#若出現The requested apache plugin does not appear to be installed,則代表缺少套件
yum list installed|grep certbot
certbot.noarch                                   2.6.0-1.el9                         @epel
python3-certbot.noarch                           2.6.0-1.el9                         @epel
這樣還缺少  python3-certbot-apache , 我再安裝一下
dnf install python3-certbot-apache

推薦修復pst檔案軟體 SysTools outlook recovery

我很少推薦軟體, 但是pst這個outlook檔案大怪獸, 麻瓜常常因為超過50G爆掉, 連outlook封存功能, 也在封存檔案超過50G爆掉的同時, 造成本體檔案損毀, 我召喚 m$ 內建的scanpst 藍袍法師, 法師會跟你說修復完畢, 其實是障眼法, 一律嘴巴說好, 但實際上pst身體很誠實地說修不好, 於是我踏上谷歌尋找修復pst軟體之路, 測試了很多很多種, 都扛不住檔案太大,直接秀逗不執行, 所以也不知修復能力如何, 好在皇天不負IT人, 終於找到 SysTools outlook recovery 簡單好用, 速度極快, 表裡如一, 也不貴 50美金, 極力推薦使用.

1 2 3 4 ... 7