首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

使用 PHP 腳本修改 Linux/Unix 系統密碼完整指南

     編輯:PHP 綜合知識

前言

在 Web 開發中,有時需要讓使用者透過瀏覽器自行修改 Linux 或 Unix 系統帳號密碼。本文詳細說明如何結合 PHP、Shell 腳本與 sudo 機制,安全地實現此功能。

所需工具與環境

  • 修改密碼的 Shell 腳本(基於 expect)
  • sudo 權限設定
  • Apache 或 Lighttpd Web 伺服器
  • PHP 伺服端環境

步驟 1:安裝修改密碼的 Shell 腳本

此腳本利用 expect 自動化 passwd 指令互動,已在 Linux 與 FreeBSD 測試通過。請建立 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 目錄(Apache 為 /var/www/,Lighttpd 為 /home/lighttpd/):

chmod +x chpasswd
cp chpasswd /var/www/   # Apache
# 或
cp chpasswd /home/lighttpd/   # Lighttpd

測試執行:

$ chpasswd username password

步驟 2:配置 sudo 允許 Web 使用者以 root 身分執行腳本

Web 伺服器通常以非 root 使用者運行(Apache 為 www-data,Lighttpd 為 lighttpd 或 httpd)。編輯 sudoers:

# visudo

加入以下行(視 Web 伺服器而定):

# Apache
www-data ALL=NOPASSWD: /var/www/chpasswd

# Lighttpd
httpd ALL=NOPASSWD: /home/lighttpd/chpasswd

儲存離開後,Web 使用者即可免密碼執行該腳本修改系統帳號密碼。

PHP 呼叫範例

<?php
$username = escapeshellarg($_POST['username']);
$password = escapeshellarg($_POST['password']);
$cmd = "sudo /var/www/chpasswd $username $password";
$output = shell_exec($cmd);
echo $output ? "密碼修改成功" : "修改失敗:$output";
?>

安全性提醒

  • 務必對輸入進行嚴格驗證與轉義,防止指令注入
  • 限制可修改密碼的帳號範圍,避免 root 等特權帳號被修改
  • 建議搭配 HTTPS 確保傳輸加密
  • 記錄審計日誌追蹤異常操作
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved