gpt4 book ai didi

php - 从 PHP 获取 FACL/SetFACL

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:58 25 4
gpt4 key购买 nike

我需要通过 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com