php - 从 PHP 获取 FACL/SetFACL

标签 php linux shell acl

我需要通过 ACL 管理目录权限在 PHP 的 linux 机器上,我们设置了一个 Windows 共享并将其安装在本地 linux 机器上。我正在寻找一种方法来获取和设置 PHP 类中目录的权限,然后我可以使用它来与前端交互。我找到了 subutux back in 2010 的一些作品- 但不确定执行情况:

function getfacl($f){
  //inital parsing
  $facl = shell_exec("getfacl $f");
  $facl_ = explode("\n",$facl);
  //print_r($facl_);
  foreach ($facl_ as $line){
    // Getting creator
    if (!preg_match("/^# file.*/",$line) && preg_match("/^#.*/",$line)){
    $facl_rule = explode(": ",$line);
    //print_r($facl_rule);
      if ($facl_rule[0] == "# owner"){
      $facl_output['owner'] = $facl_rule[1];
      } else if ($facl_rule[0] = "# group"){
      $facl_output['group'] = $facl_rule[1];
      }
  }
  return $facl_output;
}

所以,我有两个问题:

  1. 以上是否为 GetFACL 完成了工作?我将如何运行 SetFACL 命令?
  2. 是否有任何其他已知的库可用于从 PHP 使用 linux ACL?

最佳答案

没有收到关于这个的任何回复。我最终让它工作了,所以我想我会发帖以防其他人遇到类似问题。

我们最终做的是从外部服务器上的 MS 目录在 linux 机器上创建一个共享挂载。从那里我们有权通过用户访问该安装。然后我使用了图书馆 phpseclib ,特别是 ssh2组件并运行 shell 命令以检索和运行 ACL。

例如,这里是用于检索 getfacl 的 php View :

set_include_path(get_include_path() . PATH_SEPARATOR . '../phpseclib');
include('Net/SSH2.php');

$ssh = new Net_SSH2('location');
if (!$ssh->login('user', 'pass')) {
   exit('Login Failed');
}

echo $ssh->exec('ssh shared_mount_user@shared_mount_domain getfacl -R /folder/folder/file);

我可以在类似的函数中运行我所有的目录命令,例如 setfacl、ls、rm 等。

我还可以检索 getfacl 并将其解析为特定部分,如下所示:

$facl = $ssh->exec('ssh shared_mount_user@shared_mount_domain getfacl /folder/folder');
$facl_ = explode("\n",$facl);
$users_array = array(); 
foreach ($facl_ as $line){
     if (!preg_match("/^# file.*/",$line) && preg_match("/^#.*/",$line)){
     $facl_rule = explode(": ",$line);
     if ($facl_rule[0] == "# owner"){
        $facl_output['owner'] = $facl_rule[1];
     } else if ($facl_rule[0] = "# group"){
        $facl_output['group'] = $facl_rule[1];
     }
  }
  if (!preg_match("/^#/",$line) && preg_match("/^user:/",$line)){
     $facl_user_rule = explode(":",$line);
     array_push($users_array,$facl_user_rule);
  }
}

最后,我编写了一个类,将所有这些放入漂亮的小实例中,这样我就可以执行类似 echo $FileManager->get_contents_array($ssh, $location); 这样的操作运行 ssh ls 命令并解析层次结构以显示在目录 UI 中。

希望这对某人有所帮助。

关于php - 从 PHP 获取 FACL/SetFACL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20200350/

相关文章:

linux - 添加到 Apache 上可用的站点

linux - 用于循环和删除的 Shell 脚本

linux - 如何从包含 PID 列表的文件中检查进程是否处于事件状态?

javascript - 从 ajax 调用返回 html 并格式化它

php - 检查重定向源

linux - AWS EC2 - 如何在新启动的实例上安装现有的 EBS (on/)

Java jar getResource 在 linux 中不工作

php - Eloquent 多对多关系从数据透视表访问表列值

php - 如何在功能测试中模拟 Symfony 2 服务?

linux - chrome-gnome-shell 导致崩溃?