我需要在PHP的Linux机器上通过ACL管理目录权限,我们已经设置了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;
}
所以,我有两个问题:
答案 0 :(得分:1)
没有收到任何回应。我最终得到了它的工作,所以我想我会发布以防其他人遇到类似的问题。
我们最终做的是从外部服务器上的MS目录在Linux机器上创建了一个共享安装。从那里我们通过用户拥有该权限。然后我使用库phpseclib,特别是ssh2组件,并运行shell命令来检索和运行ACL。
例如,这是用于检索getfacl的php的视图:
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。
希望这有助于某人。