1. 引言
Linux 访问控制是一个至关重要且常被忽视的主题。虽然Linux是一个相对安全的操作系统,但是在企业环境中,需要保护许多机密和私人信息。这时候访问控制就显得尤为重要。它是 Linux 安全框架的一个重要组成部分,通过它我们可以控制系统中涉及的每一个资源和服务的访问权限,从而保护系统不被恶意攻击、误操作、非法访问和数据泄露等。
2. Linux访问控制
2.1. 用户和组
在 Linux 中,用户和组是访问控制过程的基础。用户可以是一个人,一个进程或一个服务,而组可以包含一个或多个用户。用户和组使用 UID 和 GID 进行标识。UID 为用户 ID,GID 为组 ID。Linux系统根据用户和组的 UID 和 GID 使用访问控制列表(ACL)管理访问权限。因此,管理员可以根据要求对每个用户的权限进行细粒度管理。
每个用户都分配了一个唯一的UID,系统和进程可以通过 UID 标识它们。每个用户都应该分配一个家目录,它是用户进行操作的区域。在 Linux 中的所有用户都由/etc/passwd 中定义的条目描述。这个文件包括了用户的 UID、GID 和家目录等信息。
Linux 中的组是一组用户的集合。每个组规定都由/etc/group 中的一个条目来定义。这个文件定义了每个组的 GID、成员和其他信息。
2.2. 文件权限
Linux 系统中的所有文件和目录都与许多文件权限和属性相关联。文件和目录的访问权限包括读、写和执行。它们可以被所有用户或特定用户或组使用。文件的权限和属性使用 chmod
命令进行管理。
对于文件和目录的所有权,Linux 系统使用 UID 和 GID 完成访问和控制。管理员可以使用 chown
命令更改文件所有者和组。这种方式使得管理员可以非常细致地控制哪些用户可以访问哪些文件和目录。
Linux 支持 SUID、SGID 和 SBIT 权限机制。SUID 是指当执行一个 SUID 文件时,该文件的所有程序将会使用其拥有者的权限来执行。SGID 可以将文件或目录的组权限设置为执行命令的组所有权。 SBIT 可以保护目录和文件,指定的权限仅保留给所有者。
-rw-r--r-- 1 root root 525 Jul 20 16:22 file.txt
在这个例子中,文件名是file.txt。 文件的访问权限为 rw-r--r--。 这意味着对于文件的所有者,他们可以读取和写入(r和w)。 对于组,只允许读取(r)。 通过public权限位,所有其他用户只允许读取(r)。
2.3. SELinux
SELinux(Security-Enhanced Linux)是由 NSA 开发的一个安全模块化系统。此功能增加了访问控制规则,可对系统资源进行更细粒度的访问控制。SELinux基于强制访问控制(MAC),通过设定规则来限制进程的访问权限。这样可以减轻许多不必要的安全问题。
SELinux将更多的控制权限放到了内核,并提供一些接口给开发人员进行配置和调整。即使在出现漏洞或攻击的系统或构件下,SELinux可提供更多的保护和应对系统威胁和攻击的能力。
2.4. AppArmor
AppArmor是SELinux之外另一个分离出来的安全模块化系统,它主要基于Linux安全模块,是一种可选的访问控制安全方案。使用AppArmor,它可以为 Linux 应用程序提供额外的安全措施,从而保护系统不受外部侵入。这 可以防止系统中已部署的应用程序被攻击者访问或受到攻击,以及防止恶意软件、病毒或其他恶意操作对系统造成损害。
3. 实现控制Linux访问控制
3.1. 用户和组管理
创建用户
sudo adduser username
创建组
sudo groupadd groupname
修改用户所属组
sudo usermod -aG groupname username
设置用户密码
sudo passwd username
3.2. 文件权限管理
更改文件所有者
sudo chown username filename
更改文件组所有者
sudo chgrp groupname filename
更改文件访问权限
sudo chmod 777 filename
3.3. SELinux
要启用SELinux,需要做以下几个步骤:
检查SELinux的状态
sestatus
安装SELinux的工具
sudo yum install policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted libselinux-utils setools setroubleshoot-server setroubleshoot-plugins
启用SELinux
sudo sed -i 's/SELINUX=disabled/SELINUX=enforcing/g' /etc/selinux/config
sudo reboot
启动后我们需要改变应用程序的权限,把 targeted
改成 strict
。
sudo setenforce 1
查看SELinux的权限
sudo seinfo
应用SELinux规则
最后,管理员可以根据需要为特定的应用程序或进程创建自定义 SELinux 策略:
sudo audit2allow -a
3.4. AppArmor
要启用 AppArmor,需要做以下几个步骤:
安装 AppArmor
sudo apt-get update
sudo apt-get install apparmor apparmor-profiles apparmor-utils
检查 AppArmor 的状态
sudo apparmor_status
使用默认策略
使用默认策略保护 Ubuntu 上的应用程序和系统服务,命令如下:
sudo aa-enforce /etc/apparmor.d/*
创建自定义策略
管理员可以根据需要为需要更高、更低访问权限的特定应用程序创建自定义 AppArmor 策略。
结束语
访问控制是 Linux 安全体系结构的基础之一。我们可以使用 Linux 的用户和组、文件权限、SELinux 和 AppArmor 来限制不同用户访问特定文件和目录、运行可信应用程序和保护不同的系统服务。管理员可以根据需求选择任意一种或组合多种访问控制策略来保护系统不受恶意攻击和非法访问威胁。