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