zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Android 解决小米手机Android Studio安装app 报错的问题It is possible that this issue is resolved by uninstalling an existi
    Android Unresolved Dependencies
    Android studio 自定义打包apk名
    Android Fragment与Activity交互的几种方式
    魅族和三星Galaxy 5.0webView 问题Android Crash Report
    Android几种常见的多渠道(批量)打包方式介绍
    Android批量打包 如何一秒内打完几百个apk渠道包
    上周热点回顾(9.30-10.6)团队
    上周热点回顾(9.23-9.29)团队
    上周热点回顾(9.16-9.22)团队
  • 原文地址:https://www.cnblogs.com/Hydraxx/p/7516631.html
Copyright © 2011-2022 走看看