除了密码基于认证和文件权限之外,Debian系统还提供了其他形式的访问控制来保护系统和资源的安全。包括PolicyKit、限制访问某些服务端的服务、sudo等。这些机制可以帮助管理员保护系统和资源的安全,并限制未经授权的访问和操作。
一、sudo
sudo(8) 程序是为了使一个系统管理员可以给用户受限的 root 权限并记录 root 活动而设计的。sudo 只需要一个普通用户的密码。安装 sudo 软件包并通过设置 “/etc/sudoers” 中的选项来使用它。
我将 sudo 用于单用户系统是为了防止自己可能做出的愚蠢行为。就我个人而言,我认为使用 sudo 会比使用 root 账号操作系统来得好。例如,下列命令将 “some_file” 的拥有者改变为 “my_name”。
当然如果知道 root 密码(比如自行安装 Debian 的用户所做的),任何用户账号都可以使用 “su -c” 让任何命令以 root 运行。
二、PolicyKit
PolicyKit 是在类 Unix 操作系统中控制整个系统权限的一个操作系统组件。较新的 GUI 图形界面程序设计时便考虑到了不作为特权进程来运行。它们通过 PolicyKit 来和特权进程通信,从而执行管理操作。在 Debian 系统中,PolicyKit 限制了属于 sudo 组的用户账号的这种操作。
三、限制服务
对系统安全而言,尽可能的禁用服务程序,是一个好的主意。网络服务是危险的。有不使用的服务,不管是直接由后台守护进程(daemon)激活,还是通过super-server 程序激活,都被认为是安全风险。
许多程序,比如说 sshd(8), 使用基于 PAM 的访问控制。也还有许多方式来限制访问一些服务端的程序。
配置文件: “/etc/default/program_name”
后台守护进程(daemon)的 Systemd 服务单元配置
PAM (Pluggable Authentication Modules)
super-server 使用 “/etc/inetd.conf”
TCP wrapper 使用 “/etc/hosts.deny” 和 “/etc/hosts.allow” , tcpd(8)
Sun RPC” 使用 /etc/rpc.conf”
atd(8) 使用 “/etc/at.allow” 和 “/etc/at.deny”
crontab(1) 使用 “/etc/cron.allow” 和 “/etc/cron.deny”
Network firewall 或netfilter 框架
注意:
NFS 和其它基于 RPC 的程序,需要激活 Sun RPC 服务;
如果远程访问最新的 Debian 系统有问题,看下在”/etc/hosts.deny”里是否存在”ALL: PARANOID”这样讨厌的配置,请把它注释掉。
四、Linux安全特性
Linux 内核已经发展和支持在传统的 UNIX 实现里面没有的安全特征。Linux 支持 扩展属性,扩展了传统的 UNIX 属性。Linux 把传统的超级用户相关的特权分开到不同的单元,被称为 capabilities(7),它能够独立的启用和禁用。从 2.2 版本内核开始,Capabilities 是一个线程独立的属性。
Linux Security Module (LSM) 安全模块框架 提供了一个多方面的安全检查机制,和新的内核扩展关联。例如:
AppArmor
Security-Enhanced Linux (SELinux)
Smack (Simplified Mandatory Access Control Kernel)
Tomoyo Linux
这些扩展紧缩的权力模型比普通的类 Unix 安全模型策略更加严格,甚至 root 的权力也被限制。
Linux 的 namespaces 封装了一个全局系统资源到一个抽象的概念,全局系统资源在 namespace 内对进程可见,并且 namespace 有它们自己的全局资源隔离实例。 对其它进程全局资源的可见性的改变是,同一个 namespace 的成员可见,但是对非同一个 namespace 的其它进程不可见。从内核 5.6 版本起,有 8 种 namespaces 。
在 Debian 11 Bullseye (2021) 中, Debian 使用 unified cgroup hierarchy(统一 cgroup 层级架构) (亦称为 cgroups-v2)。
namespaces 同 cgroups 一起来隔离它们的进程,允许资源控制的使用示例是:
Systemd
沙盒环境
Linux 容器,比如 Docker、 LXC