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<等级代号> 指定读系统服务要在哪一个执行等级中开启或关毕*/
后面的有时间再更新