首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >来自PHP的GetFACL/SetFACL

来自PHP的GetFACL/SetFACL
EN

Stack Overflow用户
提问于 2013-11-25 18:21:42
回答 1查看 1.8K关注 0票数 1

我需要通过ACL管理来自PHP上的目录权限,在那里我们已经设置了一个Windows,并将其挂载在本地linux上。我正在寻找一种获取和设置PHP类中目录的权限的方法,然后我可以使用它与前端进行接口。我发现了2010年的亚布图克斯的一些工作--但不确定执行的情况:

代码语言:javascript
运行
复制
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吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-13 17:18:17

这次没有收到任何回复。我最终让它发挥作用,所以我想我会张贴,以防其他人遇到类似的问题。

我们最终所做的是从外部服务器上的MS目录中在linux框上创建一个共享挂载。从那里起,我们就可以通过用户获得安装的权限。然后我使用库phpseclib,特别是ssh2组件和运行shell命令来检索和运行ACL。

例如,下面是用于检索getfacl的php视图:

代码语言:javascript
运行
复制
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并将其解析为特定的部分,如下所示:

代码语言:javascript
运行
复制
$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中显示。

希望这能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20200350

复制
相关文章

相似问题

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