腳本內容(儲存為 chpasswd,賦予執行權限):
#!/bin/sh
# exec expect -f "$0" ${1+"$@"}
set password [lindex $argv 1]
spawn passwd [lindex $argv 0]
sleep 1
expect "assword:"
send "$password\r"
expect "assword:"
send "$password\r"
expect eof
將腳本複製到 Web 目錄(如 /var/www/ 或 /home/lighttpd/),確保 Web 使用者可讀執行。
編輯 /etc/sudoers(使用 visudo),允許 Web 使用者免密執行腳本:
# Apache (www-data)
www-data ALL=NOPASSWD: /var/www/chpasswd
# Lighttpd (lighttpd)
lighttpd ALL=NOPASSWD: /home/lighttpd/chpasswd
建立 changepassword.php,設定正確的腳本路徑:
<?php
$shellscript = "sudo /var/www/chpasswd"; // 根據實際路徑修改
// 此處省略表單處理與驗證邏輯,請參考原文下載完整源碼
?>
警告: 生產環境中請採用更完善的認證與授權機制,本文僅示範基本原理。