Centos7十五项安全加固标准配置(结合等保3)
Posted 起西洲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos7十五项安全加固标准配置(结合等保3)相关的知识,希望对你有一定的参考价值。
写在前面:由于所有操作均涉及系统文件,建议所有操作前备份文件及做好相关记录
一、检查系统空密码账户 | 身份鉴别
描述
检查是否存在空口令和root权限的账号
加固建议
对无口令并且可登录的账户,进行密码设置:(注意密码不能包含用户名,也不能少于7位)
具体操作命令和步骤
1、检查空口令账户
awk -F: '$2=="!!" print $1' /etc/shadow
2、检查空口令账户哪些可以登录
grep -v "/sbin/nologin" /etc/passwd
PS: /bin/bash的为可登录账户
3、加固可登录的空口令账户或注销空口令账户
4、检测root权限账号
awk -F: '($3==0)' /etc/passwd
确保uid为0的账号只能是root账号
操作时建议做好记录或备份
二、SSH安全加固 | SSH服务配置
描述
加固SSH远程访问安全策略,限制可登录用户及来源地址
加固建议
编辑文件/etc/ssh/sshd_config,将一应配置修改
具体操作命令和步骤
1、编辑文件/etc/ssh/sshd_config
vim /etc/ssh/sshd_config
2、修改配置
Port = ***
--修改默认端口
AllowUsers 用户名1@1.1.1.1 用户名2@2.2.2.2
--设置允许登录用户,多个用户可空格添加
AllowGroup ***
--设置允许登录用户组
ListenAddress 0.0.0.0
--设置SSH指定的本地地址,多网卡可用
Protocol 2
--强制使用 V2安全协议 ,SSH1存在漏洞与缺陷
MaxAuthTries = 3
--修改允许密码错误次数
PermitRootLogin no
--禁止使用root远程登录
RSAAuthentication yes
--设置用户密钥登录,只针对SSH1,此功能另开一篇记录
PubkeyAuthentication yes
--设置是否开启公钥验证
PermitEmptyPasswords
no --是否允许空密码
ClientAliveInterval 300
--设置SSH空闲超时退出时间,单位:秒
ClientAliveCountMax 0
--设置允许超时的次数 0即表示不允许超时
LogLevel INFO
– 开通登录日志的详细记录
AllowAgentForwarding no
–
AllowTcpForwarding no
--设置是否允许允许tcp端口转发,保护其他的tcp连接
UseDNS no
--设置不使用dns反向解析
MaxStartups 5
--设置同时允许5尚未登入的联机,当用户连上ssh但并未输入密码即为所谓的联机
3、记录所有用户的登录和操作日志
通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。vim /etc/profile
修改配置文件,在配置文件中输入以下内容:
history
USER=`whoami`
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 /var/log/history ]; then
mkdir /var/log/history
chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/$LOGNAME ]; then
mkdir /var/log/history/$LOGNAME
chmod 300 /var/log/history/$LOGNAME
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/$LOGNAME/$USER@$USER_IP_$DT"
chmod 600 /var/log/history/$LOGNAME/*history* 2>/dev/null
PS1: 记得执行命令:source /etc/profile
让配置生效
PS2:/var/log/history
是日志记录位置,可自定义。
通过上述脚本,可以在 /var/log/history 目录下以每个用户为名新建一个文件夹,每次用户退出后都会产生以用户名、登录IP、时间的日志文件,包含此用户本次的所有操作。
三、设置密码失效时间 | 身份鉴别
描述
设置密码失效时间,强制定期修改密码,减少密码被泄漏和猜测风险,使用非密码登录方式(如密钥对)请忽略此项。
加固建议
使用非密码登录方式如密钥对,请忽略此项。在 /etc/login.defs中将 PASS_MAX_DAYS 参数设置为 60-180之间
具体操作命令和步骤
1、修改配置文件 vi /etc/login.defs,设置全体用户的密码过期时间等
PASS_MAX_DAYS 90 ``#新建用户的密码最长使用天数
PASS_MIN_DAYS 0 ``#新建用户的密码最短使用天数
PASS_WARN_AGE 7 ``#新建用户的密码到期提前提醒天数
2、单独修改单用户的密码失效时间
使用chage 命令单独修改单用户配置
chage -m 0 -M 30 -E 2023-01-01 -W 7 doubles
chage -m (最短时间) -M (最长时间) -E (过期时间) -W (过期前X天提示) 用户名
表示将此用户doubles的密码最短使用天数设为0,最长使用天数设为30,密码2023年1月1日过期,过期前七天警告用户
操作时建议做好记录或备份
四、设置密码修改最小间隔时间 | 身份鉴别
描述
设置密码修改最小间隔时间,限制密码更改过于频繁
加固建议
在 /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为7-14之间,建议为7:
PASS_MIN_DAYS 7
需同时执行命令为root用户设置:
chage --mindays 7 root
操作时建议做好记录或备份
五、确保密码到期警告天数为7或更多 | 身份鉴别
描述
确保密码到期警告天数为28或更多
加固建议
在 /etc/login.defs 中将 PASS_WARN_AGE 参数设置为7-14之间,建议为7:
PASS_WARN_AGE 7
同时执行命令使root用户设置生效:
chage --warndays 7 root
操作时建议做好记录或备份
六、删除或禁用无用的账户和账户组 | 身份鉴别
描述
减少系统无用账号,降低安全风险。
加固建议
编辑/etc/passwd 和 /etc/group,注释无用的用户和用户组
操作时建议做好记录或备份
具体操作和步骤
1、用户和用户组涉及系统稳定性,修改前需要备份
cp /etc/passwd /etc/passwd_bak
cp /etc/group /etc/group_bak
2、注释无用的用户和用户组分别有:
用户: adm,lp,sync,shutdown,halt,news,uucp,operator,games,ftp,postfix,dovecot
用户组: adm,lp,mail,games,ftp,audio
加# 注释即可
七、限制用户切换至root | 安全配置
描述
禁止普通用户su到root用户,只允许指定的用户su到root用户。(需要root权限)
加固建议
为禁止普通用户su至root,需要分别修改/etc/pam.d/su和/etc/login.defs两个配置文件。
具体操作和步骤
自定义用户组能够su
1、创建用户组groupa
groupadd groupa
2、创建/etc/security/su-groupa-access文件,里面指定允许su到的用户
vim /etc/security/su-groupa-access
yjt
root
这就表示groupa的用户可以su到root和yjt,且要保证文件权限不是所有人都可以修改的。
3、在/etc/pam.d/su下加入下面三行
vim /etc/pam.d/su
auth [success=2 default=ignore] pam_succeed_if.so use_uid user notingroup groupa
auth required pam_wheel.so use_uid group=groupa
auth required pam_listfile.so item=user sense=allow onerr=fail
ClientAliveInterval 600
ClientAliveCountMax 2
操作时建议做好记录或备份
八、确保rsyslog服务已启用 | 安全审计
描述
确保rsyslog服务已启用,记录日志用于审计
加固建议
运行以下命令启用rsyslog服务:
systemctl enable rsyslog
systemctl start rsyslog
操作时建议做好记录或备份
九、设置密码错误锁定策略 | 服务配置
描述
设置锁定策略,防止被字典爆破
加固建议
编辑/etc/pam.d/sshd 文件,设置连续输错三次密码,账号锁定五分钟,只能由root用户解锁。
具体操作和步骤
1、修改配置
auth required pam_tally2.so onerr=fail deny=3 unlock_time=300
--一定要写在#%PAM-1.0下面,否则即使输错三次,只要继续输对了密码,还是可以登录,导致无法锁定
2、具体配置如下
#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
auth required pam_tally2.so onerr=fail deny=3 unlock_time=300 event_deny_root root_unlock_time=10
#pam_tally2.so:位于/usr/lib64/security/下。(注意:如果用pam_tally.so,是没有自动解锁的功能。只能进单用户模式解锁。)
#deny:设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户;
#unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒;
#no_magic_root 连root用户也在限制范围,不给root特殊权限。
#even_deny_root 也限制root用户;
#root_unlock_time 设定root用户锁定后,多少时间后解锁,单位是秒
# Used with polkit to reauthorize users in remote sessions-auth optional pam_reauthorize.so prepare
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
# Used with polkit to reauthorize users in remote sessions
-session optional pam_reauthorize.so prepare
十、访问控制配置文件的权限设置 | 文件权限
描述
访问控制配置文件的权限设置
加固建议
运行以下4条命令:
chown root:root /etc/hosts.allow
chown root:root /etc/hosts.deny
chmod 644 /etc/hosts.deny
chmod 644 /etc/hosts.allow
操作时建议做好记录或备份
十一、设置用户权限配置文件的权限 | 文件权限
描述
设置用户权限配置文件的权限
加固建议
执行以下5条命令
chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow
chmod 0644 /etc/group
chmod 0644 /etc/passwd
chmod 0400 /etc/shadow
chmod 0400 /etc/gshadow
操作时建议做好记录或备份
十二、开启地址空间布局随机化 | 入侵防范
描述
它将进程的内存空间地址随机化来增大入侵者预测目的地址难度,从而降低进程被成功入侵的风险
加固建议
在/etc/sysctl.conf或/etc/sysctl.d/*文件中设置以下参数: kernel.randomize_va_space = 2 执行命令: sysctl -w kernel.randomize_va_space=2
操作时建议做好记录或备份
十三、为grub 设置密码 | 安全加固
描述
为linux引导器grub设置密码,防止别人通过grub引导进入单用户模式进行非法操作。
加固建议
为grub2-setpassword
配置密码,加固服务器物理层的防御
具体操作和建议
1、查看系统默认密码
cat /etc/grub2.cfg | grep password
2、查看grub登录用户名
cat /etc/grub.d/01_users
3、 通过上面发现用户名是root,接下来通过grub2-setpassword命令修改密码
grub2-setpassword
4、改完密码重启
init 6
PS1: 在这里你就可以修改root密码的,慎重使用grob
PS2: 以上环境是centos7,其他系统环境略有所不同。
操作时建议做好记录或备份
十四、设置密码复杂度 | 身份鉴别
描述
加强口令的复杂度等,降低被猜解的可能性
操作时建议做好记录或备份
加固建议
a、用户密码不能包含用户名
b、用户密码不能少于10位
c、用户密码需要是特殊字符、数字、字母的组合
Linux对应的密码策略模块有:pam_passwdqc 和 pam_pwquality 。
pam_passwdqc模块对应的是/etc/login.defs
pam_pwquality模块对应的是/etc/security/pwquality.conf
具体操作及步骤
1、修改/etc/login.defs
vim /etc/login.defs
PASS_MIN_LEN 10 #密码最小长度
2、修改/etc/pam.d/system-auth
cp /etc/pam.d/system-auth /etc/pam.d/system-auth-backup
--备份
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
--找到同时有 “password” 和 “pam_unix.so” 字段并且附加有 “remember=5” 的那行,它表示禁止使用最近用过的5个密码(己使用过的密码会被保存在 /etc/security/opasswd 下面)
password requisite pam_cracklib.so retry=3 difok=3 minlen=10
--设置密码最小长度
3、相关字段说明:
pam_cracklib.so: 比较重要和难于理解的是它的一些参数和计数方法,其常用参数包括:
debug: 将调试信息写入日志;
type=xxx: 当添加/修改密码时,系统给出的缺省提示符是“New UNIX password:”以及“Retype UNIX
password:”,而使用该参数可以自定义输入密码的提示符,比如指定type=your own word;
retry=N: 定义登录/修改密码失败时,可以重试的次数;
difok=N : 定义新密码中必须有几个字符要与旧密码不同。但是如果新密码中有1/2以上的字符与旧密码不同时,该新密码将被接受;
minlen=N: 定义用户密码的最小长度;
dcredit=N: 定义用户密码中必须包含多少个数字;
ucredit=N: 定义用户密码中必须包含多少个大写字母;
lcredit=N: 定义用户密码中必须包含多少个小些字母;
ocredit=N: 定义用户密码中必须包含多少个特殊字符(除数字、字母之外);
我的配置如下(vim /etc/pam.d/system-auth
):
以下配置对root用户完全不起作用的,root权限为最高。-1表示至少一个
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 difok=1 minlen=8 authtok_type="double type"
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
十五、检查密码重用是否受限制 | 身份鉴别
描述
强制用户不重用最近使用的密码,降低密码猜测攻击风险
加固建议
在/etc/pam.d/password-auth和/etc/pam.d/system-auth中password sufficient pam_unix.so 这行的末尾配置remember参数为5-24之间,原来的内容不用更改,只在末尾加了remember=5。
操作时建议做好记录或备份
完全指南:如何在 CentOS 7 中安装配置和安全加固 FTP 服务
FTP(文件传输协议)是一种用于通过网络[1]的传统并广泛使用的标准工具,特别是在不需要身份验证的情况下(允许匿名用户连接到服务器)。我们必须明白,默认情况下 FTP 是不安全的,因为它不加密传输用户凭据和数据。
在本指南中,我们将介绍在 CentOS/RHEL7 和 Fedora 发行版中安装、配置和保护 FTP 服务器( VSFTPD 代表 “Very Secure FTP Daemon”)的步骤。
请注意,本指南中的所有命令将以 root 身份运行,如果你不使用 root 帐户操作服务器,请使用 [2] 获取 root 权限。
步骤 1:安装 FTP 服务器
1、 安装 vsftpd 服务器很直接,只要在终端运行下面的命令。
# yum install vsftpd
2、 安装完成后,服务先是被禁用的,因此我们需要手动启动,并设置在下次启动时自动启用:
# systemctl start vsftpd
# systemctl enable vsftpd
3、 接下来,为了允许从外部系统访问 FTP 服务,我们需要打开 FTP 守护进程监听的 21 端口:
# firewall-cmd --zone=public --permanent --add-port=21/tcp
# firewall-cmd --zone=public --permanent --add-service=ftp
# firewall-cmd --reload
步骤 2: 配置 FTP 服务器
4、 现在,我们会进行一些配置来设置并加密我们的 FTP 服务器,让我们先备份一下原始配置文件 /etc/vsftpd/vsftpd.conf
:
# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig
接下来,打开上面的文件,并将下面的选项设置相关的值:
anonymous_enable=NO ### 禁用匿名登录
local_enable=YES ### 允许本地用户登录
write_enable=YES ### 允许对文件系统做改动的 FTP 命令
local_umask=022 ### 本地用户创建文件所用的 umask 值
dirmessage_enable=YES ### 当用户首次进入一个新目录时显示一个消息
xferlog_enable=YES ### 用于记录上传、下载细节的日志文件
connect_from_port_20=YES ### 使用端口 20 (ftp-data)用于 PORT 风格的连接
xferlog_std_format=YES ### 使用标准的日志格式
listen=NO ### 不要让 vsftpd 运行在独立模式
listen_ipv6=YES ### vsftpd 将监听 IPv6 而不是 IPv4
pam_service_name=vsftpd ### vsftpd 使用的 PAM 服务名
userlist_enable=YES ### vsftpd 支持载入用户列表
tcp_wrappers=YES ### 使用 tcp wrappers
5、 现在基于用户列表文件 /etc/vsftpd.userlist
来配置 FTP 来允许/拒绝用户的访问。
默认情况下,如果设置了 userlist_enable=YES
,当 userlist_deny
选项设置为 YES
的时候,userlist_file=/etc/vsftpd.userlist
中列出的用户被拒绝登录。
然而, 更改配置为 userlist_deny=NO
,意味着只有在 userlist_file=/etc/vsftpd.userlist
显式指定的用户才允许登录。
userlist_enable=YES ### vsftpd 将从 userlist_file 给出的文件中载入用户名列表
userlist_file=/etc/vsftpd.userlist ### 存储用户名的文件
userlist_deny=NO
这并不是全部,当用户登录到 FTP 服务器时,它们会进入 chroot jail 中,这是仅作为 FTP 会话主目录的本地根目录。
接下来,我们将介绍如何将 FTP 用户 chroot 到 FTP 用户的家目录(本地 root)中的两种可能情况,如下所述。
6、 接下来添加下面的选项来限制 FTP 用户到它们自己的家目录。
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_local_user=YES
意味着用户可以设置 chroot jail,默认是登录后的家目录。
同样默认的是,出于安全原因,vsftpd 不会允许 chroot jail 目录可写,然而,我们可以添加 allow_writeable_chroot=YES
来覆盖这个设置。
保存并关闭文件。
步骤 3: 用 SELinux 加密 FTP 服务器
7、现在,让我们设置下面的 SELinux 布尔值来允许 FTP 能读取用户家目录下的文件。请注意,这原本是使用以下命令完成的:
# setsebool -P ftp_home_dir on
然而,由于这个 bug 报告:,ftp_home_dir
指令默认是禁用的。
现在,我们会使用 semanage
命令来设置 SELinux 规则来允许 FTP 读取/写入用户的家目录。
# semanage boolean -m ftpd_full_access --on
这时,我们需要重启 vsftpd 来使目前的设置生效:
# systemctl restart vsftpd
步骤 4: 测试 FTP 服务器
8、 现在我们会用 [3]创建一个 FTP 用户来测试 FTP 服务器。
# useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi
# passwd ravi
之后,我们如下使用 [4]添加用户 ravi 到文件 /etc/vsftpd.userlist
中:
# echo "ravi" | tee -a /etc/vsftpd.userlist
# cat /etc/vsftpd.userlist
9、 现在是时候测试我们上面的设置是否可以工作了。让我们使用匿名登录测试,我们可以从下面的截图看到匿名登录没有被允许。
# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>
测试 FTP 匿名登录
10、 让我们也测试一下没有列在 /etc/vsftpd.userlist
中的用户是否有权限登录,下面截图是没有列入的情况:
# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>
FTP 用户登录失败
11、 现在最后测试一下列在 /etc/vsftpd.userlist
中的用户是否在登录后真的进入了他/她的家目录:
# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
用户成功登录
警告:使用 allow_writeable_chroot=YES
有一定的安全隐患,特别是用户具有上传权限或 shell 访问权限时。
只有当你完全知道你正做什么时才激活此选项。重要的是要注意,这些安全性影响并不是 vsftpd 特定的,它们适用于所有提供了将本地用户置于 chroot jail 中的 FTP 守护进程。
因此,我们将在下一节中看到一种更安全的方法来设置不同的不可写本地根目录。
步骤 5: 配置不同的 FTP 家目录
12、 再次打开 vsftpd 配置文件,并将下面不安全的选项注释掉:
#allow_writeable_chroot=YES
接着为用户(ravi
,你的可能不同)创建另外一个替代根目录,并将所有用户对该目录的可写权限移除:
# mkdir /home/ravi/ftp
# chown nobody:nobody /home/ravi/ftp
# chmod a-w /home/ravi/ftp
13、 接下来,在用户存储他/她的文件的本地根目录下创建一个文件夹:
# mkdir /home/ravi/ftp/files
# chown ravi:ravi /home/ravi/ftp/files
# chmod 0700 /home/ravi/ftp/files/
接着在 vsftpd 配置文件中添加/修改这些选项:
user_sub_token=$USER ### 在本地根目录下插入用户名
local_root=/home/$USER/ftp ### 定义任何用户的本地根目录
保存并关闭文件。再说一次,有新的设置后,让我们重启服务:
# systemctl restart vsftpd
14、 现在最后在测试一次查看用户本地根目录就是我们在他的家目录创建的 FTP 目录。
# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
FTP 用户家目录登录成功
就是这样了!在本文中,我们介绍了如何在 CentOS 7 中安装、配置以及加密的 FTP 服务器,使用下面的评论栏给我们回复,或者分享关于这个主题的任何有用信息。
建议阅读: [5]
在下一篇文章中,我们还将向你介绍如何在 CentOS 7 中[6]连接的 FTP 服务器,再此之前,请继续关注 TecMint。
作者简介:
Aaron Kili 是一名 Linux 和 F.O.S.S 爱好者,即将从事 Linux 系统管理员和网页开发工作,他日前是 TecMint 技术网站的原创作者,非常喜欢使用电脑工作,坚信分享知识是一种美德。
via:
本文由 原创编译, 荣誉推出
推荐文章
< 左右滑动查看相关文章 >
输入文章 ID 或长按二维码直达
以上是关于Centos7十五项安全加固标准配置(结合等保3)的主要内容,如果未能解决你的问题,请参考以下文章