首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mkdir()设置权限777

Mkdir()设置权限777
EN

Stack Overflow用户
提问于 2016-05-17 15:48:56
回答 3查看 10K关注 0票数 1

如何为低于777的文件夹设置权限?

代码语言:javascript
复制
 mkdir(getcwd() . '/public/profile/usr'.$user->getId(), 0777, true);
 mkdir(getcwd() . '/public/profile/usr'.$user->getId() . '/patients', 0777, true);
 mkdir(getcwd() . '/public/profile/usr'.$user->getId() . '/picture', 0777, true);

这些文件夹的权限类型如下:

代码语言:javascript
复制
drwxr-xr-x

我希望它设置为:

代码语言:javascript
复制
drwxrwxrwx

你能告诉我如何解决这个问题吗?

EN

回答 3

Stack Overflow用户

发布于 2016-05-17 16:02:46

首先,没有充分的理由将文件夹或文件权限设置为777。觉得需要这样做的人通常要么是盲目地遵循(糟糕的)在线教程,要么是有一个他们无法修复的潜在安全/权限问题。通常,任何上传/写入问题都可以通过在文件夹上设置适当的所有者/组(通常是www-data或apache用户)来修复,777意味着任何人都可以在这些文件夹中编写或执行任何东西。你基本上就是在一个糟糕的社区里把后门开着,没有锁上。另请参阅How will a server become vulnerable with chmod 777?了解更多详细信息。

也就是说,我以前在mkdir()上见过这样的问题,通常是因为系统上设置了某个umask,强制新创建的文件夹具有755个权限。不过,执行特定的chmod()调用将会完成此操作:

代码语言:javascript
复制
mkdir(getcwd() . '/public/profile/usr'.$user->getId(), 0777, true);
chmod(getcwd() . '/public/profile/usr'.$user->getId(), 777);
// And so on...

但是,更好的解决方案:修复您的权限/安全问题。只需设置适当的所有者( PHP在其下运行的进程),这将避免设置777权限,但将允许正确的上载处理。这应该已经是默认设置,但您可以使用以下命令强制执行:

代码语言:javascript
复制
// This will get the user the PHP process is running under on Linux machines:
$user = `whoami`;

mkdir(getcwd() . '/public/profile/usr'.$user->getId(), 0755, true);
chown(getcwd() . '/public/profile/usr'.$user->getId(), $user);
// And so on

这将在该文件夹上设置755个权限,并设置PHP进程的所有权,这意味着PHP对该文件夹具有完全权限,但任何其他用户都没有。这更安全,但也不会降低方便性。

这个问题也可能是由SELinux引起的,在这种情况下,chmod777无论如何都不会对你有太大的帮助。通常,上载文件夹需要httpd_public_content_rw_t上下文。

票数 3
EN

Stack Overflow用户

发布于 2016-05-17 15:53:55

查看这篇文章:http://php.net/manual/de/function.mkdir.php

答案就在那里。

在使用递归参数时,请记住,如果在mkdir()之后使用chmod()来设置模式,而不会被uchar()的值修改,则需要对所有创建的目录调用chmod()。即:

代码语言:javascript
复制
<?php
mkdir('/test1/test2', 0777, true);
chmod('/test1/test2', 0777);
?> 

可能导致"/test1/test2“具有模式0777,但是"/test1”仍然具有来自mkdir()调用的模式0755。你需要做的是:

代码语言:javascript
复制
<?php
mkdir('/test1/test2', 0777, true);
chmod('/test1', 0777);
chmod('/test1/test2', 0777);
?>
票数 1
EN

Stack Overflow用户

发布于 2016-05-17 16:02:55

以下是许多可能的方法之一:

代码语言:javascript
复制
    <?php
        $baseDir    = getcwd() . '/public/profile/usr'. $user->getId();
        $arrFolders = array('/patients', '/picture');

        // FIRST chmod THE BASE DIRECTORY TO HAVE THE PERMISSIONS YOU WANT:
        chmod($baseDir, 0777);

        // LOOP THROUGH THE ARRAY OF FOLDERS YOU WANT TO CREATE & CREATE THEM WITH APPROPRIATE PERMISSIONS:         
        foreach($arrFolders as $folder){
            try{
                mkdir($baseDir . $folder, 0777, true);
            }catch(Exception $e){
                // HANDLE ANY EXCEPTION SHOULD ONE OCCUR...
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37270166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档