插件窝 干货文章 教你在 Linux 下做到一个文件即可读写,又只读~

教你在 Linux 下做到一个文件即可读写,又只读~

文件 filename 挂载 方法 540    来源:    2025-05-13

在 Linux 下实现文件既可读写又只读的方法

在 Linux 系统中,可以通过一些技巧实现文件表面上是只读的,但实际上仍可被特定用户或进程修改。以下是几种实现方法:

方法一:使用 chattr 命令设置不可变属性

  1. 首先设置文件为可写:

    chmod +w filename
    
  2. 然后使用 chattr 设置不可变属性:

    sudo chattr +i filename
    
  3. 此时文件看起来是可写的(权限显示为可写),但实际上无法修改:

    ls -l filename  # 显示可写
    echo "test" >> filename  # 会提示"Operation not permitted"
    
  4. 需要修改时,临时移除不可变属性:

    sudo chattr -i filename
    # 进行修改
    sudo chattr +i filename
    

方法二:使用 mount 绑定挂载

  1. 创建一个可写的原始文件:

    touch /path/to/real_file
    chmod 644 /path/to/real_file
    
  2. 创建一个只读的挂载点:

    mkdir -p /mnt/readonly
    
  3. 使用 bind 挂载并设置为只读:

    sudo mount --bind /path/to/real_file /mnt/readonly/readonly_file
    sudo mount -o remount,ro /mnt/readonly/readonly_file
    
  4. 这样:

    • 通过 /path/to/real_file 可以读写文件
    • 通过 /mnt/readonly/readonly_file 只能读取文件

方法三:使用文件系统ACL

  1. 设置文件所有者为特定用户(如admin):

    sudo chown admin:admin filename
    
  2. 设置文件权限为只读:

    chmod 444 filename
    
  3. 为特定用户添加写权限:

    setfacl -m u:admin:rw filename
    
  4. 这样:

    • 普通用户只能读取文件
    • admin用户可以读写文件

方法四:使用 overlay 文件系统

  1. 创建底层(可写)和上层(只读)目录:

    mkdir lower upper work merged
    
  2. 将文件放入 lower 目录并设置为可写:

    touch lower/filename
    chmod +w lower/filename
    
  3. 挂载 overlay 文件系统:

    sudo mount -t overlay overlay -o lowerdir=lower,upperdir=upper,workdir=work merged
    
  4. 这样:

    • 通过 lower/filename 可以读写文件
    • 通过 merged/filename 只能读取文件

注意事项

  1. 使用 chattr 方法时,需要 root 权限来修改不可变属性
  2. 挂载方法在系统重启后需要重新挂载
  3. ACL 方法需要文件系统支持ACL功能
  4. 根据具体需求选择最适合的方法

这些方法可以在不同场景下实现文件"看似只读,实则可写"的效果,根据你的具体需求选择最适合的方案。