我需要通过ACL管理来自PHP上的目录权限,在那里我们已经设置了一个Windows,并将其挂载在本地linux上。我正在寻找一种获取和设置PHP类中目录的权限的方法,然后我可以使用它与前端进行接口。我发现了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;
}
所以,我有两个问题:
发布于 2013-12-13 17:18:17
这次没有收到任何回复。我最终让它发挥作用,所以我想我会张贴,以防其他人遇到类似的问题。
我们最终所做的是从外部服务器上的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中显示。
希望这能帮上忙。
https://stackoverflow.com/questions/20200350
复制相似问题