2013-02-20 26 views
4

我目前正在爲我的FTP服務器創建一個成員系統,以便我想訪問服務器,但是我正在使用的FTP服務器(proFTPd)利用linux用戶作爲每個成員的帳戶。所以我需要使用一個帶有php的html表單,當然這個表單可以訪問服務器並且能夠在系統上創建一個用戶。使用php創建linux用戶?

現在我已經完成表單的設置,驗證電子郵件/用戶名/密碼並將其保存到我的sql數據庫。我唯一缺少的就是創建新用戶來完成它。

我知道它並不總是最安全的事情,但是我確實想做到這一點,我不知道危險,因此任何幫助將是不錯...

至於現在從我總是習慣在Linux上創建用戶(或我的Ubuntu atleast版本):

useradd [username] -p [password] -d [/path_to_home_directory] -s [/bin/false] 

當然沒有括號。

我也知道php命令:shell_exec,exec,system()但是我已經嘗試過每一行這些行來創建用戶,並且什麼都不會起作用。

我做了一些更多的研究,發現Web服務器在www-data上運行(它應該是這樣),並且它無法訪問useradd命令。所以我'viduso'它,仍然沒有改變。

從我所看到的,我可以給www服務器上的腳本的數據訪問,然後將創建用戶作爲根,但我不知道如何將變量存儲在PHP中的腳本。

如果您需要更多的細節來幫助請問。這是我需要完成我最近2個月的項目的最後一件事,其中包括桌面應用程序和所有這些。這是如此接近,但我似乎無法得到它。

+0

看看這個:http://stackoverflow.com/questions/7300299/how-to-run-cmd-as-root-from-apache-centos/7300402#7300402每個人都建議運行一個shell腳本,它將以root身份創建用戶。 – Hast 2013-02-20 17:16:07

+0

@我見過這個,但是這回到了我對變量的問題。我不知道如何在系統的shell腳本中使用php中定義的變量。 – 2013-02-20 17:21:13

+0

這是什麼問題?傳遞一個php變量作爲shell腳本參數的參數。像'exec('./ myscript.sh'。$ var1。''。$ var2);' – Hast 2013-02-20 17:23:25

回答

3

你不應該創建UNIX用戶帳戶爲FTP服務,您應該結合你的proFTP服務器使用MySQL進行身份驗證(存儲賬戶在MySQL),所以在這種情況下,你並不需要創建一個Unix賬號,這將是遠更好的和安全的解決方案:

proFTP with MySQL

+0

這聽起來像一個好主意,我甚至都沒有想過要看看那個......非常感謝!如果我可以啓動並運行,我會再次回覆! – 2013-02-20 17:47:27

+1

這工作就像一個魅力。我在開始時遇到了SQL服務器問題,但與帳戶無關。再次感謝。非常感謝! – 2013-02-21 00:36:14

2

您可以在useradd中設置setuid bit,因此它以root訪問權限運行(例如)。但請注意:這非常危險。這將允許服務器中的任何用戶創建用戶。

無論如何,我認爲這是一個安全漏洞,允許web-php腳本創建帳戶!

+0

是的,我我也試圖避免這樣做。我不希望每個用戶都有權創建用戶。 – 2013-02-20 17:31:14

-1

腳本將是這樣的:

<?php 

$user_name = "uuttyy"; 
$user_pass = "passwer9911"; 

$ret_useradd = 0; 
$ret_passwd = 0; 

passthru('useradd -m '.$user_name, $ret_useradd); 

if ($ret_useradd) { 
     printf("Something wrong with useradd, code: %d\n", $ret_useradd); 
     exit(); 
} 

passthru('echo "'.$user_name.':'.$user_pass.'" | chpasswd', $ret_passwd); 

if ($ret_passwd) { 
     printf("Something wrong with chpasswd, code: %d\n", $ret_passwd); 
     echo exec('userdel '.$user_name); 
     exit(); 
} 

printf("All done!\n"); 

?> 

但是正確的答案是不要做這種方式,它具有安全性問題小號! 調整(或更改)您的FTP服務器以使用用戶數據庫,並將用戶添加到該數據庫。就像薩蒂什說的,proftpd + mariadb(mariadb是一個更好的分支,來自mysql)對此很有幫助

1

只是一個說明。使用控制面板類型的東西,您必須有時以root身份執行操作。我發現最好的方法是運行PHP控制面板,而不需要任何升級權限。製作一個安全的PHP Web應用程序是很困難的,因爲它沒有暴露主機系統。

如果控制面板需要進行需要root訪問權的更改或Web服務器用戶上方的任何訪問級別,最好將有關需要在Web服務器用戶正常訪問的地方進行的更改信息存儲在數據庫中或通過在Web用戶可以寫入文件的某處創建文本文件。信息存儲之前,用戶提交的數據可能會發生通常的衛生處理。

然後以root身份,每分鐘或每小時或其他任何權限運行cron腳本,從存儲的任何位置抓取數據並執行所需的操作。您也可以在此腳本中執行健全性檢查。

0

我認爲最安全的方法是將您的Web服務器用戶設置爲只有以useradd或adduser開頭的命令的sudoer,無論您的distrib是什麼。所以你不必讓你的web用戶成爲root用戶。