php - Mkdir() 设置权限 777

标签 php permissions

如何为 777 以下的文件夹设置权限?

 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);

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

drwxr-xr-x

我希望它设置为:

drwxrwxrwx

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

最佳答案

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

话虽这么说,我已经看到 mkdir() 这样的问题之前,通常是因为某个umask在正在设置的系统上,强制新创建的文件夹具有 755 权限。做具体的chmod()不过,调用即可解决问题:

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

但是,更好的解决方案:解决您的权限/安全问题。只需设置正确的所有者(PHP 运行的进程),这将避免设置 777 权限,但将允许正确的上传处理。这应该已经是默认值,但您可以通过以下方式强制它:

// 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 引起的,在这种情况下 chmod 777 无论如何也不会对你有太大帮助。通常是httpd_public_content_rw_t上传文件夹需要上下文。

关于php - Mkdir() 设置权限 777,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37270166/

相关文章:

php - 如何清除准备好进行 fwrite 的文本文件

android - 在获取电子邮件附件名称时获取权限错误 java.lang.SecurityException : Permission Denial on 3. x Android 设备

c# - 更好的方式来构建我在 View 字段上执行用户权限的方式

Sharepoint 权限问题 - "Access Denied"

PHP 设计模式 : Multiple websites inside one script

php - spatie/laravel-permission没有名为 `edit_project`的权限作为后卫 `api`

javascript - 时间值的 Jquery 串联

php - Facebook 应用程序中的 fatal error : Call to a member function getLongLivedSession() on a non-object

android - Kindle Fire 和 disable_keyguard 权限

java - 如何使用java运行setup.exe文件