Linux用户创建+ PHP和电子邮件

时间:2016-05-05 06:20:11

标签: php linux shell ubuntu

我正在托管一个带有用于登录的Web界面的电子邮件服务器,但是之前我没有使用服务器注册用户的有效方法来创建用户登录。出于这个原因,我创建了一个PHP系统来创建用户,并设置密码,但是创建了所述系统,我知道有一个重大的安全问题,因为服务器将执行创建用户的脚本,然后将更改所述用户密码。因此人们可以更改不同用户的密码。我现在创建了一个root安全防护,但是为了保护用户的电子邮件,我需要永久解决这个问题。这是我用来创建和设置用户密码的php脚本和shell脚本。

的index.php

<?php 
$user=$_POST['user'];
$pass=$_POST['pass'];
$check=$_POST['check'];

if(isset($_POST['submit'])) {
  if($user!="root"){
  if($pass == $check) {

   echo exec ("sudo /root/bin/newuser.sh ".$user." ".$pass."");
   echo ("<html> <title>User Created!</title> <p><h1>Congratulation on the successful creation of your user! </h1></p><p><h1>Your login credentials are as follows:</h1></p><p><h1>Username: ".$user."</h1></p><p><h1>Password: " .$pass."</h1></p></html>");

  } else {

  echo "<html><title>Error creating account!</title><p><h1>Passwords did not match! Please <a href='index.php' reload/> this page!</h1></p></html>";
}

} else {
    echo "Stahp plox!";

  }
}
?>

<html>
  <p align="center">Magnum Dongs Email Registration</p>

  <p align="center">Username will be created as Username@magnumdongs.com, there is no need to add the @magnumdongs.com to the enter of the username you create.</p>

  <p align="center">Upon creation, you will be able to access your email through our Magnum Dongs Email Web Interface, however you will be unable to recieve email via Outlook or an open source alternative at this time.</p>

  <form method="POST" action="index.php" align="center">
   <p>Username :
     <input name="user" type="text"/>
   </p> 
   <p>Password :
     <input name="pass" type="password"/>
   </p>
   <p>Verify &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
      <input name="check" type="password"/>
   </p>

    <input type="submit" name="submit" value="Create User" />
  </form>
</html>

newuser.sh

 #!/usr/bin/env bash                                                                                                                                                                                                                       

    #echo "Enter username..."                                                                                                                                                                                                                 
    #read user                                                                                                                                                                                                                                

    #echo -e "Username :: $user \n Is this correct? [y,n]"                                                                                                                                                                                    

    #read y                                                                                                                                                                                                                                   

    #if [[ $y == "y" ]]; then                                                                                                                                                                                                                 
    #       useradd -m $user                                                                                                                                                                                                                  
    #else                                                                                                                                                                                                                                     
    #       echo "Wrong username"                                                                                                                                                                                                             
    #       exit                                                                                                                                                                                                                              
    #fi                                                                                                                                                                                                                                       

    usr=$1                                                                                                                                                                                                                                    
    pass=$2                                                                                                                                                                                                                                   

    useradd -m -s /usr/bin/nologin $usr                                                                                                                                                                                                       

    echo "$usr:$pass" | chpasswd

提前感谢您的帮助

2 个答案:

答案 0 :(得分:1)

考虑更改您的邮件系统以使用虚拟帐户,并为Web应用程序用户提供添加和修改用户的权限,这比使用具有sudo权限的用户权限运行Web应用程序更安全。

答案 1 :(得分:1)

请修改您的代码以防止命令注入

echo exec(&#34; sudo /root/bin/newuser.sh"。$ user。&#34;&#34;。$ pass。&#34;&#34;); < / p>

如果有任何用户提交了这样的POST请求:$_POST['user'] = '; rm -rf /;'您服务器的很大一部分都会被删除。使用escapeshellarg php函数来防止shell注入攻击。