Debian访问控制和操作详解

2024-11-09 37

除了密码基于认证和文件权限之外,Debian系统还提供了其他形式的访问控制来保护系统和资源的安全。包括PolicyKit、限制访问某些服务端的服务、sudo等。这些机制可以帮助管理员保护系统和资源的安全,并限制未经授权的访问和操作。

9ab038e27a5f63773344c3ee168ab99e_u=1385815678,3167280408&fm=253&fmt=auto&app=120&f=JPEG_w=820&h=500.webp

一、sudo

sudo(8) 程序是为了使一个系统管理员可以给用户受限的 root 权限并记录 root 活动而设计的。sudo 只需要一个普通用户的密码。安装 sudo 软件包并通过设置 “/etc/sudoers” 中的选项来使用它。

我将 sudo 用于单用户系统是为了防止自己可能做出的愚蠢行为。就我个人而言,我认为使用 sudo 会比使用 root 账号操作系统来得好。例如,下列命令将 “some_file” 的拥有者改变为 “my_name”。

$ sudo chown my_name some_file

当然如果知道 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