运维之监控与安全篇------2.SELinux安全防护 、 加密与解密

本文详细介绍了SELinux安全模型及其配置方法,并演示了如何使用GPG进行非对称加密及签名验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、SELinux
1介绍linux安全保护模型:
:  DAC(Discretionary Access control )自主访问控制--所有者对自己的资源负责 应用:9位权限码(rwx) ACL策略
:  MAC(Mandatory Access control) 强制访问控制--管理员对所有的资源负责 应用:selinux 多级安全
Selinux是什么?MAC扩展模块 美国国家安全局主导开发
运行机制:2.6集成到内核
2策略集:
:SELINUXTYPE=targeted 仅保护最常见的关键的网络服务 软件包;selinux-policy  selinux-policy-targeted  libselinux-utils  coreutils  policycoreutils
:SELINUXTYPE=mls  提供多层次全方位的安全防御策略 软件包:selinux-policy-mls  mcstrans  policycoreutils-newrole
3模式控制:
#sestatus   #查看selinux状态
#getenforce #查看selinux状态
#setenforce 1/0  临时改变selinux配置
#vim /etc/selinux/conf   #永久改变配置
SELINUX=disabled 以禁用
SELINUX=permissive 宽松/允许模式
SELINUX=enforcing 强制模式   
selinux的类型:  targeted    MLS                      

4安全上下文的组成()
为文件/目录/设备标记访问控制属性
用户:角色:访问类型:选项...
 查看安全上下文   -Z
查看进程   ps  aux  -Z  |  grep  进程名
                ps  -Z   -C  进程名
查看文件   ls   -Zd  目录名
查看目录  ls   -Z  文件名
常见访问类型:
Bin_t                  二进制执行文件
Etc_t                  系统配置文件
Fsadm_exec_t         文件系统管理文件
Admin_home_t          管理员账户文件
User_hoem_t           普通用户的宿主文件
http_sys_content_t httpd网站内容
public_content_t     #共享文件

5 启用selinux后遵循的一般规律
创建新文件或新目录,  继承父目录的安全上下文
移动文件或目录,保持原有的安全上下文不变
拷贝文件或目录,继承目标目录的安全上下文

6 修改访问类型
#chcon  -R  -t  访问类型  目录名
#chcon   -t  访问类型  文件名
#chcon -u -r 分别指定用户、角色
7.  恢复访问类型
# restorecon   文件名
#touch /.autorelabel 下次重启后全部重置

8实践操作验证(布尔值运用与chcon作用)

点击打开链接

#Yum -y install vsftpd
#yum -y install ftp
#Vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES    //开启匿名访问
write_enable=YES
anon_umask=022
anon_upload_enable=YES       //允许上传文件
anon_mkdir_write_enable=YES     //允许上传目录
#chown ftp /var/ftp/pub
#systemctl restart vsftpd
#ls > test.txt
#ftp 192.168.4.20
Passwd:
ftp>cd pub
ftp>put test.txt  #尝试上传测试文件
失败
Quit
调节布尔值:
 selinux布尔值(功能开关)
查看布尔值  getsebool   -a     | grep  -i  服务名
查看布尔值  getsebool   -a
修改布尔值  setsebool    -P   选项   on|off
                  setsebool    -P   选项=1|0
*******************************************************************
#setsebool -P allow_ftpd_anon_write=1         //设置布尔值    *
#setsebool -P allow_ftpd_full_access=1                      *
#getsebool -a |grep allow_ftpd                 //确认修改结果 *
********************************************************************
#allow_ftpd_anon_write --> on
#allow_ftpd_full_access --> on
#ftp 192.168.4.20
ftp>put test.txt  #上传测试文件成功
Ok to send data
从/root目录下移动一个包文件到FTP下载目录,调整文件的安全上下文
关闭FTP布尔值allow_ftpd_full_access以便测试因为开启此项会扩大FTP目录的访问权限(忽略安全上下文),建议先将其关闭。
#tar -zcf /var/ftp/a1.tar.gz a.txt 在目录下创建
#tar -zcf a2.tar.gz a.txt          #移动
#mv a2.tar.gz /var/ftp/
另一台虚拟机下载这两个文件
#wget ftp://192.168.4.10/a1.tar.gz 成功
#wget ftp://192.168.4.10/a2.tar.gz失败
#ls -Z /var/ftp/
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 /var/ftp/a1.tar.gz
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /var/ftp/a2.tar.gz
# chcon -t public_content_t /var/ftp/d2.tar.gz
#wget ftp://192.168.4.10/a2.tar.gz a2下载成功

