1.概述
对于开放式的操作系统---Linux,系统的安全设定包括系统服务最小化、限制远程存取、隐藏重要资料、修补安全漏洞、采用安全工具以及经常性的安全检查等。
本文主要从用户设置、如何开放服务、系统优化等方面进行系统的安全配置,以到达使Linux服务器更安全、稳定。
2.用户管理
在Linux系统中,用户帐号是用户的身份标志,它由用户名和用户口令组成。
系统将输入的用户名存放在/etc/passwd文件中,而将输入的口令以加密的形式存放在/etc/shadow文件中。
2.1 删除系统特殊的的用户帐号和组帐号:

以上所删除用户为系统默认创建,但是在常用服务器中基本不使用的一些帐号,但是这些帐号常被黑客利用和攻击服务器。

同样,以上删除的是系统安装是默认创建的一些组帐号。这样就减少受攻击的机会。
2.2用户密码设置:
安装linux时默认的密码最小长度是5个字节,但这并不够,要把它设为8个字节。修改最短密码长度需要编辑login.defs文件(vi /etc/login.defs) ,设置为:
PASS_MAX_DAYS 90 ##密码设置最长有效期
PASS_MIN_DAYS 6 ##密码设置最短有效期
PASS_MIN_LEN 8 ##设置密码最小长度
PASS_WARN_AGE 30 ##提前多少天警告用户密码即将过期
设置用户目录缺省访问权限
vi /etc/login.defs
在文件中设置
UMASK 027
2.3 修改自动注销帐号时间:
自动注销帐号的登录,在Linux系统中root账户是具有最高特权的。如果系统管理员在离开系统之前忘记注销root账户,那将会带来很大的安全隐患,应该让系统会自动注销。通过修改账户中“TMOUT”参数,可以实现此功能。TMOUT按秒计算。编辑你的profile文件(vi /etc/profile),在"HISTSIZE="后面加入下面这行:
export TMOUT=1200
300,表示300秒,也就是表示5分钟。这样,如果系统中登陆的用户在5分钟内都没有动作,那么系统会自动注销这个账户。
2.4 给系统的用户名密码存放文件加锁(注意:配置后不能更改密码,一般不配置):

注:chattr是改变文件属性的命令,参数i代表不得任意更动文件或目录,此处的i为不可修改位(immutable)。查看方法:lsattr /etc/passwd
2.5限制Shell命令记录大小
默认情况下,bash shell会在文件$HOME/.bash_history中存放多达500条命令记录(根据具体的系统不同,默认记录条数不同)。系统中每个用户的主目录下都有一个这样的文件。在此笔者强烈建议限制该文件的大小。
您可以编辑/etc/profile文件,修改其中的选项如下:
HISTFILESIZE=5或HISTSIZE=5
#vi /etc/profile
export HISTSIZE=10
export HISTFILESIZE=10
2.6阻止任何人su作为root
如果你不想任何人能够su作为root,你能编辑/etc/pam.d/su加下面的行:
请先把用户添加到wheel组,以使它可以使用su命令成为root用户,
添加方法为:usermod –G wheel xxx
#vi /etc/pam.d/su
auth sufficient pam_rootok.so
auth required pam_wheel.so group=wheel
意味着仅仅wheel组的用户可以su作为root.
修改 /etc/sudoers ,增加一行
xxx ALL=(ALL) ALL <!--新增行-->
2.7 设置密码复杂度策略和锁定多次登陆失败的用户
# vi /etc/pam.d/system-auth
修改:
password requisite pam_cracklib.so try_first_pass retry=3 type= ocredit=-1 lcredit=-1 dcredit=-1 ucredit=-1
说明(参数-1为包含):
type:提示为空;ocredit:特殊字符个数;lcredit:小写字母个数;dcredit:数字个数;ucredit:大写字母个数
增加:
centos 5 以下
auth required pam_tally.so deny=5 unlock_time=600
centos 6 以上
auth required pam_tally2.so deny=5 unlock_time=600
centos 8以上
auth required pam_faillock.so preauth silent audit deny=5 unlock_time=600
2.8 不允许root直接登陆和ssh认证次数限制
vi /etc/ssh/sshd_config
修改:
PermitRootLogin yes ##将前面的“#”去掉,短尾“Yes”改为“No”,并保存文件。
MaxAuthTries 5 ##超过5次验证错误断开连接
vi /etc/pam.d/sshd
centos 5 以下
auth required pam_tally.so deny=5 unlock_time=600
centos 6 以上
auth required pam_tally2.so deny=5 unlock_time=600
centos 8以上
auth required pam_faillock.so preauth silent audit deny=5 unlock_time=600
3.服务管理
在Linux系统的服务管理方面,如果想做到服务的最好安全,其中主要的就是升级服务本身的软件版本,另外一个就是关闭系统不使用的服务,做到服务最小化。
3.1 关闭系统不使用的服务:

