系统加固
修改用户密码生存期和复杂度
密码生存期默认配置在/etc/login.defs
[root]# vi /etc/login.defs
PASS_MAX_DAYS 90 # 新建用户密码最长使用天数
PASS_MIN_DAYS 0 # 新建用户密码最短使用天数
PASS_MIN_LEN 7 # 新建用户密码到期提示天数
PASS_WARN_AGE 10 # 最小密码长度
密码复杂度默认配置在/etc/pam.d/system-auth
[root]# vi /etc/pam.d/system-auth
#%PAM-1.0
password required pam_cra
cklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 dcredit=-1 minlen=10
其含义是至少包含一个数字、一个小写字母、一个大写字母、一个特殊字符、符且密码长度>=10
minlen:密码最小长度
ucredit:最小大写字母
lcredit:最小小写字母
dcredit:最少数字
retry:重试多少次返回错误
杂
限制登录超时用户无操作就断开
[root]# vi /etc/profile
TMOUT=300
export TMOUT
无操作300秒自动退出
限制TTY尝试次数
默认配置文件在/etc/pam.d/login
[root]# vi /etc/pam.d/login
#%PAM-1.0
auth required pam_tally2.so deny=3 lock_time=300 even_deny_root root_unlock_time=10
输入三次错误后普通用户300秒解锁。root用户10秒解锁
限制Umask值
防止一句话木马使用
echo "umask 0777" >> /etc/bashrc
意思是创建的文件命令都没有读写权限
限制GCC编辑器
为了防止黑客使用纵向提权
首先检测有哪些文件
rpm -q --filesbypkg gcc | grep "bin"
最后都限制掉
chmod 000 /usr/bin/c89
锁定系统文件
[root@localhost sbin]# chattr +i /sbin/
[root@localhost sbin]# chattr +i /usr/sbin/
[root@localhost sbin]# chattr +i /bin/
[root@localhost sbin]# chattr +i /sbin/
[root@localhost sbin]# chattr +i /usr/lib
[root@localhost sbin]# chattr +i /usr/lib64
[root@localhost sbin]# chattr +i /usr/libexec
限制日志文件
为了防止黑客擦掉痕迹所以给它增加不可删除命令
cd /var/log/
chattr +a dmesg cron lastlog messages secure .... wtmp
关掉Ctrl+Alt+Del重启系统
默认配置文件/etc/inittab
vi /etc/inittab
#ca::ctrlatdel:/sbin/shutdown -t3 -r now
注释掉
centos7会在/etc/inittab告诉你它你的文件位置进去后直接把所以内容注释或者删除
用户登录系统提示信息
配置文件/etc/issue
vi /etc/issue
新起一行“输入内容”
使用命令 awk -F: '($2=="")' /etc/shadow 查看空口令账号。
使用命令 awk -F: '($3==0)' /etc/passwd 查看UID为零的账号
FTP加固
vsftpd有三个配置文件
/etc/vsftpd.conf 主
/etc/vsftpd.ftpusers
/etc/vsftpd.userlist
vsfptd默认主配置文件
允许匿名登录
anonymous_enable=YES
允许本地用户登录
local_enable=YES
开发本地写权限
write_enable=YES
设置本地用户文件生成掩码为022,默认值为077
local_umask=022
激活上传和下载日志
xferlog_enable=YES
dirmessage_enable=YES
使用标准的ftpd xferlog日志格式
xferlog_stg_format=YES
允许匿名用户上传
anon_upload_enable=YES
anon_mkdir_write_enable=YES
开启匿名用户对上传目录有写权限
write_enable=YES
添加
anon_world_readable_only=NO(开启匿名用户浏览权限)
启用ASCII传输方式
去掉#号启用
#ascii_upload_enable=YES
#ascii_download_enable=YES
设置连接服务器后欢迎信息
ftpd_banner="欢迎信息"
设置空闲的用户会话的中断时间
idle_session_timeout=600
会话空闲后10分钟被中断
设置空闲的数据连接时间的中断时间
data_connection_timeout=120
数据连接空闲2分钟后被中断
设置客户端空闲时的自动中断和激活连接的时间
例如下面的配置:
accept_timeout=60
connect_timeout=60
将使客户端空闲1分钟后自动中断连接,并在中断1分钟后自动激活连接
设置最大传输速率限制
local_max_rate=50000
anon_max_rate=30000
本地用户最大传输速率为50kbytes.匿名用户为30kbytes
设置连接端口范围
pasv_min_port=50000
pasv_max_port=60000
端口范围5000-6000之间
设置对所有用户活动范围在自家目录
chroot_local_user=YES
如果是指定用户则需要以下命令
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file= /etc/vsftpd.chroot_list
(/etc/vsftpd.chroot_list文件中指定的用户才被限制.格式是每个用户名占一行。)
限制指定的本地用户不能访问
userlist_enable=YES
userlist_deny=YES
usrelist_file= /etc/vsftpd.user_list
(/etc/vsftpd.usre_list文件中指定的用户被限制,格式和/etc/vsftpd.chroot_list一样)
如果想让/etc/vsftpd.usre_list中用户不被限制反而是不在里面的用户被限制我们可以将usrelist_deny=YES 改为NO
指定连接失败时显示的信息
在配置文件/etc/xinetd.d/vsftpd的 {}中添加如下的配置语句:
banner_fail =文件名
例如:banner_fail = /etc/vsftpd.busy_banner 表示当连接失败时显示文件/etc/vsftpd.busy_banner中的内容。
可以用下面的命令生成文件/etc/vsftpd.busy_banner:
echo "421 Server busy, please try later."> /etc/vsftpd.busy_banner
SQL加固
基础
删除某个数据库
drop database + 数据库名字
删除用户
drop user '用户名'@'localhost';(有些不是localhost注意看)
新建用户
create user '用户名'@'localhost' identified by '密码';
刷新权限
flush privileges;
查看表中记录
select * from + 表名
例题
对忘记mysql数据库root管理员密码重置操作
在配置文件/etc/my.cnf
添加
skip-grant-tables(跳过权限检查启动)
然后重启数据库
service mysqld restart
最后进入改密码
update user set authentication_string=password("新密码") where user="root";
赋予user1用户对数据库所以表只有select ,insert,delete,update权限并且查看
grant select,insert,delete,update on 数据库名.* to user1@'localhost';
查看命令
grants for 'user1'@'localhost';
禁用LOCAL INFILE命令防止非授权用户访问本地文件
vi /etc/my.cnf
添加
set-variable=local-infile=0
防止数据库操作信息泄露禁用使用历史记录
rm -f $HOME /.mysql_history
ln -s /dev/null $HOME /.mysql_history
为分析数据异常活动,开启MySQL二进制日志并且查看
vi /etc/my.cnf
添加
log-bin=mysql-bin
然后重启数据库
查看是否开启
show variables like 'log_bin';
使用MySQL内置MD5加密函数加密user1密码(P@ssw0rd1!)并且查看
vi /etc/my.cnf
添加
skip-grant-tables
重启后
update user set password=md5(P@ssw0rd1!) where user="user1";
查看
select password from user where user='user1';
禁止MySQL以管理员账号权限运行
vi /etc/my.cnf
user=mysql
改变默认MySQL管理员用户为:SuperRoot
update user set user="SuperRoot" where user="root";
限制一般用户浏览其他用户数据库,对MySQL启动加固
vi /etc/my.cnf
添加
skip-show-database
创建一个新的mysql数据库用户(grant语句)
grant all on *.* to '用户名'@’localhost‘ identified by '密码';
禁止数据库用户 root 从任意地点登录
delete from user where host=’%’ and user=’root’;
或 drop user 'root'@'%';
SSH加固
ip限制
[root@localhost ~]# vim /etc/hosts.allow
...
sshd:192.168.2.130:allow //添加只允许连接的IP地址
sshd:192.168.3.0/24:allow //允许3.0/24这个网段内的IP连接
不允许root直接登录ssh
vi /etc/ssh/sshd_config
#PermitRootLogin yes
去掉#号yes改为no
禁止空密码登录
vi /etc/ssh/sshd_config
#PermitEmptyPasswords yes
去掉#号yes改为no
限制ssh登录
配置文件/etc/pam.d/sshd
auth required pam_tally2.so deny=3 unlock_time=150 eve