等保2.0 测评 linux服务器加固 基本安全配置手册

1.删除系统特殊的的用户帐号:

禁止所有默认的被操作系统本身启动的且不需要的帐号,当你第一次装上系统时就应该做此检查,Linux提供了各种帐号,你可能不需要,如果你不需要这个帐号,就移走它,你有的帐号越多,就越容易受到攻击。

#为删除你系统上的用户,用下面的命令:

[root@c1gstudio]# userdel username

#批量删除方式

#这里删除"adm lp sync shutdown halt mail news uucp operator games gopher ftp "账号

#如果你开着ftp等服务可以把ftp账号保留下来。

for i in adm lp sync shutdown halt mail news uucp operator games gopher ftp ;do userdel $i ;done

2.删除系统特殊的组帐号

[root@c1gstudio]# groupdel groupname

#批量删除方式

for i in adm lp mail news uucp games dip pppusers popusers slipusers ;do groupdel $i ;done

3.用户密码设置

安装linux时默认的密码最小长度是5个字节,但这并不够,要把它设为8个字节。修改最短密码长度需要编辑login.defs文件

#vi /etc/login.defs

PASS_MAX_DAYS 99999 ##密码设置最长有效期(默认值)

PASS_MIN_DAYS 0 ##密码设置最短有效期

PASS_MIN_LEN 5 ##设置密码最小长度,将5改为8

PASS_WARN_AGE 7 ##提前多少天警告用户密码即将过期。

然后修改Root密码:

#passwd root

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

4.修改自动注销帐号时间

自动注销帐号的登录,在Linux系统中root账户是具有最高特权的。如果系统管理员在离开系统之前忘记注销root账户,那将会带来很大的安全隐患,应该让系统会自动注销。通过修改账户中"TMOUT"参数,可以实现此功能。TMOUT按秒计算。编辑你的profile文件(vi /etc/profile),在"HISTSIZE="后面加入下面这行:

TMOUT=300

300,表示300秒,也就是表示5分钟。这样,如果系统中登陆的用户在5分钟内都没有动作,那么系统会自动注销这个账户。

5.限制Shell命令记录大小

默认情况下,bash shell会在文件$HOME/.bash_history中存放多达500条命令记录(根据具体的系统不同,默认记录条数不同)。系统中每个用户的主目录下都有一个这样的文件。在此笔者强烈建议限制该文件的大小。

您可以编辑/etc/profile文件,修改其中的选项如下:

HISTFILESIZE=30或HISTSIZE=30

#vi /etc/profile

HISTSIZE=30

source /etc/profile

6.注销时删除命令记录

编辑/etc/skel/.bash_logout文件,增加如下行:

rm -f $HOME/.bash_history

这样,系统中的所有用户在注销时都会删除其命令记录。

如果只需要针对某个特定用户,如root用户进行设置,则可只在该用户的主目录下修改/$HOME/.bash_history文件,增加相同的一行即可。

但是每次退出前都要重新加载文件:

source /etc/skel/.bash_logout

然后: exit

注释:

/etc/skel 是一个目录,而不是一个文件。在Linux系统中,它是"骨架目录"(skeleton directory)的缩写。

骨架目录(skeleton directory)是用作新用户的模板的目录。当在系统上创建新用户时,系统会将/etc/skel目录中的内容复制到新用户的主目录(通常是/home/username)作为其初始设置。这样,新用户将获得一组预定义的文件和配置,用作其个人主目录的起点

7.用下面的命令加需要的用户组和用户帐号

[root@c1gstudio]# groupadd

例如:增加website 用户组,groupadd website然后调用vigr(vim etc/group)命令查看已添加的用户组

用下面的命令加需要的用户帐号

[root@c1gstudio]# useradd username --g website //添加用户到website组(作为webserver的普通管理员,而非root管理员)然后调用vipw(vim /etc/passwd)命令查看已添加的用户。

用下面的命令改变用户口令(至少输入8位字母和数字组合的密码,并将密码记录于本地机的专门文档中,以防遗忘)

[root@c1gstudio]# passwd username

8.阻止任何人su作为root

如果你不想任何人能够su作为root,你能编辑/etc/pam.d/su加下面的行:

#vi /etc/pam.d/su

auth sufficient /lib/security/$ISA/pam_rootok.so debug

auth required /lib/security/$ISA/pam_wheel.so group=website

意味着仅仅root和website组的用户可以su作为root.

注释:

auth sufficient /lib/security/$ISA/pam_rootok.so debug: 这行配置指定了一个身份验证模块,pam_rootok.so,它允许以root用户身份进行身份验证,且在调试模式下输出额外的调试信息。sufficient表示如果这个模块成功验证了用户身份,那么整个身份验证过程将被视为通过,不再继续执行后续的身份验证规则。

这意味着只有当使用 root 用户登录并且提供正确的密码时,才能通过验证。如果使用其他用户进行身份验证,即使密码正确,也不能通过验证。

auth required /lib/security/$ISA/pam_wheel.so group=website: 这行配置指定了另一个身份验证模块,pam_wheel.so,它要求用户必须是属于wheel组的成员才能通过身份验证。group=website指定了所需的组名称为website,只有属于该组的用户才能通过身份验证。required表示如果这个模块未能验证用户身份,那么整个身份验证过程将被视为失败,不再继续执行后续的身份验证规则。

假设有以下的 PAM 配置规则:

auth required pam_unix.so # PAM 模块1

auth required pam_ldap.so # PAM 模块2

auth required pam_wheel.so # PAM 模块3

在这个例子中,三个 PAM 模块用于身份验证。如果其中任何一个模块标记为 "required" 的模块无法通过验证,那么整个身份验证过程将被视为失败。

假设 pam_unix.so 模块用于本地密码验证,pam_ldap.so 模块用于 LDAP(轻型目录访问协议)身份验证,pam_wheel.so 模块用于限制特定用户组的访问权限。

如果用户提供的本地密码无法通过 pam_unix.so 模块的验证,那么整个身份验证过程将失败,并且不会尝试进行 LDAP 或特定用户组的验证。系统会立即返回身份验证失败的结果

9.修改ssh服务的root登录权限

修改ssh服务配置文件,使的ssh服务不允许直接使用root用户来登录,这样减少系统被恶意登录攻击的机会。

#vi /etc/ssh/sshd_config

PermitRootLogin yes

将这行前的#去掉后,修改为:

PermitRootLogin no

10.修改ssh服务的sshd 端口

ssh默认会监听在22端口,你可以修改至6022端口以避过常规的扫描。

注意:修改端口错误可能会导致你下次连不到服务器,可以先同时开着22和6022两个端口,然后再关掉22端口;

重启sshd不会弹掉你当前的连接,可以另外开一个客户端来测试服务;

#vi /etc/ssh/sshd_config#增加修改

#Port 22 #关闭22端口

Port 6022 #增加6022端口

#重启sshd服务

service sshd restart

检查一下sshd的监听端口对不对

netstat -lnp |grep ssh

#iptables开放sshd的6022端口

vi /etc/sysconfig/iptables

#如果使用redhat默认规则则增加

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6022 -j ACCEPT#

-A RH-Firewall-1-INPUT # 将规则添加到RH-Firewall-1-INPUT链

-m state --state NEW # 匹配连接状态为NEW(新连接)

-m tcp -p tcp # 匹配TCP协议的数据包

--dport 6022 # 匹配目标端口为6022的数据包

-j ACCEPT # 如果以上条件匹配,允许数据包通过

或iptables -A INPUT -p tcp --dport 6022 -j ACCEPT

iptables -A OUTPUT -p udp --sport 6022 -j ACCEPT

重启iptables 服务

service iptables restart

#测试两个端口是否都能连上,连上后再将22端口删除

注释:

l:显示监听状态的网络连接。这将只显示正在侦听(监听)连接的端口和相关信息。

-n:以数字形式显示地址和端口号,而不进行名称解析。这将显示IP地址和端口号,而不是对应的主机名或服务名称。

-p:显示与连接相关的进程(程序)信息。这将显示与每个网络连接关联的进程ID(PID)和进程名称。

11.关闭系统不使用的服务

cd /etc/init.d #进入到系统init进程启动目录

在这里有两个方法,可以关闭init目录下的服务,

一、将init目录下的文件名mv成*.old类的文件名,即修改文件名,作用就是在系统启动的时候找不到这个服务的启动文件。

二、使用chkconfig系统命令来关闭系统启动等级的服务。

注:在使用以下任何一种方法时,请先检查需要关闭的服务是否是本服务器特别需要启动支持的服务,以防关闭正常使用的服务。

使用chkcofig命令来关闭不使用的系统服务 (level前面为2个减号)要想在修改启动脚本前了解有多少服务正在运行,输入:

ps aux | wc -l

ps aux: 列出当前系统中所有进程的详细信息。ps是一个用于查看进程信息的命令,aux是参数,其中a表示显示所有用户的进程,u表示以详细格式显示进程信息,x表示显示没有控制终端的进程。

