在Linux系统中限制服务进程的访问权限是系统安全的重要环节。以下是几种主要的限制方法:
# 创建专用用户和组(无登录权限)
sudo useradd -r -s /bin/false serviceuser
# 修改服务配置文件(以systemd为例)
[Service]
User=serviceuser
Group=servicegroup
# 设置服务目录权限
sudo chown -R serviceuser:servicegroup /path/to/service/dir
sudo chmod -R 750 /path/to/service/dir
# 使用访问控制列表(ACL)进行更精细控制
sudo setfacl -Rm u:serviceuser:r-x /path/to/resource
# 创建chroot环境
sudo mkdir -p /chroot/service/{bin,lib,lib64,etc}
# 复制必要文件
sudo cp /bin/bash /chroot/service/bin/
sudo cp /lib/x86_64-linux-gnu/{libc.so.6,ld-linux-x86-64.so.2} /chroot/service/lib/
# 在服务配置中设置
[Service]
RootDirectory=/chroot/service
# 移除不需要的权限
sudo setcap -r /path/to/service/binary
# 只授予必要权限
sudo setcap cap_net_bind_service=+ep /path/to/service/binary
SELinux示例:
# 查看当前上下文
ls -Z /path/to/service
# 创建新策略
sudo semanage fcontext -a -t httpd_sys_content_t "/path/to/service(/.*)?"
sudo restorecon -Rv /path/to/service
AppArmor示例:
# 创建配置文件
sudo aa-genprof /path/to/service/binary
# 编辑/etc/apparmor.d/path.to.service.binary
/path/to/service/binary {
/path/to/resource r,
/another/path w,
}
[Service]
PrivateTmp=yes
PrivateDevices=yes
ProtectHome=yes
ProtectSystem=strict
NoNewPrivileges=yes
RestrictSUIDSGID=yes
# 使用unshare创建隔离环境
sudo unshare --pid --fork --mount-proc chroot /chroot/service /bin/bash
# 创建cgroup
sudo cgcreate -g cpu,memory:servicegroup
# 设置限制
sudo cgset -r cpu.cfs_quota_us=50000 servicegroup
sudo cgset -r memory.limit_in_bytes=512M servicegroup
# 将服务进程加入cgroup
sudo cgexec -g cpu,memory:servicegroup /path/to/service
通过组合使用这些方法,可以有效地限制Linux服务进程的访问权限,提高系统整体安全性。