linux SElinux防护 加密解密 gpg签名与认证
SElinux Security-Enhanced Linux
由美国国家安全局主导开发
一套强化linux安全的mac扩展模块
selinux的运作机制:
集成到linux内核上(2.6及以上)
操作系统提供可定制的策略,管理工具
linux安全保护模型
DAC,自主访问控制
MAC,强制访问控制
————————————————————————————————————————————————————————————————————————
SElinux使用:
[root@158 ~]# sestatus 查看状态
enabled 启用模式
permissive 警告模式
disabled 禁用模式
SELINUXTYPE=targeted 保护常见的网络服务
示例:
[root@158 ~]# vim /etc/sysconfig/selinux
SELINUX=enabled 启用模式
SELINUXTYPE=targeted 保护常见的网络服务
[root@158 ~]# reboot
查看文件的安全上下文
ll -Z 文件名
[root@158 ~]# ll -Z /etc/passwd
-rw-r--r--. root root system_u:object_r:etc_t:s0 /etc/passwd
查看目录的安全上下文
ll -dZ 目录名
[root@158 ~]# ll -dZ /etc/
drwxr-xr-x. root root system_u:object_r:etc_t:s0 /etc/
查看进程的安全上下文
ps aux -Z | grep 进程名
[root@158 ~]# ps aux -Z | grep http
unconfined_u:system_r:httpd_t:s0 root 2403 1.0 0.5 188164 5784 ? Ss 16:33 0:00 /usr/sbin/httpd
unconfined_u:system_r:httpd_t:s0 apache 2405 0.0 0.3 188164 3376 ? S 16:33 0:00 /usr/sbin/httpd
..... .....
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 2414 0.0 0.0 103320 856 pts/0 S+ 16:33 0:00 grep http
安全上下文格式:用户:角色:访问类型:选项
常见的访问类型:
bin t:二进制执行文件
etc t:系统配置文件
fsadm exec t:文件系统管理
admin home t:管理员账户的宿主目录
httpd sys content t:httpd网站目录
启用了selinux后的一般操作规律
移动的文件,原有的上下文属性不变
复制的文件,自动继承目标位置的上下文
创建新文件时,会自动继承父目录的安全上下文
修改文件的安全上下文文件
chcon 选项 访问类型 文件名
选项:
-t 指定的访问类型
-R 递归修改
-u,-r,分别来指定用户,角色
实例:
[root@158 ~]# ll -Z xx.html (在root下创建一个文件)
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 xx.html
[root@158 ~]# mv xx.html /var/lib/mysql/ (把文件移动到mysql目录下)
[root@158 ~]# chcon -t mysqld_db_t /var/lib/mysql/xx.html (更改文件安全上下文)
[root@158 ~]# ll -Z /var/lib/mysql/xx.html (再次查看)
-rw-r--r--. root root unconfined_u:object_r:mysqld_db_t:s0 /var/lib/mysql/xx.html
恢复文件的安全上下文(恢复为所在位置的默认上下文属性)
restorecon 文件名
选项:
-t 指定的访问类型
-R 递归修改
实例:
[root@158 ~]# mv /var/lib/mysql/xx.html /root/(移动回root)
[root@158 ~]# ll -Z xx.html
-rw-r--r--. root root unconfined_u:object_r:mysqld_db_t:s0 xx.html
[root@158 ~]# restorecon xx.html (恢复)
[root@158 ~]# ll -Z xx.html
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 xx.html
设置selinux布尔值(bool)
查看selinux布尔值
[root@158 ~]# getsebool -a
修改布尔值
setsebool -P 布尔选项 on/off
-P 永久修改
实例:在158服务器上配置ftp服务,允许匿名用户上传/下载文件
[root@158 ~]# vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES(27行处,去掉#号)
[root@158 ~]# /etc/init.d/vsftpd start
修改ftp布尔值(不修改布尔值上传不了文件)
[root@158 ~]# setsebool -P allow_ftpd_anon_write on(更改ftp布尔值 -P永久更改 on开启)
[root@158 ~]# setsebool -P allow_ftpd_full_access 1
ftp> cd hydra(到hydra目录下)
ftp> lcd /root/(到root下)
ftp> put xx.sh(上传root下的xx.sh文件)
当不知道更改什么布尔值的时候该怎么做?
运行selinux日志服务,记录报错信息
[root@158 ~]# yum list | grep -i shoot
setroubleshoot
setroubleshoot-plugins.noarch
setroubleshoot-server
需要这三个包
测试:selinux日志服务
[root@158 ~]# yum -y install setroubleshoot-plugins.noarch setroubleshoot-server setroubleshoot
[root@158 ~]# reboot(需要重启主机才可以)
[root@158 ~]# setsebool -P allow_ftpd_full_access=0(把布尔值改为0)
ftp> cd hydra
ftp> lcd /root/
ftp> put install.log(测试上传文件失败)
[root@158 ~]# tail -f /var/log/messages(日志下回产生错误的问题)
Sep 11 18:36:11 158 setroubleshoot: SELinux is preventing
/usr/sbin/vsftpd from write access on the directory hydra.
For complete SELinux messages.
run sealert -l b29f9b89-94f1-4476-ad54-cc2c1225b88f
[root@158 ~]# sealert -l b29f9b89-94f1-4476-ad54-cc2c1225b88f(然后运行错误信息,它会提示解决办法)
If 您要 allow ftp servers to login to local users and read/write all files on the system, governed by DAC.
Then 您必须启用 'allow_ftpd_full_access'boolean 告知 SELinux 这个情况。
Do(解决办法)
setsebool -P allow_ftpd_full_access 1(然后运行这条命令)
ftp> cd hydra(再次测试上传文件)
ftp> lcd /root/
ftp> put install.log(上传成功)
150 Ok to send data.
——————————————————————————————————————————————————————————————————————————————————
加密与解密
加密:把明文变成密文(发送方)
解密:把密文变成明文(接受方)
算法:实现 "明文《--》密文" 转换的计算规则
密钥:实现 "明文《--》密文" 转换用到的指令或代码
加密方式:
对称加密:加密/解密用同一个密钥
非对称加密: 加密/揭秘用不同的密钥(公钥加密,私钥解密)
不可逆加密(信息摘要):基于输入的信息生成长度较短
位数固定的散列值,通常用来验证数据的完整性
Hash散列技术,MD5 SHA
加密算法:
对称加密算法:
DES
AES
非对称加密算法:
RSA
DSA
加密工具:
GPG加/解密工具:最流行的数据加密,数字签名工具(redhat自带)
[root@158 ~]# gpg --help
支持的算法:
公钥:RSA, ELG, DSA
对称加密:3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128,
CAMELLIA192, CAMELLIA256
散列:MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
压缩:不压缩, ZIP, ZLIB, BZIP2
语法:
gpg [选项] [文件名]
加密操作:-c
解密操作:-d(默认把解密的文件输出到屏幕)
实例:
使用gpg做对称加密/解密
[root@158 ~]# gpg -c xx.html
┌───────────────────────────
│ 请输入密码 |
│ |
│ |
│ Passphrase ________________________________________ |
│ |
│ <OK> <Cancel> |
└───────────────────────────
[root@158 ~]# ls
xx.html.gpg(加密后的文件)
[root@158 ~]# gpg -d xx.html.gpg > /tmp/xx.txt(解密,把内容放到tmp/xxx.txt下)
[root@158 ~]# cat /tmp/xx.txt (查看加密后的文件)
hail hydra
实例:
使用gpg做非对称加密/解密
创建密钥对:
[root@158 ~]# gpg --gen-key
//设置用户信息,私钥口令
[root@158 ~]# gpg --list-keys(列出自己的密钥)
[root@158 ~]# gpg -a --export > /tmp/xx.pub(导出公钥)
[root@158 ~]# scp /tmp/xx.pub xxx.xxx.xxx.xx.:/root(传输公钥)
加密:
[root@ceshiji ~]# gpg --import /root/xx.bup(导入158的公钥)
[root@ceshiji ~]# gpg -e -r 姓名 加密的文件(-e加密 -r创建gpg时候写的姓名)
解密:
[root@158 ~]# gpg -d 文件(-d解密,会自动调用私钥)
实例:
158主机创建密钥对,导出公钥,并把导出的公钥传给ceshiji主机
ceshiji主机导入158主机的公钥,使用公钥加密要发送的文件,并把加密后的文件传给158
158主机使用自己的私钥解密文件
[root@158 ~]# gpg --gen-key
请选择您要使用的密钥种类:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (仅用于签名)
(4) RSA (仅用于签名)
您的选择? 1
RSA 密钥长度应在 1024 位与 4096 位之间。(位数越大越安全)
您想要用多大的密钥尺寸?(2048)2048
您所要求的密钥尺寸是 2048 位
请设定这把密钥的有效期限。
0 = 密钥永不过期
<n> = 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 0
密钥永远不会过期
以上正确吗?(y/n)y
真实姓名:Anonymous(这三个东西要记住,解密会用到)
电子邮件地址:Anonymous@hydra.onion
注释:tor
您选定了这个用户标识:
“Anonymous (tor) <Anonymous@hydra.onion>”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?O
您需要一个密码来保护您的私钥。
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动(这里速度会很慢,很慢)
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
[root@158 ~]# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 1024R/A1982C18 2017-09-12
uid Anonymous (tor) <Anonymous@hydra.onion>
sub 1024R/31800563 2017-09-12
[root@158 ~]# gpg -a --export > /tmp/158.bup(导出公钥)
[root@158 ~]# scp /tmp/158.bup 192.168.4.10:/root/(传送公钥给ceshiji)
[root@ceshiji ~]# gpg --import /root/158.bup(导入158的公钥)
[root@ceshiji ~]# gpg -e -r Anonymous xxx.txt(用公钥加密文件)
[root@ceshiji ~]# scp xxx.txt.gpg 192.168.4.158:/root/(把加密后的文件传给158)
[root@158 ~]# gpg -d xxx.txt.gpg >/tmp/xxx.txt(158会自动调用自己的私钥解密,解密后的文件默认输出到屏幕上,可以重定向到文件)
gpg软件签名与认证
[root@158 ~]# gpg -b xx.sh(-b签名)
xx.sh.sig(签名文件)
[root@158 ~]# scp xx.sh.sig xx.sh 158.bup 192.168.4.19:/root/(把源文件和签名文件以及公钥打包发送给主机19)
[root@19 ~]# gpg --import /root/158.bup(导入公钥)
[root@19 ~]# gpg --verify xx.sh.sig
gpg: 于 2017年09月13日 星期三 03时34分11秒 CST 创建的签名,使用 RSA,钥匙号 A1982C18
gpg: 完好的签名,来自于“Anonymous (tor) <Anonymous@hydra.onion>”(完好的签名,如果内容被改后则是损坏的签名)
gpg: 警告:这把密钥未经受信任的签名认证!
gpg: 没有证据表明这个签名属于它所声称的持有者。(验证指纹,指纹一样则是没问题的)
主钥指纹: 83D0 D0A8 CA01 B349 B663 B88C 82D5 700D A198 2C18
[root@19~]# gpg --fingerprint(打印指纹)
...... ..... ....... ......
密钥指纹 = 83D0 D0A8 CA01 B349 B663 B88C 82D5 700D A198 2C18
linux SElinux防护 加密解密 gpg签名与认证的更多相关文章
- C#实现RSA加密与解密、签名与认证(转)
一.RSA简介 RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前最有影响力 ...
- C#实现RSA加密与解密、签名与认证
一.RSA简介 RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前最有影响力 ...
- 【转】C#中RSA加密解密和签名与验证的实现
[转]C#中RSA加密解密和签名与验证的实现 RSA加密算法是一种非对称加密算法.在公钥加密标准和电子商业中RSA被广泛使用.RSA是1977年由罗纳德•李维斯特(Ron Rivest).阿迪•萨莫尔 ...
- linux基础之加密解密、PKI及SSL、创建私有CA
加密解密基础 1. 对称加密: 加密和解密使用同一个密钥 常见的加密算法有:DES.3DES.AES.Blowfish.Twofish.IDEA.RC6.CAST5 特性: 1. 加密.解密使用同一个 ...
- RSA密钥生成、加密解密、签名验签
RSA 非对称加密公钥加密,私钥解密 私钥签名,公钥验签 下面是生成随机密钥对: //随机生成密钥对 KeyPairGenerator keyPairGen = null; try { keyPair ...
- Linux下OpenSSL加密解密压缩文件(AES加密压缩文件)
OpenSSL是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库.应用程序.SSL协议库.Openssl实现了SSL协议所需要的大多数算法.下面介绍使用Openssl进行文件的对称 ...
- AES加密、解密(linux、window加密解密效果一致,支持中文)
转自: http://sunfish.iteye.com/blog/2169158 import java.io.UnsupportedEncodingException; import java.s ...
- Java使用RSA加密解密及签名校验
该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar注意:RSA加密明文最大长度117字节,解密要求密文最大长度为128字节,所以在加密和解密的过程中需要分块进行 ...
- Python下RSA加密/解密, 签名/验证
原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() import rsa # 生成密钥 (pubkey, privkey) = rsa.newkeys(1 ...
随机推荐
- 无法远程连接SQLSERVER2000的解决方法
有时候客户端和服务器不在同一个局域网里面,这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析,具体的方法是: 1.使用记事本打开HOSTS文件(一般情况下 ...
- 面试中的DNS
DNS 当DNS客户机需要在程序中使用名称时,它会查询DNS服务器来解析该名称.客户机发送的每条查询信息包括三条信息:指定的DNS域名,指定的查询类型,DNS域名的指定类别. DNS基于UDP服务,端 ...
- 百度插件webuploader的坑!
前言: 自因为项目中需要使用上传插件,所以之前找了几款上传插件.但是呢,小的上传插件是不支持我们项目上传的(做虚拟机项目的,一个镜像可能好几个G),所以呢这个插件要支持分片上传,拓展性要高(肯定的啦, ...
- Android Training Note
版本适配 Tip:为了能在几个Android版本中都能提供最好的特性和功能,你应该在你的app中使用Android Support Library,它能使你的app能在旧平台上使用最近的几个平台的AP ...
- 使用mybatis从mysql里进行模糊查询的编码问题
关于这个问题,记录下我的解决方法,希望对有同样困惑的朋友,有所帮助. 问题描述: 我在做mybatis从mysql里模糊查询时,如果模糊的关键词是字母的话,可以查出来.如果模糊的关键词是汉字的话,查不 ...
- JAVA中的数据存储空间简述
在 JAVA 中,有六个不同的地方可以存储数据: 1. 寄存器( register ): 最快的存储区,因为它位于不同于其他存储区——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进 ...
- js 数组的一些基本操作
var arr1 = [1,2,3,4,5,6]; arr1[0]; arr1[1]; console.log("长度:"+arr1.length); 一.遍 ...
- dubbo中Listener的实现
这里继续dubbo的源码旅程,在过程中学习它的设计和技巧,看优秀的代码,我想对我们日程编码必然有帮助的.而那些开源的代码正是千锤百炼的东西,希望和各位共勉. 拿ProtocolListenerWrap ...
- Codeforces Round #395 (Div. 2)(未完)
2.2.2017 9:35~11:35 A - Taymyr is calling you 直接模拟 #include <iostream> #include <cstdio> ...
- Jmeter_上传与下载
今天重点说一下Jmeter的上传与下载 1:Jmeter上传文件 首先确认你的文件名称,参数名称,MIME类型,这些可以从接口文档里面获取,或者直接在页面抓包然后从请求头里面查看.注意,此处我的文件路 ...