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

  • 相关阅读:
    数学思想方法-python计算战(8)-机器视觉-二值化
    04-05组合问题_算法训练
    至HDFS附加内容
    HDU 1010 Tempter of the Bone heuristic 修剪
    二叉树3种遍历的非递归算法
    [Ramda] R.project -- Select a Subset of Properties from a Collection of Objects in Ramda
    [Ramda] Refactor a Promise Chain to Function Composition using Ramda
    [SVG] Combine Multiple SVGs into an SVG Sprite
    [Ramda] Difference between R.converge and R.useWith
    [Ramda] Refactor to a Point Free Function with Ramda's useWith Function
  • 原文地址:https://www.cnblogs.com/Hydraxx/p/7516631.html
Copyright © 2011-2022 走看看