绕过PHP安全模式写入服务器。可能吗?

时间:2008-10-31 04:46:06

标签: php safe-mode

我遇到以下问题,因为服务器已启用安全模式,并且正在不同用户下创建目录:

  1. 我将我的脚本上传到服务器,它显示为属于'user1'。它所做的只是在创建新用户时创建一个新目录,以便它可以在其中存储文件。
  2. 创建了新目录,但它属于'apache'用户。
  3. 'user1'和'apache'是不同的用户;和安全模式已打开。因此php脚本无法写入新创建的目录。
  4. 现在我遇到了问题!
  5. 一种解决方案是关闭安全模式。此外,同事建议可以更改设置以确保目录与脚本位于同一用户下。所以我想看看后者是否可以完成。

    但我不得不问。我的问题有解决方案吗?

    我倾向于'不',因为在php级别实现了安全模式来解决它。此外,实际问题可能看起来像是在不同用户下创建的目录,因此编程修复可能只是一个创可贴修复。

3 个答案:

答案 0 :(得分:4)

我已经使用过这种解决方法:

而不是php mkdir,您可以通过FTP以适当的权限创建目录。

    function FtpMkdir($path, $newDir) {
       $path = 'mainwebsite_html/'.$path;
       $server='ftp.myserver.com'; // ftp server
       $connection = ftp_connect($server); // connection


       // login to ftp server
       $user = "user@myserver.com";
       $pass = "password";
       $result = ftp_login($connection, $user, $pass);

       // check if connection was made
       if ((!$connection) || (!$result)) {
          return false;
          exit();
       } else {
         ftp_chdir($connection, $path); // go to destination dir
         if(ftp_mkdir($connection, $newDir)) { // create directory
             ftp_site($connection, "CHMOD 777 $newDir") or die("FTP SITE CMD failed.");
             return $newDir;
         } else {
           return false;
         }

         ftp_close($connection); // close connection
      }

  }  

答案 1 :(得分:0)

您可以通过.htaccess文件(如果在Apache上)关闭特定目录的安全模式。

php_value safe_mode = Off

您可能需要让您的托管服务提供商在httpd.conf中为您进行此更改。

答案 2 :(得分:0)

我已经成功将上传目录的组位设置为sticky。 然后PHP可以在其中创建目录并写入它。

http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories

chmod g + s 目录