Linux基本防护

用户帐号安全

设置帐号有效期
  • 使用chage工具
    -d 0,强制修改密码
    -E yyyy-mm-dd,指定失效日期(-1取消)
[root@ip51 ~]# useradd tom
[root@ip51 ~]# chage -E 2019-06-01 tom  //设置密码失效日期
[root@ip51 ~]# chage -E -1 tom      //取消密码失效日期限制
[root@ip51 ~]# chage -d 0 tom      //设置用户登录之后必须修改密码
帐号的锁定/解锁
  • 使用passwd命令
    -l 锁定、-u 解锁、-S看状态
[root@ip51 ~]# passwd -S tom		//查看密码状态
[root@ip51 ~]# passwd -l tom         //用户被锁定,无法远程通过该用户ssh登录
[root@ip51 ~]# passwd -u tom 		//解锁
强制定期修改密码
  • 配置文件/etc/login.defs
    对新建的用户有效
  • 主要控制属性
    PASS_MAX_DAYS //密码最大有效天数
    PASS_MIN_DAYS //密码最小有效天数
    PASS_WARN_AGE //密码过期之前警告天数
伪装登录提示
  • 配置文件/etc/issue、/etc/issue.net
    分别适用于本地、远程登录
    默认会提示内核、系统等版本信息

//编辑该文件,改成其他的

文件系统安全

程序和服务控制
  • 禁用非必要的系统服务
    使用systemctl、chkconfig工具

RHEL6:

chkconfig httpd on     //开机自启
chkconfig httpd off    //关闭开机自启
service httpd start    //开启程序
service httpd stop     //关闭程序

RHEL7:

systemctl enable httpd    //开机自启
systemctl disable httpd	//关闭开机自启
systemctl start httpd		//开启程序
systemctl stop httpd		//关闭程序
锁定/解锁保护文件
  • EXT3/EXT4的文件属性控制
    chattrlsattr

+、-、=控制方式
属性i:不可改变(immutable)
属性a:仅可追加(append only)

[root@ip51 ~]# touch /root/a.txt
[root@ip51 ~]# chattr +i a.txt  //添加文件不可改变权限
[root@ip51 ~]# echo 1 > a.txt 
-bash: a.txt: 权限不够
[root@ip51 ~]# chattr -i a.txt  //取消该限制
[root@ip51 ~]# chattr +a a.txt   //设置文件只能以追加的方式(>>)写入数据
[root@ip51 ~]# echo 2 >> a.txt 
[root@ip51 ~]# echo 2 > a.txt 
-bash: a.txt: 不允许的操作

用户切换与提权

su切换用户身份

切换与提权的应用场景

  • 切换用户身份,when ?
    SSH远程管理
    运维测试

  • 提升执行权限,when ?
    管理权限细分

su切换的基本用法
  • Substitute User,换人
  • 快速切换为指定的其他用户
  • 普通用户执行时,需要验证目标用户的口令
  • root执行时,无需验证后令

命令格式

  • 用法1: su [-] [目标用户]
  • 用法1: su [-] -c "命令" [目标用户]

su 直接登录,默认是root用户登录,但是只是用户变为目标用户,用户的操作环境并没有切换
su - 用户名 切换 用户跟操作环境都会切换过来

切换之后,可以通过pwd和echo $PATH查看两者区别

[root@ip51 ~]# su - -c "mkdir /home/tom/q.txt" tom    //切换到tom用户并在自己的家目录下创建文件夹

分析su切换的使用情况

  • 安全日志/var/log/secure
    记录su验证、Shell开启与关闭
[root@ip51 ~]# tail /var/log/secure

sudo提升执行权限

sudo提权的基本用法

  • Super or another Do,超级执行
    管理员预先为用户设置执行许可
    被授权用户有权执行授权的命令,验证自己的口令

命令格式

  • 用法1: sudo 特权命令
  • 用法2: sudo [-u 目标用户] 特权命令

sudo操作示例

  • 查看自己的sudo授权
    sudo -l
  • 以用户xxx的权限新建一个文件夹
    su - zhangsan -c "touch /tmp/test.txt"

配置sudo授权

  • 修改方法
    推荐:visudo
    其他:vim /etc/sudoers

  • 授权记录格式
    用户 主机列表=命令列表

