Linux 安全加固

Oyst3r 于 2023-07-18 发布

登录账号加固

login.defs

/etc/login.defs 是在创建用户时候默认的配置文件,会对用户的一些基本属性做默认设置,包括用户的过期时间密码的最大长度等等。但需要注意的是该文件的用户默认配置对 root 用户无效并且当此文件中的配置与/etc/passwd 和/etc/shadow 文件中的用户信息有冲突的时候,系统会以/etc/passwd 和/etc/shadow 为准

这个是这个文件里面一些字段的配置

**grep -Ev “^# ^$” /etc/login.defs**这条命令去筛选一下上面的这些东西

设置密码复杂度

在 CentOS 7 上实现密码复杂度策略设置,主要是使用 PAM pwquality 模块完成

cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
vim /etc/pam.d/system-auth

找到包含 pam_pwquality.so 模块的行,将原有行注释并修改为如下的新配置,密码长度最少 12 位,至少包含一个大写字母,一个小写字母,一个数字,一个特殊符号

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root

SSH 安全加固

在我们开始使用 SSH 配置文件之前,我们应该使用默认设置备份该文件:

$sudo cp /etc/ssh/sshd_config ~/sshd_config.bkp

执行备份后,我们可以放心,如果我们弄乱了主文件并破坏了 SSH,我们可以使用备份文件恢复正常。

更改默认端口

sshd 守护进程默认监听服务器的 22 端口。建议将此值更改为其他数字,以减少使用脚本进行自动攻击的范围。
取消注释“#Port 22”行并将“22”更改为其他未在您的系统上使用的端口号。我们必须将其更改为 222 并重新启动服务。现在使用带有选项 p 的 ssh 命令来指定新端口:

禁止以 root 用户登录

使用命令 vi /etc/ssh/sshd config 修改配置文件将 PermitRootLogin 的值改成 no,并保存,然后使用 systemctl status sshd.service 重启服务

ssh 认证次数限制

在/etc/ssh/sshd config 文件中将 MaxAuthTries 次数改为 3

使用 SSHv2 协议

允许用户从指定的 IP 登陆

编辑 ssh 的配置文件默认 vim /etc/ssh/sshd_config,在文件最后面另起一行添加  AllowUsers root@ip

黑白名单设置

要这样的话,就先全部设置为黑名单,然后在往白名单里面去添加可信任的 IP

黑名单设置的话去/etc/hosts.deny 去添加 sshd:ALL(这个就是默认拒绝所有 IP)
白名单设置的话去/etc/hosts.allow 去添加 sshd:192.168.0.1(这个是让这个 IP 可以去访问)

用户配置

首先明白 Linux 中 shell 的两种模式,交互式 shell 期望用户进行一些交互,例如从键盘获取命令,而非交互式 shell 不期望用户进行任何输入。接下来是“交互式登录”shell 和“交互式非登录”shell。当我们打开终端时,我们会得到一个“交互式登录外壳”,它会查看启动文件。然而,当我们从一个已经打开的 shell 中打开一个 shell 时,该 shell 将被称为“交互式非登录”shell,并且它只读取“.bashrc”文件。

Shell 在启动设置环境时需要基本配置。 “.bash_profile”将在您登录计算机配置 shell 环境时执行,而“.bashrc”将在您打开终端时执行,并且还会在您打开终端的新实例时执行。

分别对应了两个文件,一个是/etc/profile,另一个是/etc/bashrc,然后里面有一个参数叫做 umask,默认是 022,就是用户在创建文件的时候权限默认就是 666-022=644,而在创建目录的时候就是 777-022=755,这样是不太安全的,我们要把两个文件里面的 umask 值都改为 027

history 日志记录

就用之前的,这回把两个文件都加一下这下面两个东西,一个是设置最大保存数量,还有一些便于阅读的设置

sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile

在/etc/profile的文件尾部添加如下行数配置信息:
######jiagu history xianshi#########
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
if [ ! -d /opt/loginlog ]
then
mkdir -p /opt/loginlog
chmod 777 /opt/loginlog
fi
if [ ! -d /opt/loginlog/${LOGNAME} ]
then
mkdir /opt/loginlog/${LOGNAME}
chmod 300 /opt/loginlog/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date "+%Y-%m-%d_%H:%M:%S"`
export HISTFILE="/opt/loginlog/${LOGNAME}/${USER_IP}_loginlog.$DT"
chmod 600 /opt/loginlog/${LOGNAME}/*loginlog* 2>/dev/null
######### jiagu history xianshi ##########

source /etc/profile 让配置生效

端口安全设置

简介

端口是提供对外开放的服务,分 TCP 和 UDP 两种协议

端口规范:
端口号 0 不使用
端口号 1-1023,系统默认只给 root 使用
端口号 1024-4999,由客户端自行分配
端口号 5000-65535,由服务器端程序自由分配

在/etc/services 的文件中,记录着服务名和他们对应的端口号和协议,太大了建议 more 去查看

本地查看开发端口

查看端口开放 ss 命令

netstat -natpul 查看 TCP、UDP 开放的端口

masscan 快速扫描

sudo masscan -p 1-65535 ip –rate=500

nmap 快速扫描

nmap -sV -A -Pn ip

校验文件是否被更改

md5sum index.php »hash
md5sum –check hash

diff -c -a -r /var/www/html1 /var/www/html2

html1 是备份前的,html2 是现在的,对比不同,看看哪里被改过

Beyond Compare,下载好用即可

WinMerge,感觉这个看起来更方便一点

网站权限设置