btrfs支持chattr/lsattr,可以使用+i或者+a来锁定文件或者文件夹,即使是root权限也不能随意删除,避免误删。
只有备份能解决误删的问题,raid是没用的。
这是之前我自用的kodexplorer的锁定文件插件,可供参考,用了很久。另:建议增加对软链的支持,这个应该不难。
<?php
class lockFilesPlugin extends PluginBase{
function __construct(){
parent::__construct();
}
public function regiest(){
$this->hookRegiest(array(
'user.commonJs.insert' => 'lockFilesPlugin.echoJs',
));
}
public function echoJs($st,$act){
if($this->isFileExtence($st, $act)){
$this->echoFile('static/main.js');
}
}
public function lock(){
$path = json_decode($_POST['path']);
$lock = $_POST['lock'] == '1';
$recursion = $_POST['recursion'] == '1';
$folderOnly = $_POST['folderOnly'] == '1';
foreach ($path as $v) {
$realpath = _DIR(iconv_app($v));
if ($lock && $recursion && $folderOnly){
self::ProcessLockFolderOnly($realpath);
}else{
exec("chattr ".($lock ? "+i" : "-ia")." ".($recursion ? "-R" : "")." '".$realpath."'");
}
}
}
private static function ProcessLockFolderOnly($path){
if (is_dir($path)) {
exec("chattr +i '".$path."'");
$childs = scandir($path);
foreach($childs as $child){
if ($child !== '.' && $child !== '..') {
self::ProcessLockFolderOnly(rtrim($path, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.$child);
}
}
}
}
}
|