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

后面的有时间再更新


相关推荐
PyAIGCMaster11 分钟前
ubuntu装P104驱动
linux·运维·ubuntu
奈何不吃鱼12 分钟前
【Linux】ubuntu依赖安装的各种问题汇总
linux·运维·服务器
icy、泡芙14 分钟前
T527-----音频调试
linux·驱动开发·音视频
aherhuo17 分钟前
kubevirt网络
linux·云原生·容器·kubernetes
爱码小白17 分钟前
网络编程(王铭东老师)笔记
服务器·网络·笔记
zzzhpzhpzzz25 分钟前
Ubuntu如何查看硬件型号
linux·运维·ubuntu
蜜獾云28 分钟前
linux firewalld 命令详解
linux·运维·服务器·网络·windows·网络安全·firewalld
黑客Jack1 小时前
防御 XSS 的七条原则
安全·web安全·xss
o(╥﹏╥)1 小时前
linux(ubuntu )卡死怎么强制重启
linux·数据库·ubuntu·系统安全
娶不到胡一菲的汪大东1 小时前
Ubuntu概述
linux·运维·ubuntu