• 1. 中国科学院计算机网络信息中心 中国科技网网络中心 www.cstnet.cn All rights reservedLINUX系统的安全加固中国科技网网络中心 安全部 高鹏
  • 2. 前言 Linux系统凭借其稳定且源代码公开的特性,在互联网络上的应用已经越来越多。 当前,随着各式网络攻击、病毒威胁的不断增多,Linux系统的安全性也被愈发重视。因此,Linux系统的加固已成为网络管理员、普通用户迫在眉睫所需进行的工作。
  • 3. 目录帐户安全设置2日志安全设置4启动安全设置31系统安全设置33
  • 4. 启动安全设置GRUB引导它允许位于主引导记录区中特定的指令来装载一个GRUB菜单或是 GRUB的命令环境。这使得用户能够开始操作系统的选择,在内核引 导时传递特定指令给内核,或是在内核引导前确定一些系统参数。LILO引导 LILO安装命令(/sbin/lilo)读取其配置文件(/etc/lilo.conf),按照 其中的参数将特定的LILO写入系统引导区。
  • 5. 启动安全设置LILO引导、GRUB引导的单用户模式 引导启动后出现boot:提示时,使用一个特殊的命令,如 linuxsingle或linux 1,就能进入Linux单用户模式(Single-User mode)。 单用户模式的用户拥有root权限,其进入系统后,可编辑/etc/passwd 文件,去掉root一行中的x 即可在下次登录时无需密码使用root帐户。
  • 6. 启动安全设置LILO引导单用户模式的口令设置添加密码设置权限改变属性编辑配置文件lilo.conf(vim /etc/lilo.conf ) 因为 /etc/lilo.conf文件中包含明文密码 所以要把它设置成root权限读取。 # chmod 600 /etc/lilo.conf 防止root误操作,可使/etc/lilo.conf文件 属性变为不可改,并更新LILO。 # chatter +i /etc/lilo.conf # /sbin/lilo -v
  • 7. 启动安全设置Grub引导的口令设置进入GRUB编辑模式生成MD5密码写入配置文件 启动系统后出现GRUB引导画面,按键进入命令行方式输入md5crypt将加密的密码添加到/boot/grub/grub.conf 中的password一行
  • 8. 目录帐户安全设置2日志安全设置4启动安全设置31系统安全设置33
  • 9. 帐户安全设置嵌入式认证模块---PAM介绍 PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。 PAM最初是集成在Solaris中,目前已移植到其它系统中,如Linux、SunOS、HP-UX 9.0等。
  • 10. 帐户安全设置嵌入式认证模块---PAM介绍
  • 11. 帐户安全设置PAM支持的四种管理方式认证管理(authentication management) 主要是接受用户名和密码,进而对该用户的密码进行认证,并负责设置用户的一些秘密信息。 帐户管理(account management) 主要是检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等等。 密码管理(password management) 主要是用来修改用户的密码。 会话管理(session management) 主要是提供对会话的管理和记账(accounting)。
  • 12. 帐户安全设置PAM的文件/usr/lib/libpam.so.* PAM核心库 /etc/pam.d/ PAM配置文件 /lib/security/pam_*.so 可动态加载的PAM服务模块 Pam_unix.so 该模块的主要功能是禁止为密码为空的用户提供服务 Pam_permit.so 总是无条件地使认证成功 Pam_deny.so 总是无条件地使认证失败,通常该模块被用来作为缺省的验证规则 Pam_cracklib.so 该模块对用户密码提供强健性检测
  • 13. 帐户安全设置PAM的配置/etc/pam.d/目录下的每个文件的名字对应服务名 例如ftp服务对应文件/etc/pam.d/ftp 如果名为xxxx的服务所对应的配置文件 /etc/pam.d/xxxx不存 在,则该服务将使用默认的配置文件/etc/pam.d/other
  • 14. 帐户安全设置PAM的配置每个文件由如下格式的文本行所构成: module-type control-flag module-path arguments module-type 模块类型有四种:auth、account、session、password,即对应PAM所支持的四种管理方式。同一个服务可以调用多个 PAM模块进行认证,这些模块构成一个stack。 control-flag 用来告诉PAM库该如何处理与该服务相关的PAM模块的成功或失败情况。它有四种可能的值:required,requisite,sufficient,optional。 module-path 用来指明本模块对应的程序文件的路径名,一般采用绝对路径,如果没有给出绝对路径,默认该文件在目录/usr/lib/security下 面。 arguments 是用来传递给该模块的参数
  • 15. 帐户安全设置PAM的配置required:表示即使某个模块对用户的验证失败,也要等所有的模块都执行完毕,PAM才返回错误信息。这样做是为了不让用户知道被哪个模块拒绝。如果对用户验证成功,所有的模块都会返回成功信息。 requisite:如果特定的模块对用户的验证失败,PAM马上返回一个错误信息,把控制权交回应用程序,不再执行其他模块进行验证。 sufficient:表示如果一个用户通过这个模块的验证,PAM结构就立刻返回验证成功信息,把控制权交回应用程序。后面的层叠模块即使使用requisite或者required控制标志,也不再执行。如果验证失败,sufficient的作用和optional相同。 optional:表示即使本行指定的模块验证失败,也允许用户享受应用程序提供的服务。使用这个标志,PAM框架会忽略这个模块产生的验证错误,继续顺序执行下一个层叠模块。control-flag 的四种取值
  • 16. 帐户安全设置PAM的实例演示实例描述启用PAM修改配置Linux-PAM控制用户安全登录: 1:只允许root用户本地登录; 2:只允许用户paul从159.226.8网段远 程登录; 3:其他用户均不许登录系统。
  • 17. 目录帐户安全设置2日志安全设置4启动安全设置31系统安全设置33
  • 18. 系统安全设置关闭多余服务应用 查看"/etc/inetd.conf"文件,通过注释取消所有你不需要的服务(在该服务项目之前加一个"#")。然后用"sighup"命令升级"inetd.conf"文件。 第一步: 更改"/etc/inetd.conf"权限为600,只允许root来读写该文件。 # chmod 600 /etc/inetd.conf第二步: 编辑“/etc/inetd.conf”文件,取消下列服务(你不需要的):ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth等等。
  • 19. 系统安全设置建议只保留以下服务:
  • 20. 系统安全设置关闭多余服务应用第四步: 给inetd进程发送一个HUP信号: # killall -HUP inetd  第五步: 用chattr命令把/etc/inetd.conf文件设为不可修改,这样就没人可以修改它:   # chattr +i /etc/inetd.conf  这样可以防止对inetd.conf的任何修改。唯一可以取消这个属性的人只有root。如果要修改inetd.conf文件,首先要是取消不可修改性质: # chattr -i /etc/inetd.conf
  • 21. 限制用户通过su命令改变为root用户 系统安全设置su(Substitute User替代用户)命令允许当前用户成为系统中其他已存在的用户。如果不希望任何人通过su命令改变为root用户或对某些用户限制使用su命令,可以在su配置文件(在"/etc/pam.d/su"目录下)的开头添加下面两行: #vi /etc/pam.d/su auth sufficient /lib/security/pam_rootok.so debug  auth required /lib/security/Pam_wheel.so group=wheel  这表明只有“wheel”组的成员可以使用su命令成为root用户。接着可以把用户添加到“wheel"组,以使它可以使用su命令成为root用户。
  • 22. Telnet 服务的设定系统安全设置一、开启Telnet服务 编辑 /etc/xinetd.d/telnet #vi /etc/xinetd.d/telnet 找到 disable = no<==此项控制服务的开启与关闭 重启服务 telnet 是挂在 xinetd 底下的,所以需要重新激活 xinetd 就能够将 xinetd 里头的设定重新读进来,所以刚刚设定的 telnet 自然也就可以被激活。 # service xinetd restart  
  • 23. 系统安全设置Telnet 服务的设定二、设置Telnet服务端口 #vi /etc/services 进入编辑模式后查找telnet 会找到如下内容: telnet 23/tcp 将23修改成未使用的端口号(如:2000),退出vi,重启telnet服务,telnet默认端口号就被修改了。  
  • 24. 系统安全设置Telnet 服务的设定 为保证更安全的Telnet服务应用,可修改其默认配置值,满足实际的应用情况。 假设一部Linux 主机,有两块网络接口,分别是对内 192.168.0.1 与对外的203.45.1.9 这两个,如果你想要让对内的接口限制较松,而对外的限制较严格,可以这样的来设定:
  • 25. 系统安全设置Telnet 服务的设定#vi /etc/xinetd.d/telnet # 先针对对外限制来设定: service telnet { disable    = no         <==预设就是激活 telnet 服务 bind       = 203.45.1.9     <==只允许经由这个适配卡的封包进来 only_from    = 203.45.1.0/24   <==只允许 203.45.1.0/24 这个网段的主机联机进来使用 telnet 的服务 ..... } # 再针对内部的联机来进行限制 service telnet { disable     = no<==预设就是激活 telnet 服务 bind       = 192.168.0.1<==只允许经由这个适配卡的封包进来 only_from    = 192.168.0.0/16<==只允许 192.168.0.0 ~ 192.168.255.255 这个网段联机进来使用 telnet 的服务 only_from    = .cstnet.cn<==重复设定,只有科技网用户才能联机 no_access    = 192.168.25.{10,26}<==不许这些 PC 登入 access_times  = 1:00-9:00 20:00-23:59 <==每天只有这两个时段开放服务 ...... }
  • 26. 系统安全设置FTP服务的设定# vi /etc/vsftpd/vsftpd.conf anonymous_enable=no    是否允许匿名用户登录 anonymous_enable=no    是否允许匿名上传文件 local_enable= YES       是否允许本地用户登录 write_enable= no       是否允许本地用户上传 guest_enable=yes        是否允许虚拟用户登录; local_mask=022           设置本地用户的文件生成掩码为022,默认值为077 dirmessage_enable= YES     设置切换到目录时显示.message隐含文件的内容 xferlog_enable= YES        激活上传和下载日志 connect_from_port_20=YES   启用FTP数据端口连接 pam_service_name=vsftpd    设置PAM认证服务的配置文件名称, 该文件存放在/etc/pam.d目录下 userlist_enable= no       允许vsftpd.user_list文件中的用户访问服务器 userlist_deny= YES         拒绝vsftpd.user_list文件中的用户访问服务器 listen= no             是否使用独占启动方式(这一项比较重要) tcp_wrappers= YES      是否使用tcp_wrappers作为主机访问控制方式 ftpd_banner=     设置连接服务器后的欢迎信息 idle_session_timeout=60               限制远程的客户机连接后,所建立的控制连接,在多长时间没有做任何的操作就会中断(秒) data_connection_timeout=120           设置客户机在进行数据传输时,设置空闲的数据中断时间 accept_timeout=60                     设置在多长时间后自动建立连接 connect_timeout=60                    设置数据连接的最大激活时间,多长时间断开,为别人所使用; max_clients=200                       指明服务器总的客户并发连接数为200 max_per_ip=3                          指明每个客户机的最大连接数为3 local_max_rate=50000(50kbytes/sec)
  • 27. 系统安全设置Sudo “Sudo” 是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或其他特许用户才能完成的任务。 例如:运行一些像mount,halt,su之类的命令,或者编辑一些系统配置文件,像/etc/mtab, /etc/samba/smb.conf等。这样以来,就不仅减少了root用户的登陆次数和管理时间,也提高了系统安全性。
  • 28. 系统安全设置Sudo   sudo的配置都记录在/etc /sudoers文件中。配置文件指明哪些用户可以执行哪些命令。在sudoers文件中的基本配置格式 用户 主机名列表=命令程序列表[root@localhost ~]# grep "^root" /etc/sudoers root ALL=(ALL) ALL被授权的用户在哪些主机中使用允许执行哪些命令 针对root用户的sudo配置特例 允许以哪些用户的身份执行命令,缺省为root
  • 29. 系统安全设置Sudo 配置实例需求描述: 允许用户Tom通过sudo执行/sbin、/usr/bin目录下的所有命令,但是禁止调用ifconfig、vim命令 授权Paul组的用户不需验证密码即可执行所有命令[root@localhost ~]# visudo Defaults logfile="/var/log/sudo" …… Tom localhost=/sbin/*,/usr/bin/*,!/sbin/ifconfig ,!/usr/bin/vim % Paul ALL=(ALL) NOPASSWD: ALL
  • 30. 目录帐户安全设置2日志安全设置4启动安全设置31系统安全设置33
  • 31. 日志安全设置Linux系统的日志文件的配置   配置文件/etc/syslog.conf,可编辑此文件让日志系统记录更多信息,编辑后需重启/usr/sbin/syslogd进程,重读取配置文件。 两个重要的日志文件: utmp保存本地系统日志 wtmp保存登录其它系统时日志。   设置utmp和wtmp文件权限,确保日志系统安全  #chmod 644 /ver/log/wtmp #chmod 644 /ver/run/utmp
  • 32. 日志安全设置Linux系统的日志文件的配置   设置日志配置文件: vi /etc/syslog.conf /etc/syslog.conf文件中的一项配置记录由“选项”(selector)和“动作”(action)两个部分组成,两者间用tab制表符进行分隔(使用空格间隔是无效的)。         类型.级别 [;类型.级别] `TAB` 动作 例如:*.err;kern.debug;daemon.notice;mail.crit    [TAB]   /var/adm/messages      这行中的“action”就是/var/adm/messages文件,输出到它的信息源头“selector”是:  *.err - 所有的一般错误信息;  kern.debug - 核心产生的调试信息;  daemon.notice - 守护进程的注意信息;  mail.crit - 邮件系统的关键警告信息
  • 33. 日志安全设置Linux系统的日志文件的配置   修改了/etc/syslog.conf文件后,必须重新启动syslogd守护进程以使配置更改生效,请执行下面的命令: #/etc/rc.d/init.d/syslog restart 以下是常用的系统日志文件名称及其描述: lastlog //记录用户最后一次成功登录时间 loginlog //不良的登陆尝试记录 messages //记录输出到系统主控台以及由syslog系统服务程序产生的消息 utmp //记录当前登录的每个用户 utmpx //扩展的utmp wtmp //记录每一次用户登录和注销的历史信息 wtmpx vold.log //记录使用外部介质出现的错误 xferkig //记录Ftp的存取情况 sulog 记录su命令的使用情况 acct //记录每个用户使用过的命令 aculog //拨出自动呼叫记录
  • 34. 日志安全设置将日志文件记录到远程主机 如果有另一个Linux或系统,那么让其把消息发到另外一个系统并记录下来。 要实现这个功能,在该配置文件中,指定一个记录动作,后面接一个由“@”开头的远程系统的主机名,如下例: #vi /etc/syslog.conf *.warn;authpriv.notice;auth.notice @syslog.syslog.com   同时,还要将接受消息的目的系统设置为允许这种操作。 /etc/rc.d/init.d/syslog restart -r
  • 35. 总结与建议1.关闭不必要的服务 2.为用户分配适当的权限 3.口令强度 4.定期打补丁 5.定期查看日志 6.定时修正系统时间 7.修改服务的默认端口
  • 36. 中国科学院计算机网络信息中心 中国科技网网络中心 www.cstnet.cn All rights reserved谢谢 E-MAIL:gaopeng@cstnet.cn TEL:58812896