|: 管道符号,用于将前一个命令的输出作为后一个命令的输入。

wc -l: 统计输入中的行数。wc是一个用于统计文件或输入的字符数、字数和行数的命令,-l参数表示只统计行数。

然后修改启动脚本后,重启系统,再次输入上面的命令,就可计算出减少了多少项服务。越少服务在运行,安全性就越好。另外运行以下命令可以了解还有多少服务在运行:

netstat -na --ip

批量方式先停止服务

-na: 参数用于显示所有连接和监听端口的数字格式,而不是尝试解析为主机名和服务名。

--ip: 参数用于只显示与IP协议相关的连接和监听端口。

for i in acpid anacron apmd atd auditd autofs avahi-daemon avahi-dnsconfd bluetooth cpuspeed cups dhcpd firstboot gpm haldaemon hidd ip6tables ipsec isdn kudzu lpd mcstrans messagebus microcode_ctl netfs nfs nfslock nscd pcscd portmap readahead_early restorecond rpcgssd rpcidmapd rstatd sendmai

l setroubleshoot snmpd sysstat xfs xinetd yppasswdd ypserv yum-updatesd ;

do service $i stop;

done

关闭启动服务

for i in acpid anacron apmd atd auditd autofs avahi-daemon avahi-dnsconfd bluetooth cpuspeed cups dhcpd firstboot gpm haldaemon hidd ip6tables ipsec isdn kudzu lpd mcstrans messagebus microcode_ctl netfs nfs nfslock nscd pcscd portmap readahead_early restorecond rpcgssd rpcidmapd rstatd sendmai

l setroubleshoot snmpd sysstat xfs xinetd yppasswdd ypserv yum-updatesd ;

do chkconfig $i off;

done

以下为手动方式及解释,执行批量方式后不需再执行了

chkconfig --level 345 apmd off ## 笔记本需要

笔记本电脑的电源管理守护程序,它负责管理电源状态和相关功能。

chkconfig --level 345 netfs off ## nfs 客户端

netfs:NFS(Network File System)客户端服务,它允许系统挂载远程文件系统。

NFS(Network File System)是一种分布式文件系统协议,允许不同计算机之间通过网络共享文件和目录。NFS客户端服务(netfs)是在Linux系统中运行的组件,它使得您的系统能够挂载(即连接)远程NFS服务器上的文件系统,使得您可以像访问本地文件系统一样访问远程文件系统。

通过挂载远程文件系统,您可以在本地系统上使用命令和工具对远程文件进行读取、写入和执行操作。

chkconfig --level 345 yppasswdd off ## NIS 服务器,此服务漏洞很多

yppasswdd:NIS(Network Information Service)服务器的密码更改守护程序,它负责处理NIS用户密码更改请求。

NIS是一种用于集中管理用户帐户和相关信息(如密码、组、主机等)的网络服务。

当NIS服务器上运行yppasswdd服务时,用户可以使用特定的命令或工具远程连接到NIS服务器,并通过提供旧密码和新密码来更改其在NIS服务器上的密码。这种远程更改密码的能力使得用户可以通过任何连接到NIS服务器的计算机进行密码更改,而无需直接在本地机器上操作。

chkconfig --level 345 ypserv off ## NIS 服务器,此服务漏洞很多

ypserv:NIS服务器服务,它提供用户认证和用户信息的集中管理。

chkconfig --level 345 dhcpd off ## dhcp 服务

chkconfig --level 345 portmap off ## 运行rpc(111端口)服务必需

端口映射服务,它为RPC(Remote Procedure Call)提供了一个映射机制,允许远程程序调用本地程序。

chkconfig --level 345 lpd off ## 打印服务

打印守护程序,它负责管理打印作业和打印队列

chkconfig --level 345 nfs off ## NFS 服务器,漏洞极多

nfs:NFS服务器服务,它允许远程客户端访问本地文件系统,并共享文件和目录。

chkconfig --level 345 sendmail off ## 邮件服务, 漏洞极多

邮件传输代理服务,它负责发送和接收电子邮件

chkconfig --level 345 snmpd off ## SNMP ,远程用户能从中获得许多系统信息chkconfig --level 345 rstatd off ##避免运行r服务,远程用户可以从中获取很多信息

rstatd 是一个用于远程系统状态监控的服务,可以提供系统的一些统计信息。关闭该服务可以避免远程用户从中获取系统信息。

