我正在创建一个 Docker 容器,我不想为其保持“特权”标志为真。这是为了使其更安全并更好地控制。我的容器主要从事以下任务(这将帮助我定义它的资源访问范围并相应地强制执行访问控制) 1. 在容器上挂载 gluster 文件 sys 2. 运行 SSH 守护进程以接受传入的 SSH 连接 3. 运行一些通常可用的 bash 命令
我在运行 docker 容器时使用了“--cap-add=SYS_ADMIN”选项来实现这一点。但是,由于 SYS_ADMIN 添加了比我需要的更多的权限(如下所列)。如何仅实现 SYS_ADMIN 功能的子集?
SYS_ADMIN:
执行一系列系统管理操作,包括:quotactl(2)、mount(2)、umount(2)、swapon(2)、swapoff(2)、sethostname(2) 和 setdomainname(2)。
执行特权系统日志(2)
操作(从 Linux 2.6.37 开始,应该使用 CAP_SYSLOG 来允许
此类操作)。执行 VM86_REQUEST_IRQ vm86(2) 命令;对任意 System V IPC 对象执行 IPC_SET 和 IPC_RMID 操作
对可信和安全的扩展属性执行操作(参见
attr(5))- 使用lookup_dcookie(2)。
使用 ioprio_set(2) 分配
IOPRIO_CLASS_RT 和(Linux 2.6.25 之前)IOPRIO_CLASS_IDLE I/O
调度类。传递套接字凭据时伪造 UID。
超过 /proc/sys/fs/file-max,系统范围内打开文件数量的限制,在打开文件的系统调用中(例如,accept(2)、execve(2)、open(2)、pipe( 2))。
- 使用 CLONE_* 标志,使用 clone(2) 和 unshare(2) 创建新的命名空间。
- 调用 perf_event_open(2)。
- 访问特权性能事件信息。
- 调用 setns(2)。
- 调用 fanotify_init(2)。
- 执行 KEYCTL_CHOWN 和 KEYCTL_SETPERM keyctl(2) 操作。
- 执行 madvise(2) MADV_HWPISON 操作。
- 使用 TIOCSTI ioctl(2) 将字符插入到终端的输入队列中,而不是调用者的控制终端。使用过时的 nfsservctl(2) 系统调用。
- 使用过时的 bdflush(2) 系统调用。
- 执行各种特权块设备 ioctl(2) 操作。
- 执行各种特权文件系统 ioctl(2) 操作。
- 在许多设备驱动程序上执行管理操作。