9 查看selinux报错信息
[root@10 ~]# rpm -qa | grep setroubleshoot
setroubleshoot-plugins-3.0.59-1.el7.noarch
setroubleshoot-3.2.24-1.1.el7.x86_64
setroubleshoot-server-3.2.24-1.1.el7.x86_64
#grep   setroubleshoot   /var/log/message  | tail  -1
#sealter  -l   字符串
++++++++++++++++++++++++++++++++
二、数据加密与解密
1.传递风险:流量控制、电脑黑客、出差人员、离职人员、合作伙伴、商业间谍、高官习惯、开发人员
2. 加密?发送方:明文---密文
解密? 接受方:密文---明文
 算法?   计算规则  或  算法
生活中邮寄信件;两张大小A4纸,一张写满文字故事,一张抠窟窿显示传达信息。 
3.加密类型: 
对称加密:加密解密用同一个密钥 
:DES data Encryption standard
:AES Advaced Encryption Standard
非对称加密: (使用密钥对) 公钥加密    私钥解密
: RSA Rives Shamirs Adleman 
: DSA Digital Signature Algorithm

4.保护信息的完整性:
信息摘要:
常用的加密算法:Hash散列技术用于信息摘要(文本不同,摘要不同)
MD5,Message Digest Algorithm 5
SHA,Secure Hash Algorithm

5.检查校验值

#vim file1.txt
#cp file1.txt file2.txt
#cat file1.txt > file3.txt
#md5sum file?.txt                 //文件内容一致,则校验和也不变
#echo "x"md5sum file?.txt
# >> file1.txt
#md5sum file?.txt   #检验和已经改变file1,file2与file2仍相同


6.GPG 非对称加密