在这里有两个方法,可以关闭init目录下的服务,一、将init目录下的文件名mv成*.old类的文件名,即修改文件名,作用就是在系统启动的时候找不到这个服务的启动文件。二、使用chkconfig系统命令来关闭系统启动等级的服务。
注:在使用以下任何一种方法时,请先检查需要关闭的服务是否是本服务器特别需要启动支持的服务,以防关闭正常使用的服务。
第一种:修改文件名的方法

第二种:使用chkcofig命令来关闭不使用的系统服务

注:以上chkcofig 命令中的3和5是系统启动的类型,3代表系统的多用启动方式,5代表系统的X启动方式。
3.2 给系统服务端口列表文件加锁
主要作用:防止未经许可的删除或添加服务

3.3修改ssh服务的sshd 端口
ssh默认会监听在22端口,你可以修改至6022端口以避过常规的扫描。
注意:修改端口错误可能会导致你下次连不到服务器,可以先同时开着22和6022两个端口,然后再关掉22端口;
重启sshd不会弹掉你当前的连接,可以另外开一个客户端来测试服务;
#vi /etc/ssh/sshd_config
#增加修改
#Port 22 #关闭22端口
Port 6022 #增加6022端口
#重启sshd服务
service sshd restart
5.系统优化
5.1 虚拟内存优化:
一般来说,linux的物理内存几乎是完全used。这个和windows非常大的区别,它的内存管理机制将系统内存充分利用,并非windows无论多大的内存都要去使用一些虚拟内存一样。
在/proc/sys/vm/freepages中三个数字是当前系统的:最小内存空白页、最低内存空白页和最高内存空白。
注意,这里系统使用虚拟内存的原则是:如果空白页数目低于最高空白页设置,则使用磁盘交换空间。当达到最低空白页设置时,使用内存交换。内存一般以每页4k字节分配。最小内存空白页设置是系统中内存数量的2倍;最低内存空白页设置是内存数量的4倍;最高内存空白页设置是系统内存的6倍。
以下以1G内存为例修改系统默认虚拟内存参数大小:

6.日志管理
6.1 系统引导日志:
dmesg
使用 dmesg 命令可以快速查看最后一次系统引导的引导日志。通常它的
内容会很多,所以您往往会希望将其通过管道传输到一个阅读器。
6.2 系统运行日志:
A、Linux 日志存储在 /var/log 目录中。这里有几个由系统维护的日志文件,但其他服务和程序也可能会把它们的日志放在这里。大多数日志只有 root 才可以读,不过只需要修改文件的访问权限就可以让其他人可读。
以下是常用的系统日志文件名称及其描述:

B、/var/log/messages
messages 日志是核心系统日志文件。它包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO 错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份切换为 root,也在这里列出。如果服务正在运行,比如 DHCP 服务器,您可以在messages 文件中观察它的活动。通常,/var/log/messages 是您在做故障诊断时首先要查看的文件。
C、/var/log/XFree86.0.log
这个日志记录的是 Xfree86 Xwindows 服务器最后一次执行的结果。如果您在启动到图形模式时遇到了问题,一般情况从这个文件中会找到失败的原因。
D、在/var/log 目录下有一些文件以一个数字结尾,这些是已轮循的归档文件。日志文件会变得特别大,特别笨重。Linux 提供了一个命令来轮循这些日志,以使您的当前日志信息不会淹没在旧的无关信息之中。 logrotate 通常是定时自动运行的,但是也可以手工运行。当执行后,logrotate 将取得当前版本的日志文件,然后在这个文件名最后附加一个“.1”。其他更早轮循的文件为“.2”、“.3”,依次类推。文件名后的数字越大,日志就越老。
可以通过编辑 /etc/logrotate.conf 文件来配置 logrotate 的自动行为。
定制日志
1安装sudo和syslog服务
使用yum等命令在在线安装sudo和syslog服务(在centos6.4中syslog为rsyslog服务)
2配置/etc/sudoers
在/etc/sudoers中配置下面这一行配置
Defaults logfile=/var/log/sudo.log
3配置系统日志/etc/(r)syslog.conf
在/etc/syslog.conf中添加下面一行的配置文件
*.* /var/log/sudo.log
4重启syslog服务
/etc/init.d/rsyslog restart
然后在/var/log/sudo.log 中就可以发现使用sudo命令的用户。
5.为审计产生的数据分配合理的存储空间和存储时间
检查方法:
#cat /etc/logrotate.conf 查看系统轮询配置,
# rotate log files weekly
weekly
#这里代表每个日志文件是每个星期循环一次,一个日志文件保存一个星期的内容。
# keep 4 weeks worth of backlogs
rotate 26
#这里代表日志循环的次数是26次,即可以保存26个日志文件。
日志配置参考:
/opt/logtest/*.log {
daily # 每天分割一次
rotate 30 # 保留最近30个分割后的日志文件
copytruncate
missingok
dateext # 切割后的文件添加日期作为后缀
dateyesterday # 配合dateext使用,添加前一天的日期作为分割后日志的后缀
dateformat -%Y-%m-%d # 格式为2022-02-08
}
添加 crontab 计划任务
01 01 * * * /usr/sbin/logrotate -f /etc/logrotate_d/xxx