[root@ip51 ~]# grep ^root /etc/sudoers
root	 ALL=(ALL) 	ALL

root可以是%组名  ALL目标身份,省略时表示root
[root@ip52 ~]# vim /etc/sudoers

… …
%wheel ALL=(ALL)       ALL         //默认加入这个组里边的所有用户,都拥有跟root一样的权限
… …
用户提权

//创建三个测试用户

[root@ip52 ~]# useradd dachui
[root@ip52 ~]# useradd tiechui
[root@ip52 ~]# useradd nb
[root@ip52 ~]# vim /etc/sudoers
... ...
root    ALL=(ALL)       ALL
dachui  localhost,ip52=/usr/bin/systemctl * httpd , /usr/bin/vim /etc/httpd/conf/httpd.conf
tiechui localhost,ip52=/usr/bin/systemctl * mysqld , /usr/bin/vim /etc/my.cnf
nb  localhost,ip52=/usr/bin/systemctl * httpd , /usr/bin/vim /etc/httpd/conf/httpd.conf , /usr/bin/systemctl * mysqld , /usr/bin/vim /etc/my.cnf , /sbin/* ,!/sb
in/ifconfig eth0    //nb用户对/sbin/下的所有命令都有操作权限,除了修改eth0网卡信息
... ...

//测试

[nb@ip52 ~]$ sudo systemctl start httpd
[nb@ip52 ~]$ sudo systemctl stop httpd
[nb@ip52 ~]$ sudo systemctl stop mysqld
[nb@ip52 ~]$ sudo systemctl start mysqld
分析sudo提权的使用情况
  • 修改全局配置,启用日志
    Defaults logfile="/var/log/sudo"
[root@ip52 ~]# vim /etc/sudoers

...  ...
Defaults logfile="/var/log/sudo"
sudo别名设置
  • 主要用途
    提高可重用性、易读性
    减化配置、使记录更有条理
[root@ip52 ~]# vim /etc/sudoers

... ...
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
Host_Alias MYSER=localhost,ip52

dachui MYSER=MGMWEB , MGMSOFT
tiechui MYSER=MGMDB , MGMSOFT
nb MYSER=MGMDB , MGMWEB , MGMSOFT
... ...

SSH访问控制

SSH防护概述
  • 存在的安全隐患
    密码嗅探、键盘记录
    暴力枚举帐号、猜解密码
  • 常见的防护措施
    用户限制、黑白名单
    更改验证方式(密码–>密钥对)
    防火墙
sshd基本安全配置

配置文件/etc/ssh/sshd_config

  • Port 3389 //改用非标准端口
  • Protocol 2 //启用SSH V2版协议
  • ListenAddress 192.168.1.174
  • PermitRootLogin no //禁止root登录
  • UseDNS no //不解析客户机地址
  • LoginGraceTime 1m //登录限时
  • MaxAuthTries 3 //每连接最多认证次数

sshd黑/白名单配置(显示客户端连接时,使用的用户以及客户端地址)

  • 配置文件/etc/ssh/sshd_config
    DenyUsers USER1 USER2 ...
    AllowUsers USER1@HOST USER2 ...
    DenyGroups GROUP1 GROUP2
    AllowGroups GROUP1 GROUP2
[root@ip52 ~]# vim /etc/ssh/sshd_config

... ...
AllowUsers nb [email protected]  //只允许4.254主机通过nb用户访问客户机

//修改默认端口

[root@ip52 ~]# vim /etc/ssh/sshd_config 
... ...
Port 2222		//修改默认的端口
ListenAddress 192.168.4.52
... ...

[root@ip52 ~]# systemctl restart sshd

[root@room9pc01 ~]# ssh -p 2222 [email protected]   //指定端口登陆

sshd验证方式控制

  • 口令验证
    检查登陆用户的口令是否一致
  • 密钥验证
    检查客户端私钥与服务器上的公钥是否匹配

.ssh/authorized_keys

[root@ip52 ~]# vim /etc/ssh/sshd_config
... ...
PasswordAuthentication no		//关闭口令认证方式,仅能使用密钥对认证
PubkeyAuthentication yes		//密钥对认证
AuthorizedKeysFile      .ssh/authorized_keys    //存放授权客户机的公钥文本
... ... 

创建SSH密钥对

使用工具ssh-keygen

  • 可以手动指定加密算法(-t rsa或者 -t dsa)
  • 若不指定,默认采用RSA加密

部署SSH公钥

  • 方法一、通过ssh-copy-id自动部署
    好处:一步到位
    局限性:要求SSH口令认证可用

  • 方法二,通过FTP等方式上传、手动添加
    好处:灵活i、适用范围广
    局限性:操作繁琐、易出错

SELinux安全防护

SELinux概述

什么是SELinux?

  • Security-Enhanced Linux
    一套强化Linux安全的扩展模块
    美国国家安全局主导开发
  • SELinux的运作机制
    集成到Linux内核(2.6及以上)
    操作系统提供可定制的策略、管理工具

红帽的SELinux粗略集

  • SELINUXTYPE=targeted
    推荐,仅保护最常见/关键的网络服务,其他不限制
  • 主要软件包:
    selinux-policy、selinux-policy-targeted、libselinux-utils、libselinux-utils、coreutils、policycoreutils
[root@ip53 ~]# sestatus     //查看selinux状态

SELinux模式控制

  • 方法一,修改kernel启动参数
    添加selinux=0以禁用
    添加enforcing=0设置SELinux为允许模式
  • 方法二,修改文件/etc/selinux/config
    设置 SELINUX=disabled以禁用
    设置 SELINUX=permissive 宽松/允许模式
    设置 SELINUX=enforcing 强制模式

SELinux开关控制

  • 临时调整,setenforce 命令
    设为1,对应强制模式
    设为0,对应宽松模式

getenfore //查看当前状态

SELinux策略设置

查看安全上下文

  • Security Context,安全上下文
    为文件/目录/设备标记访问控制属性
  • 属性构成
    用户:角色:访问类型:选项…

ls -lZ /etc/passwd 查看文件安全上下文
ls -ldZ /etc/ 查看目录的安全上下文
ps aux -Z | grep -i mysqld //查看进程的安全上下文

修改安全上下文

  • 使用chcon工具
    -t,指定访问类型
    -R,递归修改
  • 一般操作规律
    移动的文件,原有的上下文属性不变
    复制的文件,自动继承目标位置的上下文

chcon -t public_content_t /var/ftp/rt.txt

重置安全上下文

  • 使用restorecon工具
    恢复为所在位置的默认上下文属性
    -R,递归修改
  • /.autorelabel 文件
    下次重启后全部重置

调整SELinux布尔值

  • 使用getsebool查看
    -a,可列出所有布尔值
  • 使用setsebool设置
    -P,永久更改,重启后仍然有效

SELinux开启FTP的匿名上传下载功能

setsebool -P ftpd_anon_write on
setsebool -P ftpd_full_access on

登陆FTP服务器进行上传下载功能

[root@ip50 ~]# yum -y install ftp

登陆53主机的ftp,匿名登陆

[root@ip50 ~]# ftp 192.168.4.53
Connected to 192.168.4.53 (192.168.4.53).
220 (vsFTPd 3.0.2)
Name (192.168.4.53:root): ftp                  //匿名登陆用户名
331 Please specify the password.
Password:								//密码直接回车

get 下载

put 上传

lcd  切换到本地目录

SELinux开启http的非80端口访问
修改配置文件

[root@ip53 ~]# vim /etc/httpd/conf/httpd.conf 

... ...
Listen 8077
... ...

配置http测试页面

[root@ip53 ~]# echo "192.168.4.53" > /var/www/html/index.html 
[root@ip53 ~]# setenforce 0
[root@ip53 ~]# systemctl restart httpd
[root@ip53 ~]# curl http://localhost:8077

如果selinux处于开启状态,则直接重启httpd会报错
记录报错日志的软件setroubleshoot,日志文件为/var/log/messages

//查看报错信息里边,关于httpd非80端口访问报错信息

[root@ip53 ~]# grep setrouble /var/log/messages | tail -1

//查看日志里边显示的需要访问的内容,会给出具体的解决报错的方法

[root@ip53 ~]# sealert -l 091819ff-f26f-4db0-b9fe-8730c398285e

//启用8077端口

[root@ip53 ~]# semanage -a -t http_port_t -p tcp 8077  

你可能感兴趣的:(云计算,Linux云计算)