收起左侧

建议使用chattr/lsattr增加文件/文件夹锁定功能

1
回复
172
查看
[ 复制链接 ]

6

主题

35

回帖

0

牛值

初出茅庐

2025-1-21 23:56:57 显示全部楼层 阅读模式

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);
                }
            }
        }
    }
}
收藏
送赞 1
分享

6

主题

7600

回帖

0

牛值

管理员

2025-1-24 23:08:27 显示全部楼层
感谢分享,这个我们会转给相关同事评估
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则