【问题标题】:Laravel - Create file with specific user, group and permissionsLaravel - 创建具有特定用户、组和权限的文件
【发布时间】:2017-03-14 15:21:03
【问题描述】:

我尝试使用put 创建一个文件并授予该文件777 的权限。

如果我这样创建文件:

use File;

...

$content = "<?php echo 'test'; ?>";
$file   = app_path() . '/Http/Controllers/test.php';
File::put($file, $content);

但是,文件是使用以下权限创建的:

-rw-r--r-- 1 daemon daemon 2,2K Mär 14 08:08 test.php

另外,用户和组是daemon 而不是root

如何使用用户和组root 和权限rwxrwxrwx 创建文件?

例如

-rwxrwxrwx 1 root root 2,2K Mär 14 08:08 test.php

我还将这些行添加到我的/etc/sudoers

www-data ALL=(ALL) NOPASSWD: /bin/chmod 
www-data ALL=(ALL) NOPASSWD: /bin/chown
www-data ALL=(ALL) NOPASSWD: /bin/chgrp

但我仍然得到chmod(): no permission,代码如下:

File::chmod($unitPath, 0777);
chown($unitPath,"root");
chgrp($unitPath,"root");

【问题讨论】:

  • 例如,您必须使用shell_exec 执行 linux 命令。
  • 你为什么使用 File::put 而不是 fopen 或 file_put_content
  • @AnnSophieAngermüller,因为它的编码速度更快

标签: php linux laravel laravel-5.4


【解决方案1】:

Laravel 内置了对修改 mod 的支持

例如:

File::chmod($file,0755); //the leading zero is a must

不幸的是,它的 Filesystem 模块中没有 chown,但你可以调用 php one

chown($file,"root");

换组

chgrp($file,"group");

请注意:如果您不是超级用户,即使您可以 sudo,更改组和所有者也会失败。

【讨论】:

  • 我试过了,我总是得到chmod() no permission 我还把它添加到我的/etc/sudoerswww-data ALL=(ALL) NOPASSWD: /bin/chmod www-data ALL=(ALL) NOPASSWD: /bin/chown www-data ALL=(ALL) NOPASSWD: /bin/chgrp
【解决方案2】:

我用shell_exec()解决了这个问题

shell_exec('sudo chmod 0777 '. $unitPath);
shell_exec('sudo chown root:root '. $unitPath);

通过在文件/etc/sudoers 中输入这些行,确保www-data 被允许执行命令。

www-data ALL=(ALL) NOPASSWD: /bin/chmod 
www-data ALL=(ALL) NOPASSWD: /bin/chown

重要!始终使用visudo 编辑/etc/sudoers,否则您很容易产生语法错误并损坏文件并失去使用sudo 的可能性,并且您需要通过从live cd 启动来修复您的系统。

【讨论】:

  • 授予 sudo 访问 www-data 的权限是很大的安全风险。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 2017-08-09
  • 2015-10-16
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多