非对称加密/解密文件时,发送方(UserA)以接收方(UserB)的公钥加密文件,接收方以自己的私钥解密
1.接收方UserB创建自己的公钥、私钥对,执行gpg --gen-key操作,根据提示选择并创建密钥:
2.[UserB@pc207 ~]$ gpg --gen-key
1.请选择您要使用的密钥种类:
2.(1) RSA and RSA (default)
3.(2) DSA and Elgamal
4.(3) DSA (仅用于签名)
5.(4) RSA (仅用于签名)
6.您的选择?                                             //直接回车默认(1)
7.RSA 密钥长度应在 1024 位与 4096 位之间。
8.您想要用多大的密钥尺寸?(2048)                             //接受默认2048位
9.您所要求的密钥尺寸是 2048 位
10.请设定这把密钥的有效期限。
11.0 = 密钥永不过期
12.<n> = 密钥在 n 天后过期
13.<n>w = 密钥在 n 周后过期
14.<n>m = 密钥在 n 月后过期
15.<n>y = 密钥在 n 年后过期
16.密钥的有效期限是?(0)                                     //接受默认永不过期
17.密钥永远不会过期
18.以上正确吗?(y/n)y                                         //输入y确
2.接收方UserB导出自己的公钥文件;用户的公钥、私钥信息分别保存在pubring.gpg和secring.gpg文件内
[UserB@pc207 ~]$ gpg --list-keys                         //查看公钥环
/home/UserB/.gnupg/pubring.gpg
[UserB@pc207 ~]$ gpg --list-secret-keys
/home/UserB/.gnupg/secring.gpg                         //查看私钥环
使用gpg命令结合--import选项将其中的公钥文本导出,传给发送方UserA:
[UserB@pc207 ~]$ gpg -a --export UserB > /tmp/UserB.pub
[UserB@pc207 ~]$ ftp 192.168.4.7
Name (192.168.4.7:UserB): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> lcd /tmp/
Local directory now /tmp
ftp> put UserB.pub                          //通过FTP将公钥传给发送方主机
local: UserB.pub remote: UserB.pub
227 Entering Passive Mode (192,168,4,6,59,39).
150 Ok to send data.
226 Transfer complete.
1719 bytes sent in 0.000127 secs (13535.43 Kbytes/sec)
ftp> quit
221 Goodbye.
3.发送方UserA导入接收方的公钥信息
使用gpg命令结合--import选项导入发送方的公钥信息,以便在加密文件时指定接收人来调用对应的公钥。
[UserA@svr7 ~]$ gpg --import /var/ftp/pub/UserB.pub
[UserA@svr7 ~]$ echo "I love you ." > tosend.txt
[UserA@svr7 ~]$ gpg -e -r UserB tosend.txt
[UserA@svr7 ~]$ exit
logout
[root@svr7 ~]# cp /home/UserA/tosend.txt.gpg /var/ftp/tosend.txt.gpg
4.接收方UserB收取加密文件,以自己的私钥解密文件
[UserB@pc207 ~]$ wget ftp://192.168.4.7/tosend.txt.gpg
[UserB@pc207 ~]$ gpg -d tosend.txt.gpg > tosend.txt
[UserB@pc207 ~]$ cat tosend.txt                      //获得解密后的文件内容
I love you .
***************************************
7.使用GPG实现软件包的完整性校验,检查软件包签名
1.在pc207上,作者UserB为软件包创建分离式签名,将软件包、签名文件、公钥文件一起发布给其他用户下载,。
[UserB@pc207 ~]$ tar zcf tools-1.2.3.tar.gz /etc/hosts      //建立测试软件包
[UserB@pc207 ~]$ gpg -b tools-1.2.3.tar.gz                  //创建分离式数字签名
[UserB@pc207 ~]$ ls -lh tools-1.2.3.tar.gz* UserB.pub
-rw-rw-r--. 1 UserB UserB 170 8月  17 21:18 tools-1.2.3.tar.gz
-rw-rw-r--. 1 UserB UserB 287 8月  17 21:22 tools-1.2.3.tar.gz.sig
-rw-rw-r--. 1 UserB UserB 1.7K 8月  17 21:26 UserB.pub
[root@pc207 ~]# yum -y install vsftpd
[root@pc207 ~]# cp /home/UserB/tools-1.2.3.tar.gz* /var/ftp/
[root@pc207 ~]# cp /home/UserB/UserB.pub /var/ftp/
[root@pc207 ~]# service vsftpd start
2.在svr7上,下载软件包并验证官方签名。下载主机pc207发布的UserB的软件包、签名、公钥,导入UserB的公钥后即可验证软件包的完整性。
[root@svr7 ~]# wget ftp://192.168.4.207/tools-1.2.3*
[root@svr7 ~]# wget ftp://192.168.4.207/UserB.pub
[root@svr7 ~]# gpg --import UserB.pub                      //导入作者的公钥信息
[root@svr7 ~]# gpg --verify tools-1.2.3.tar.gz.sig tools-1.2.3.tar.gz





