chkconfig --level 345 atd off ##和cron很相似的定时运行程序的服务

atd 服务类似于 cron,用于定时运行程序。

注:以上chkcofig 命令中的3和5是系统启动的类型,以下为数字代表意思

0:开机(请不要切换到此等级)

1:单人使用者模式的文字界面

2:多人使用者模式的文字界面,不具有网络档案系统(NFS)功能

3:多人使用者模式的文字界面,具有网络档案系统(NFS)功能

4:某些发行版的linux使用此等级进入x windows system

5:某些发行版的linux使用此等级进入x windows system(图形界面模式(带有图形登录界面))

6:重新启动

如果不指定--level 单用on和off开关,系统默认只对运行级3,4,5有效

chkconfig cups off #打印机

chkconfig bluetooth off # 蓝牙

chkconfig hidd off # 蓝牙

chkconfig ip6tables off # ipv6

chkconfig ipsec off # vpn

chkconfig auditd off #用户空间监控程序

chkconfig autofs off #光盘软盘硬盘等自动加载服务

chkconfig avahi-daemon off #主要用于Zero Configuration Networking ,一般没什么用建议关闭

chkconfig avahi-dnsconfd off #主要用于Zero Configuration Networking ,同上,建议关闭

chkconfig cpuspeed off #动态调整CPU频率的进程,在服务器系统中这个进程建议关闭

chkconfig isdn off #isdn

chkconfig kudzu off #硬件自动监测服务

chkconfig nfslock off #NFS文档锁定功能。文档共享支持,无需的能够关了chkconfig nscd off #负责密码和组的查询,在有NIS服务时需要

chkconfig pcscd off #智能卡支持,,如果没有可以关了

chkconfig yum-updatesd off #yum更新

chkconfig acpid off

chkconfig autofs off

chkconfig firstboot off

chkconfig mcstrans off #selinux

chkconfig microcode_ctl off

chkconfig rpcgssd off

chkconfig rpcidmapd off

chkconfig setroubleshoot off

chkconfig xfs off

chkconfig xinetd off

chkconfig messagebus off

chkconfig gpm off #鼠标

chkconfig restorecond off #selinux

chkconfig haldaemon off

chkconfig sysstat off

chkconfig readahead_early off

chkconfig anacron off

需要保留的服务

crond , irqbalance , microcode_ctl ,network , sshd ,syslog

irqbalance:irqbalance是一个用于在多核系统上平衡中断(IRQ)负载的守护程序。在多核处理器系统中,各个处理器核心之间的中断负载可能不均衡,导致某些核心处理更多的中断请求,而其他核心却处于空闲状态。irqbalance通过重新分配中断负载,可以提高系统的性能和响应性能,确保各个处理器核心的负载均衡。

microcode_ctl:microcode_ctl是一个用于处理处理器微码(microcode)更新的工具。处理器微码是一种固件,用于对处理器进行修正、优化或安全更新。microcode_ctl工具通过加载处理器微码更新,可以在系统运行时更新和修复处理器的功能或漏洞

因为有些服务已运行,所以设置完后需重启

chkconfig/*

语法:chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]

补充说明:这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。

参数:

--add  增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。

--del  删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。

--level<等级代号>  指定读系统服务要在哪一个执行等级中开启或关毕*/

后面的有时间再更新


相关推荐
山兔16 分钟前
工控安全防护机制与技术
安全
深情废杨杨19 分钟前
服务器几核几G几M是什么意思?如何选择?
运维·服务器
康熙38bdc20 分钟前
Linux 进程优先级
linux·运维·服务器
Web极客码21 分钟前
常见的VPS或者独立服务器的控制面板推荐
运维·服务器·控制面板
hhzz23 分钟前
Linux Shell编程快速入门以及案例(Linux一键批量启动、停止、重启Jar包Shell脚本)
android·linux·jar
只是有点小怂25 分钟前
parted是 Linux 系统中用于管理磁盘分区的命令行工具
linux·运维·服务器
代码雕刻家42 分钟前
数据结构-3.10.队列的应用
服务器·数据结构
三枪一个麻辣烫1 小时前
linux基础命令
linux·运维·服务器
HEX9CF1 小时前
【CTF Web】Pikachu xss之href输出 Writeup(GET请求+反射型XSS+javascript:伪协议绕过)
开发语言·前端·javascript·安全·网络安全·ecmascript·xss
cuisidong19971 小时前
如何在 Kali Linux 上安装 Google Chrome 浏览器
linux·运维·chrome