zoukankan      html  css  js  c++  java
  • 服务安全与监控

    一、Linux基本防护

    常用系统监控命令:

    traceroute 路由追踪(查看到达目标主机的路由信息)
    iostat 查看硬盘的读写状态
    free 内存状态
    uptime 查看CPU负载
    swapon -s 查看交换分区信息
    ss -antup 查看所有的网络连接信息
    ss -ntulp 查看本机监听的所有端口
    //-n以数字显示端口号
    //-t显示tcp连接
    //-u显示udp连接
    //-p显示监听端口对应的程序名称
    //-a查看所有连接状态信息

    ~]# chage -l 账户名称    //查看账户信息
    ~]#chage -E yyyy-mm-dd  账户名称    //指定失效日期
    ~]#chage -d 0 tom       //强制用户tom修改密码
    
    [root@m52 ~]# passwd -l root     //锁定用户 root 的密码(无法使用该用户ssh)
    [root@m52 ~]# passwd -u root    //解锁用户 root 的密码。
    [root@m52 ~]# passwd -S root    //看密码状态
    

    修改tty登录的提示信息,隐藏系统版本

    1)账户在登录Linux系统时,默认会显示登陆信息(包括操作系统内核信息)
    /etc/issue这个配置文件里保存的就是这些登陆信息,修改该文件防止内核信息泄露。

    [root@proxy ~]# cat /etc/issue                              //确认原始文件
    [root@proxy ~]# cp /etc/issue /etc/issue.origin              //备份文件
    [root@proxy ~]# vim /etc/issue                              //修改文件内容
    

    退出已登录的tty终端,或者重启Linux系统,刷新后的终端提示信息会变成自定义的文本内容

    [root@proxy ~]# cat /etc/fstab
    /dev/vda1 /boot xfs defaults,noexec 0 0
    备注:
    noexec属性可以让分区下的所有程序都不可执行,包括病毒与木马
    noatime让分区下的所有文件都不再更新atime时间,atime时间为文件的访问时间

    对于操作系统来说,文件系统也可以通过添加额外属性来提高性能与安全性。

    锁定文件/etc/resolv.conf、/etc/hosts

    1)语法格式:

    chattr +i 文件名 //锁定文件(无法修改、删除等)

    chattr -i 文件名 //解锁文件

    chattr +a 文件名 //锁定后文件仅可追加

    chattr -a 文件名 //解锁文件

    lsattr 文件名 //查看文件特殊属性

    1. 使用+i锁定文件,使用lsattr查看属性
    [root@proxy ~]# chattr +i /etc/resolv.conf 
    [root@proxy ~]# lsattr /etc/resolv.conf 
    ----i---------- /etc/resolv.conf
    

    3)使用+a锁定文件(仅可追加),使用lsattr查看属性

    [root@proxy ~]# chattr +a /etc/hosts
    [root@proxy ~]# lsattr /etc/hosts
    -----a---------- /etc/hosts
    

    4)测试文件锁定效果

    [rhel6]#chkconfig  服务名  on
    [rhel6]#chkconfig  服务名  off
    [rhel6]#service 服务名 start
    [rhel6]#service 服务名 stop
    

    二、用户切换与提权
    2.1 用户切换 su
    普通用户执行提权命令:sudo 系统命令
    普通用户查看可使用的提权命令:sudo -l
    2.2 用户提权:
    作用:配置系统的普通用户可以执行root用户的命令
    主配置文件: /etc/sudoers
    修改文件 vim /etc/sudoers 或 visudo
    提权配置格式
    普通用户名 主机名=命令列表(绝对路径)
    %用户组名 主机名=命令列表(绝对路径)

    2.3 别名设置
    为sudo配置项定义别名(给多个值 起一个名字,先定义,后调用)[别名的名称必须全大写]
    ]#visudo
    命令别名(Cmnd_Alias) 名字=命令列表
    主机别名(Host_Alias) 名字=主机名列表
    用户别名(User_Alias) 名字=用户名列表

    Cmnd_Alias MGMWEB=/usr/bin/systemctl * httpd , /usr/bin/vim /etc/httpd/conf/httpd.conf
    Cmnd_Alias MGMDB=/usr/bin/systemctl * mysqld , /usr/bin/vim /etc/my.cnf
    Cmnd_Alias MGMSOFT=/usr/bin/rpm , /usr/bin/yum

    2.3.1 配置用户环境alias别名设置
    查看已设置的别名:alias [别名名称]
    定义新的别名:alias 别名名称= '实际执行的命令行'
    取消已设置的别名:unalias [别名名称]

    影响指定用户的 bash 解释环境
    ~/.bashrc,每次开启 bash 终端时生效

    影响所有用户的 bash 解释环境
    /etc/bashrc,每次开启 bash 终端时生效

    [root@server0 ~]# vim /root/.bashrc 
    alias hello='echo hello'
    [root@server0 ~]# vim /home/student/.bashrc 
    alias hi='echo hi'
    [root@server0 ~]# vim /etc/bashrc 
    alias abc='echo abc'
    

    然后运行source /root/.bashrc 即可立即使用。
    如果不运行source读取,需要重新登陆会话窗口才能使用。

    2.4 启用日志
    作用:记录普通用户执行过的提权命令
    ]# vim /etc/sudoers

       Defaults  logfile="/var/log/sudo.log"
    

    三、SSH访问控制

    vim /etc/ssh/sshd_config

    17行Port 2222
    19行ListenAddress 192.168.4.52  //监听的端口
    PermitRootLogin no   //禁止root登陆
    MaxAuthTries 6     //登陆限时
    LoginGraceTime 2m //每连接最多认证次数
    

    [root@m52 ~]# systemctl restart sshd
    ]# netstat -utnlp | grep sshd

    其他主机连接 ]# ssh -p 2222 root@192.168.4.52

    3.2 黑白名单 (限制客户端连接时使用的用户及客户端地址)

    白名单 : 仅允许使用列表里的用户连接
    AllowUsers 用户列表

    ]# vim /etc/ssh/sshd_config
    AllowUsers  new   root@192.168.4.254
    ]# systemctl  restart sshd 
    

    黑名单 : 仅不允许使用列表里的用户连接
    DenyUsers 用户列表

    ]# vim /etc/ssh/sshd_config
    #AllowUsers     new  root@192.168.4.254
    DenyUsers       new  root@192.168.4.254			
    ]# systemctl  restart sshd
    

    3.3 认证登陆方式 (默认2种都开启了)

    密钥对认证登陆(公钥加密 私钥解密)
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    确认密钥验证使用正常后,禁用口令验证
    口令(用户密码) 65 PasswordAuthentication no/yes

    配置密钥对认证登陆步骤

    		1 创建密钥对  ssh-keygen
    		2 把公钥传给目标主机ssh-copy-id  root@xxxx
    		rm -rf /root/.ssh/*    //清除密钥对文件
    

    将服务器上用户kate创建的密码设为空,尝试SSH登录,也会失败:
    [root@proxy ~]# passwd -d kate //清空用户口令
    清除用户的密码 kate。
    passwd: 操作成功

    四、SELinux安全防护

    4.1 selinux介绍
    全称:Security-Enhanced Linux
    美国NSA国家安全局主导开发,一套增强Linux系统安全的强制访问控制体系
    集成到Linux内核(2.6及以上)中运行
    RHEL7基于SELinux体系针对用户、进程、目录和文件
    提供了预设的保护策略,以及管理工具

    4.1.1 SELinux运行模式的切换
    运行模式:
    enforcing(强制)
    permissive(宽松)
    disabled(彻底禁用)

    任何模式再切换到disabled(彻底禁用)模式,都必须要经历重起系统

    切换运行模式 :
    临时切换:setenforce 1|0 #暂时再本次开机有效
    固定配置:/etc/selinux/config 文件 #不影响当前SELinux状态

    [root@server0 ~]# getenforce      #查看SELinux状态
    Enforcing
    [root@server0 ~]# setenforce 0    #当前修改SELinux状态
    [root@server0 ~]# getenforce      
    Permissive
    [root@server0 ~]# vim /etc/selinux/config   #永久配置
    SELINUX=permissive
    

    4.2 查看安全上下文
    文件 ls -lZ 文件名
    目录 ls -ldZ 目录名
    进程 ps aux -Z | grep -i 进程名
    ]# ls -lZ /etc/passwd
    ]# ls -ldZ /etc/
    ]# ps aux -Z | grep -i httpd

    用户:角色:访问类型:选项...
    system_u:object_r:passwd_file_t:s0
    system_u:object_r:etc_t:s0
    system_u:system_r:mysqld_t:s0
    system_u:system_r:httpd_t:s0

    4.3一般操作规律
    mv 移动的文件,原有的上下文属性不变
    cp 复制的文件,自动继承目标位置的上下文

    4.4 修改安全上下文
    chcon

    ]# chcon -R -t httpd_sys_content_t /var/www/html
    ]# chcon -t httpd_sys_content_t /var/www/html/a4.html
    

    4.5 重置安全上下文
    restorecon

    ]# restorecon -R /var/www/html
    ]# restorecon /var/www/html/a5.html
    

    4.6 SElinux布尔值 (功能开关)
    1 查看布尔值 getsebool -a
    getsebool -a |grep 服务名
    2 修改布尔值
    setsebool -P 选项名 on|off

    五、加密与解密

    第一种:GPG对称加/解密 (加密与解密使用相同密钥)
    usera 发送解密文件给 userb
    第二种:GPG非对称加/解密 : 数据加密和解密使用不同的密钥
    公钥加密 私钥解密

    ]$ ls -a ~ //查看家目录下的隐藏文件
    ]$ ls ~/.gnupg/ //查看密钥的相关配置

    创建密钥对:#gpg --gen-key
    导出公钥:#gpg  --export -a  > 文件名.pub
    导入公钥:#gpg   --import   接收到的公钥的保存路径
    使用公钥加密:#gpg -e  -r  目标用户  要发送的文件      // -r-->指定目标用户
    发送加密文件:mv    或者  scp
    使用私钥解密:#gpg -d  需要解密的文件的绝对路径
    生成签名文件:# gpg  -b  xx.txt   //生成签名文件
    使用公钥验证签名文件: #gpg  --verify 文件路径
    

    gpg --help
    例子:
    准备用户:usera,userb
    usera 发送方 加密数据
    usera~]# rm -rf ~/.gnugp //清除原有的秘钥相关配置

    	1 导入公钥  ]# gpg --import   /tmp/userb.pub
    	           ]# ls ~/.gnupg
    	2 使用公钥加密 gpg  -e 
    	           [usera@pc117 ~]$ gpg -e -r userb test2.txt
    	3 发送加密文件 ]# mv  / scp
    	           ]# mv  test2.txt.gpg   /tmp/
    	4 接收方userb 用户使用私钥解密 ]# gpg -d
    	           ]# gpg -d  /tmp/test2.txt.gpg  > ~/b.txt	
    		   ]# cat  ~/b.txt
    GPG软件签名与验证
    1 使用私钥签名
    	userb~]# gpg  -b  a1.txt   //生成签名文件
    	 ]# ls a1.txt.sig       
    	2 共享签名文件 公钥匙文件 原文件
    	$ cp xxx.sig   /tmp/
    	3 导入公钥
    	4 使用公钥验证签名文件
    

    六、AIDE入侵检测系统

    AIDE介绍

    aide  --help
    
    1. AIDE(Advanced Intrusion Detection Environment,高级入侵检测环境)是个入侵检测工具,主要用途是检查文档的完整性。
    2. AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件。 AIDE数据库能够保存文件的各种属性,包括:权限(permission)、索引节点序号(inode number)、所属用户(user)、所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数。 AIDE还能够使用下列算法: sha1、 md5、 rmd160、 tiger,以密文形式建立每个文件的校验码或散列号.
    3. 这个数据库不应该保存那些经常变动的文件信息,例如:日志文件、邮件、 /proc文件系统、用户起始目录以及临时目录.

    配置AIDE入侵检测服务

    ]# yum -y install aide //安装软件
    修改配置文件,定义监控目录
    配置文件路径:/etc/aide.conf
    定义监控/app目录,但不监控/app目录下的f3文件。规则为:权限+所有者+所属组+sha512+修改时间+访问时间+改变时间

    [root@A ~]# cp /etc/aide.conf /etc/aide.conf.bak       #对配置文件修改前建议备份
    [root@A ~]# sed -i '99,$s/^/#/' /etc/aide.conf  //注释掉默认配置
    [root@A ~]# vim /etc/aide.conf                 #编辑配置文件
    # Example configuration file for AIDE.
     
    @@define DBDIR /var/lib/aide            #数据库目录
    @@define LOGDIR /var/log/aide           #日志目录
     
    # The location of the database to be read.
    database=file:@@{DBDIR}/aide.db.gz      #数据库文件
    …………省略…………
     
    mon = p+u+g+sha512+m+a+c        #   自定义规则监控:权限+所有者+所属组+sha512+修改时间+访问时间+改变时间
    /app mon        #定义/app目录使用规则 mon
    !/app/f3        #但是/app目录下的f3文件不监控,“!”表示忽略这个文件的检查
    

    ]# aide --init //初始化检查
    ]# aide --check //入侵检测

    七、linux安全之打补丁

    创建补丁文件:

    diff -u   旧文件      新文件
    
    diff -u 旧文件  新文件  >  补丁文件.patch
    
    ]# patch -p数字  <  补丁文件         //打补丁--------->-p后的数字代表删除重复目录的个数
    ]# patch  -RE    <  补丁文件       //撤销补丁
    

    其他创建补丁文件选项的使用:

    -r	递归对比目录中的所有资源(可以对比目录)
     -a	所有文件视为文本(包括二进制程序)
     -N	无文件视为空文件(A目录下没有txt文件,B目录下有txt文件,diff比较两个目录时,默认会提示txt仅在B目录有(无法对比差异,修复文件)diff比较时使用N选项,则diff会拿B下的txt与A下的空文件对比,补丁信息会明确说明如何从空文件修改后变成txt文件,打补丁即可成功!)
     -u	输出统一内容的头部信息(打补丁使用)
    

    A 代码开发 B 使用者

    A (准备环境)
    mkdir {source1,source2} //同时建立俩个文件夹

    B主机操作 ]# mkdir -p /demo/source1

    A 主机操作 创建补丁文件

    scp -r  /demo/source1/*  root@192.168.4.51:/demo/source1/
     ]# diff -uraN  /demo/source1  /demo/source2  > /root/all.patch   //生成补丁文件
     ]# cat /root/all.patch 
     ]# scp  /root/all.patch  root@192.168.4.51:/tmp/
    

    B 主机操作

      ]# cat  /tmp/all.patch
      ]# cd  /demo/source1
      ]# patch  -p3  < /tmp/all.patch  ---------->  打补丁
    	patching file find
    	patching file test.sh
    	patching file tmp.txt
    [root@host51 source1]# ls
    find  test.sh  tmp.txt
    
    [root@host51 source1]#  patch  -RE  < /tmp/all.patch ------------->撤销补丁
    [root@host51 source1]#  ls 
    find  test.sh
    
  • 相关阅读:
    LeetCode 623. Add One Row to Tree
    LeetCode 894. All Possible Full Binary Trees
    LeetCode 988. Smallest String Starting From Leaf
    LeetCode 979. Distribute Coins in Binary Tree
    LeetCode 814. Binary Tree Pruning
    LeetCode 951. Flip Equivalent Binary Trees
    LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List
    LeetCode 889. Construct Binary Tree from Preorder and Postorder Traversal
    LeetCode 687. Longest Univalue Path
    LeetCode 428. Serialize and Deserialize N-ary Tree
  • 原文地址:https://www.cnblogs.com/xujint/p/13229046.html
Copyright © 2011-2022 走看看