用户帐号安全
设置帐号有效期
- 使用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的文件属性控制
chattr
、lsattr
+、-、=
控制方式
属性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 root@192.168.4.254 //只允许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 root@192.168.4.52 //指定端口登陆
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