<think>好的,用户现在的问题是:“怎么设置为群组里面的人可以读取该文件的内容但是不可以拷贝出去”。我需要仔细思考这个问题,确保回答准确且有用。 首先,我需要理解用户的需求。用户希望群组成员能够读取文件内容,但无法复制出去。这听起来有点矛盾,因为通常读取权限允许用户查看内容,而复制可能需要写权限或者其他操作。但用户可能担心的是,即使有读取权限,用户仍然可以将文件复制到其他地方,比如通过重定向、复制命令等。所以用户想限制这种操作。 接下来,我应该回顾Linux文件权限的基础知识。标准的权限设置中,读(r)允许用户查看文件内容,写(w)允许修改,执行(x)对于脚本或程序是必要的。但是,如果用户有读权限,他们确实可以使用cp命令复制文件,或者用cat将内容输出到另一个文件。这意味着仅靠传统的Linux文件权限可能无法完全阻止拷贝行为,因为读权限本身就允许用户访问文件内容。 那么,用户的问题实际上是如何在允许读取的情况下防止复制。这时候可能需要考虑更高级的权限设置或安全机制。例如,访问控制列表(ACL)可以更细致地控制权限,但可能仍然无法阻止复制。另一种方法是使用文件系统加密或强制访问控制(如SELinux),但这可能比较复杂,特别是对于普通用户来说。 另外,可能需要考虑目录的权限。如果文件所在的目录没有写权限,群组成员可能无法在该目录下创建新文件,从而限制他们复制文件到同一目录,但这并不能阻止他们复制到其他有写权限的目录。 用户可能误解了Linux权限模型的能力。传统的权限模型主要控制读、写和执行,但无法直接阻止用户复制文件内容。一旦用户可以读取文件,他们就可以将内容传输到其他地方。因此,可能需要更高级的安全措施,比如加密文件,或者使用专门的工具来限制复制操作。 可能的解决方案包括: 1. 使用文件权限控制:设置文件为群组可读,但不可写。但这并不能阻止复制。 2. 使用目录权限:限制目录的写权限,防止在目录内创建副本,但不影响其他目录。 3. 使用SELinux或AppArmor:通过强制访问控制策略限制进程的行为,但配置复杂。 4. 加密文件:只有授权用户才能解密,但需要管理密钥。 5. 使用专用工具或脚本:监控或限制复制操作,但可能不现实。 需要向用户解释,传统权限无法完全阻止复制,但可以采取其他措施增加难度。同时,可能需要建议用户评估实际需求,是否有必要使用更高级的安全机制,或者调整权限结构以减少风险。 另外,用户可能是在企业或团队环境中,希望保护敏感数据。这时候可能需要综合使用多种方法,比如结合权限控制、监控和审计,以及培训用户遵守安全政策。 总结来说,回答需要明确传统权限的局限性,并提供可行的替代方案,同时管理用户的预期,说明完全防止复制在标准Linux环境下是困难的,但可以采取步骤降低风险。</think>在 Linux 系统中,**传统文件权限无法直接禁止用户复制文件**(因为读取权限本身就允许用户通过 `cat`、`cp` 等命令获取内容)。但可以通过以下方法 **提高门槛**,限制群组成员的操作: --- ### 方案一:基础权限控制(有限效果) ```bash # 设置文件权限为:所有者可读写,群组可读,其他人无权限 chmod 640 filename # 设置文件所属群组 chgrp group_name filename ``` - **效果**: - 群组成员能通过 `cat filename` 查看内容,但无法修改或删除文件。 - **局限性**:用户仍可通过 `cp filename ~/copy.txt` 复制文件。 --- ### 方案二:结合目录权限限制(增强控制) ```bash # 设置文件所在目录权限为:禁止群组成员写入 chmod g-w directory_name # 设置文件权限为群组可读 chmod g+r filename ``` - **效果**: - 群组成员能读取文件,但无法在目录内创建副本(`cp filename directory_name/copy.txt` 会失败)。 - **局限性**:用户仍可复制到其他有写权限的目录(如自己的家目录)。 --- ### 方案三:使用 SELinux/AppArmor(高级安全) 通过强制访问控制(MAC)策略限制进程行为: 1. **SELinux**:定义策略禁止特定用户或进程访问外部存储或网络。 2. **AppArmor**:限制指定程序(如 `cp`、`scp`)的权限。 - **优势**:可精细控制文件流出路径。 - **缺点**:配置复杂,需系统级权限和专业知识。 --- ### 方案四:加密文件内容(终极防护) ```bash # 用 GPG 加密文件,仅允许群组成员解密查看 gpg -c filename # 生成加密文件 filename.gpg rm filename # 删除原始文件 # 分发解密密钥给群组成员 gpg -d filename.gpg # 需输入密码解密 ``` - **效果**:无密钥者无法读取内容,即使文件被复制也无效。 - **缺点**:需额外管理密钥,操作流程复杂。 --- ### 总结 | 方法 | 效果 | 适用场景 | |---------------|--------------------------------|----------------------------| | 基础权限 | 限制简单操作 | 低敏感数据,快速设置 | | 目录权限 | 限制局部复制 | 控制文件存放位置 | | SELinux | 严格限制进程行为 | 高安全需求,有专业运维团队 | | 文件加密 | 彻底防止未授权访问 | 敏感数据,长期保护 | 实际场景中,**建议结合权限控制 + 审计监控**(如记录 `cp` 操作日志)来平衡便利性安全性。🐧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ghostwritten

口渴,请赏一杯下午茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值