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
    
  • 相关阅读:
    Lua手册中的string.len 不解
    计算机词汇(Computer Glossary)
    Qt 信号和槽机制的优缺点
    多线程,什么时候该使用?
    Linux进行挂起和杀死挂起进程
    struct和class的区别
    Number of 1 Bits
    Pascal's Triangle
    Excel Sheet Column Title
    c++单向链表
  • 原文地址:https://www.cnblogs.com/xujint/p/13229046.html
Copyright © 2011-2022 走看看