使用ACL和Chroot Jail保护用户文件访问的逐步指南

62 阅读3分钟

使用ACL和Chroot Jail保护用户文件访问的逐步指南

引言

在最近的一个项目中,面临一个安全挑战:多个用户需要访问Linux服务器上的特定文件和文件夹,但不能拥有完整的系统访问权限。一些用户意外访问了其指定区域之外的文件,需要一个安全、可扩展的解决方案。不希望用户能够导航到其他文件系统或文件夹。

在评估了几种方法后,实施了访问控制列表(ACL)和chroot监狱的组合,完全解决了这个问题。以下是具体的实施方法。

挑战

问题: 管理的Redhat Linux版本8服务器面临以下情况:

  • 多个用户需要访问不同的目录
  • 每个用户应该只能看到和访问其特定文件夹
  • 一些用户正在导航到他们不应该访问的父目录
  • 传统的Linux权限(chmod/chown)不够精细
  • 随着用户基础的增长,解决方案需要易于管理

最初尝试的方法:

  • 基本Linux权限(chmod 750)- 过于严格;无法为多个用户提供不同的访问级别
  • Linux组 - 当用户需要不同的访问组合时变得混乱
  • 每个文件夹的单独用户账户 - 不可扩展且难以维护

这些方法都没有解决核心问题:用户仍然可以导航到其指定文件夹之外。

解决方案

实施了两层方法:

  • ACL(访问控制列表)- 用于精细的文件权限
  • Chroot监狱 - 将用户限制在特定目录

以下是逐步过程:

步骤1:设置目录结构

为便于ACL管理,组织了文件夹:

/home/
  ├── userdata/
  │   ├── user1_folder/
  │   ├── user2_folder/
  │   └── shared_folder/

创建命令:

sudo mkdir -p /home/userdata/{user1_folder,user2_folder,shared_folder}

步骤2:实施ACL实现精细权限

使用ACL而不是传统的chmod来设置特定的用户权限。

验证ACL是否启用:

mount | grep acl

设置特定用户权限:

# 给user1读写访问权限
sudo setfacl -m u:user1:rwx /home/userdata/user1_folder

# 给user2对共享文件夹的只读访问权限
sudo setfacl -m u:user2:r-x /home/userdata/shared_folder

# 查看当前ACL设置
getfacl /home/userdata/user1_folder

优势: 可以在同一文件夹上为不同用户提供不同的权限级别 - 这是基本chmod无法实现的。

步骤3:实施Chroot监狱

ACL控制了权限,但用户仍然可以导航到父目录。Chroot监狱将每个用户限制在其指定文件夹。

为SFTP用户修改SSH配置:

sudo nano /etc/ssh/sshd_config

添加以下行:

Match User user1
    ChrootDirectory /home/userdata/user1_folder
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
Match User user2
    ChrootDirectory /home/userdata/user2_folder
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

重要: Chroot目录必须由root拥有:

sudo chown root:root /home/userdata/user1_folder
sudo chmod 755 /home/userdata/user1_folder

创建可写子目录:

sudo mkdir /home/userdata/user1_folder/files
sudo chown user1:user1 /home/userdata/user1_folder/files

步骤4:重启SSH并测试

sudo systemctl restart sshd

# 测试连接
sftp user1@server-ip

关键要点

  • 在多用户环境中,ACL比chmod提供更多灵活性
  • 对于SFTP/SSH访问,Chroot监狱是必需的 - 仅ACL不够
  • 始终确保chroot目录由root拥有(755权限)
  • 在部署前使用非特权账户进行测试
  • 保持SSH日志启用以监控访问模式
  • 记录ACL规则 - 它们在ls -la输出中不可见

结论

结合ACL和chroot监狱有效解决了文件访问安全挑战。如果在管理需要受限访问的多个用户的Linux服务器,此方法将节省手动权限管理的时间。