《我要学Linux操作系统》学习参考-第十章ppt课件.ppt
,我要学Linux操作系统,第10章Linux系统安全 10.1 常见的攻击类型 10.2 Linux日志管理 10.3 Linux用户安全 10.4 访问控制与身份认证 10.5 Linux网络服务安全,本章概述Linux操作系统以安全性和稳定性著称,许多大型门户网站都以Linux作为服务器操作系统。然而随着黑客攻击技术的发展,系统安全防范工作仍然需要系统管理员的高度重视。在本章,首先介绍了几种常见的攻击类型以及Linux系统中帮助管理员发现攻击的重要工具系统日志的管理,然后阐述了Linux系统的账号安全、网络安全等,并讲述如何使用snort进行入侵检测。,第10章Linux系统安全,常见的攻击方式包括端口扫描、嗅探、种植木马、传播病毒等。1.端口扫描在网络技术中,端口(Port)通常有两种含义,一是物理意义上的端口,即调制解调器、网络集线器、交换机、路由器中用于连接其他网络设备的接口,如RJ-45端口、SC端口等;二是逻辑意义上的端口,即指TCP/IP协议中的端口,用于承载特定的网络服务,其编号的范围为065535,例如,用于承载Web服务的是80端口,用于承载FTP服务的是21端口和20端口等。在网络技术中,每个端口承载的网络服务是特定的,因此可以根据端口的开放情况来判断当前系统中开启的服务。,10.1 常见的攻击类型,扫描器就是通过依次试探远程主机TCP端口,获取目标主机的响应,并记录目标主机的响应。根据这些响应的信息可以搜集到很多关于目标主机的有用信息,包括该主机是否支持匿名登录以及提供某种服务的软件包的版本等。这些信息可以直接或间接地帮助攻击者了解目标主机可能存在的安全问题。端口扫描器并不是一个直接攻击网络漏洞的程序,但是它能够帮助攻击者发现目标主机的某些内在安全问题。目前常用的端口扫描技术有TCP connect扫描、TCP SYN扫描、TCP FIN扫描、IP段扫描、TCP反向ident扫描以及TCP返回攻击等。通常扫描器应该具备如下的3项功能:发现一个主机或网络的能力。发现远程主机后,有获取该主机正在运行的服务的能力。通过测试远程主机上正在运行的服务,发现漏洞的能力。,10.1 常见的攻击类型,2.嗅探嗅探技术是一种重要的网络安全攻防技术,攻击者可以通过嗅探技术以非常隐蔽的方式攫取网络中的大量敏感信息,与主动扫描相比,嗅探更加难以被发觉,也更加容易操作和实现。对于网络管理员来说,借助嗅探技术可以对网络活动进行实时监控,发现网络中的各种攻击行为。嗅探操作的成功实施是因为以太网的共享式特性决定的。由于以太网是基于广播方式传输数据的,所有的物理信号都会被传送到每一个网络主机结点,而且以太网中的主机网卡允许设置成混杂接收模式,在这种模式下,无论监听到的数据帧的目的地址如何,网卡都可以予以接收。更重要的是,在TCP/IP协议栈中网络信息的传递大多是以明文传输的,这些信息中往往包含了大量的敏感信息,比如邮箱、FTP或telnet的账号和口令等,因此使用嗅探的方法可以获取这些敏感信息。,10.1 常见的攻击类型,嗅探器最初是作为网络管理员检测网络通信的工具出现的,它既可以是软件的,也可以是硬件设备。软件嗅探器使用方便,可以针对不同的操作系统使用不同的软件嗅探器,而且很多软件嗅探器都是免费的。常用的嗅探器有Tcpdump/Windump、Sniffit、Ettercap和Snarp等。处于网络中的主机,如果发现网络出现了数据包丢失率很高或网络带宽长期被网络中的某台主机占用,就应该怀疑网络中是否存在嗅探器。3.木马木马又称特洛伊木马,是一种恶意计算机程序,长期驻留在目标计算机中,可以随系统启动并且秘密开放一个甚至多个数据传输通道的远程控制程序。木马程序一般由客户端(Client)和服务器端(Server)两部分组成,客户端也称为控制端,一般位于入侵者计算机中,服务器端则一般位于用户计算机中。木马本身不带伤害性,也没有感染能力,所以木马不是病毒。,10.1 常见的攻击类型,木马通常具有隐蔽性和非授权性的特点。所谓隐蔽性是指木马的设计者为了防止木马被发现,会采用多种手段隐藏木马,这样服务端计算机即使发现感染了木马,也不能确定其具体位置。所谓非授权性是指一旦客户端与服务端连接后,客户端将享有服务端的大部分操作权限,包括修改文件、修改注册表、控制鼠标、键盘等,这些权力并不是服务端赋予的,而是通过木马程序窃取的。入侵者一般使用木马来监视监视被入侵者或盗取被入侵者的密码、敏感数据等。4.病毒虽然Linux系统的病毒并不像Windows系统那样数量繁多,但是威胁Linux平台的病毒同样存在,如Klez、Lion.worm、Morris.worm、Slapper、Scalper、Linux.Svat和BoxPoison病毒等。Linux下的病毒可以如下分类:,10.1 常见的攻击类型,1)蠕虫(worm)病毒1988年Morris蠕虫爆发后,Eugene H.Spafford给出了蠕虫的定义:“计算机蠕虫可以独立运行,并能把自身的一个包含所有功能的版本传播到另外的计算机上”。和其他种类的病毒相比,在Linux平台下最为猖獗的就是蠕虫病毒,如利用系统漏洞进行传播的ramen、lion、Slapper等,都曾给Linux系统用户造成了巨大的损失。随着Linux系统应用越广泛,蠕虫的传播程度和破坏能力也会随之增加。2)可执行文件型病毒可执行文件型病毒是指能够感染可执行文件的病毒,如Lindose。这种病毒大部分都只是企图以感染其他主机程序的方式进行自我复制。,10.1 常见的攻击类型,3)脚本病毒目前出现比较多的是使用shell脚本语言编写的病毒。此类病毒编写较为简单,但是破坏力同样惊人。而一个十数行的shell脚本就可以在短时间内遍历整个硬盘中的所有脚本文件,并进行感染。且此类病毒还具有编写简单的特点。4)后门程序后门程序一般是指那些绕过安全性控制而获取程序或系统访问权的程序。在广义的病毒定义概念中,后门也已经纳入了病毒的范畴。从增加系统超级用户账号的简单后门,到利用系统服务加载,共享库文件注册,rootkit工具包,甚至装载内核模块(LKM),Linux平台下的后门技术发展非常成熟,其隐蔽性强,难以清除。,10.1 常见的攻击类型,在任何操作系统中,日志系统对于系统安全来说都是非常重要的,它记录了系统每天发生的各种各样的事件,包括哪些用户曾经或正在使用系统,可以通过日志来检查系统和应用程序发生错误的原因。日志还能在系统受到黑客攻击后,记录下攻击者留下的痕迹,通过这些痕迹,系统管理员可以发现黑客攻击的手段及特点,从而能够进行相应的处理,为抵御下一次攻击做好准备。日志主要的功能有审计和监测,另外,利用日志还可以实时监测系统状态,监测和追踪侵入者等。10.2.1 Linux日志系统简介在Linux系统中利用日志可以审计和检测系统出现的错误,侦查和追踪入侵,并协助系统进行恢复和排除故障。在RedHat Linux 9系统中,日志功能通常是由syslog(对应syslogd守护进程)和klog(对应klogd守护进程)日志系统来完成,syslog记录常规系统日志,而klog是针对内核活动的日志。,10.2 Linux日志管理 10.2.1 Linux日志系统简介,10.2 Linux日志管理 10.2.1 Linux日志系统简介,Linux日志是按照类别保存在日志文件中的,一般保存在/var/log目录下,绝大部分只有系统管理员才能够查看。如下表列出了/var/log目录下的日志文件及其功能,其中“*”表示通配符。,/var/log目录下的日志文件及其功能,10.2 Linux日志管理 10.2.1 Linux日志系统简介,这些日志文件可以分为3类:1)连接时间日志由多个程序执行,把记录写入到/var/log/wtmp和/var/run/utmp中,login等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录了到系统。,10.2 Linux日志管理 10.2.1 Linux日志系统简介,2)进程统计由系统内核执行。当一个进程终止时,为每个进程往进程统计文件(pacct或acct,分别位于/usr/adm/pactt和/usr/lib/acct/startup)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。3)错误日志由syslogd(8)守护进程执行,各种系统守护进程、用户程序和内核通过syslogd(8)守护进程向文件/var/log/messages报告值得注意的事件。,10.2.2 配置系统日志几乎所有的类UNIX系统(如Linux)系统都采用syslog进行系统日志的管理与配置。任何程序可以通过syslog记录事件,并且可以将记录的系统事件写入到一个文件或设备,或给用户发送一个邮件。syslog有两个重要的文件,一个是守护进程/sbin/syslogd,另一个是syslogd的配置文件/etc/syslog.conf。通常多数的syslog信息被写到/var/log目录下的日志文件message.*中。一个典型的syslog.conf记录包括生成日志的程序名称、日志的设备名、日志的优先等级以及一段文本信息。1.启动syslog日志进程启动syslog日志守护进程syslogd的命令格式如下:/sbin/syslogd 选项,10.2 Linux日志管理 10.2.2 配置系统日志,10.2 Linux日志管理 10.2.2 配置系统日志,该命令常用的参数及含义如下表所示。,syslogd命令参数及含义,重启syslogd日志守护进程,可以在终端提示符下输入如下的命令:rootmyhost root#service syslogd restart 或rootmyhost root#kill-HUP cat/var/run/syslogd.pid说明:在该命令中,/var/run/syslogd.pid文件存放了当前syslogd守护进程的pid,整个命令的执行步骤是,先使用cat/var/run/syslogd.pid获取当前系统的syslogd守护进程的pid,然后使用kill命令传递-HUP信号给该pid指定的进程,对其进行重启操作。,10.2 Linux日志管理 10.2.2 配置系统日志,2.syslogd的主配置文件系统日志syslog的主配置文件是/etc/syslog.conf。syslog记录的内容及其记录存放的日志文件由该文件指定,可以通过修改syslog.conf文件的方法来配置syslogd。该文件的基本语法格式如下:设备(facility).优先级(priority)动作1)日志设备facility日志设备facility表示日志消息的来源,指明了发出消息的设备或程序,主要设备及说明如下表所示。,10.2 Linux日志管理 10.2.2 配置系统日志,10.2 Linux日志管理 10.2.2 配置系统日志,syslog常用的日志设备及说明,10.2 Linux日志管理 10.2.2 配置系统日志,2)优先级priority日志优先级priority表明日志消息的紧急程度。如果在syslog.conf文件中的一行出现多对“设备.优先级”,各项之间使用分号隔开。syslog日志系统中常用的日志优先级如下表所示,其中紧急程度由上到下逐级递减。,syslog常用的日志优先级,其中紧急程度遵循向上匹配的原则。例如,“err”优先级表示所有高于或等于err等级的日志消息都将被处理,即所处理的日志消息包括“err”、“crit”、“alert”和“emerge”等级的消息。如果只希望精确匹配某个确定的紧急程序,而不使用向上匹配原则,则需要使用等号进行设定。例如,“kern.=alert”表示只对内核产生的alert日志信息进行处理。在syslog.conf文件的配置行中,也支持通配符“*”和“none”,其中“*”表示匹配全部,“none”表示全部忽略。例如,记录守护进程产生的所有日志消息可以使用“daemon.*”,而忽略内核产生的所有日志消息则可以使用“kern.none”。3)动作syslog.conf文件配置行中的动作,用于设定syslogd如何处理对应的日志消息。处理的办法,可以设定将日志信息写入文件或显示到终端设备上,或者通过邮件直接发送给指定的用户,或者发送到另一台远程主机的syslog系统。,10.2 Linux日志管理 10.2.2 配置系统日志,10.2 Linux日志管理 10.2.2 配置系统日志,syslogd可使用的动作及说明如下表所示。,syslogd常用的动作及说明,10.2 Linux日志管理 10.2.2 配置系统日志,4)syslog.conf文件的默认设置/etc/syslog.conf文件的默认设置如下图所示。,syslog.conf默认设置,其中,行“*.info;mail.none;authpriv.none;cron.none/var/log/messages”表示匹配mail、authpriv、cron等多个设备。,10.2 Linux日志管理 10.2.2 配置系统日志,3.配置syslogd例如,将一般性的日志消息保存到/var/log/messages文件中,但不包括邮件、新闻组、本地安全认证、守护进程以及cron程序产生的日志消息,可以配置如下图所示的行。,配置messages文件日志内容,10.2 Linux日志管理 10.2.2 配置系统日志,又如将与打印机相关的日志信息发送到主机上,由该主机的syslog日志系统记录,可以配置如下图所示的行。,配置打印机日志,注意:syslog.conf文件修改后,需要重启syslogd守护进程才能应用新的配置。,10.2 Linux日志管理 10.2.2 配置系统日志,4.测试syslog.conf文件syslog.conf文件修改后,使用者按照syslog.conf文件中的设置,使用logger命令发出指定类型的日志消息,检测配置文件是否正确。logger命令的格式如下:logger 选项 msg该命令常用的参数及含义如下表所示。,logger常用的参数及含义,10.2 Linux日志管理 10.2.2 配置系统日志,例10-1 测试syslog.conf文件中“*.emerg*”部分。在终端提示符下使用下的命令。rootmyhost root#logger-p kern.emerg“this is syslog.conf test”命令返回如下图所示的结果。,logger发送日志消息,5.清空日志文件随着系统的运行时间不断延长,日志文件也会越来越大,从而消耗大量磁盘空间。如果通过先删除已有的日志文件,再重建同名日志文件的方法来清空日志,就需要先停止创建日志文件的服务进程,从而可能导致服务进程出错。此时,可以通过echo命令在不必停止服务进程的情况下清空日志文件。具体的方法是在终端提示符选下输入如下命令:rootmyhost root#echo“”log_file其中log_file代表需要清空的日志文件。例如,要清空日志文件/var/log/messages,可以使用如下命令:rootmyhost root#echo“”/var/log/messages,10.2 Linux日志管理 10.2.2 配置系统日志,10.2.3日志系统Red Hat Linux 9系统中提供了查看日志的命令行工具和图形工具,用户可以使用这些工具查看Linux的系统日志。1使用命令查看日志/var/log/boot.log文件记录了与启动和终止守护进程相关的信息。/var/log/messages文件记录了系统除邮件、新闻组、本地安全认证、守护进程以及cron程序日志以外几乎全部的日志信息。这些日志文件时使用文本方式记录的,所以可以使用查看文本文件的工具来查看,如cat、more、tail和less等。,10.2 Linux日志管理 10.2.3日志系统,下图为使用tail命令查看messages日志的结果。,10.2 Linux日志管理 10.2.3日志系统,messages日志内容,在messages日志文件中,每行记录一个日志事件,每个事件包括如下的字段:时间标签:表示消息发出的日期和时间。,主机名:表示生成消息的计算机的名字。如果只有一台计算机,主机名就可能没有必要了,但是,如果在网络环境中使用syslog,那么可以把不同主机的日志消息发送到一台服务器上集中处理。生成消息的子系统的名字:可以是“kernel”,表示消息来自内核,或者是进程的名字,表示发出消息的程序的名字。消息:即是日志内容。utmp和wtmp日志文件是多数Linux日志系统的关键文件,它保存了用户登录和注销的记录。有关当前登录用户的信息记录在utmp文件中,登录、注销、数据交换、关机以及重启等信息都记录在wtmp文件中。所有的记录都包含时间戳(即文件的创建、修改和访问时间)。在Linux系统中wtmp和utmp是二进制文件,可以使用last命令来查看wtmp文件内容。其使用格式如下:last 选项,10.2 Linux日志管理 10.2.3日志系统,10.2 Linux日志管理 10.2.3日志系统,该命令常用的参数及含义如下表所示。,last命令参数及含义,10.2 Linux日志管理 10.2.3日志系统,例10-2 查看root近期登录的信息。在终端提示符下执行如下的命令:rootmyhost root#last-10 root结果如下图所示,last命令使用,10.2 Linux日志管理 10.2.3日志系统,last命令查看的wtmp文件内容包括登录用户名、登录的终端、产生日志的主机网络地址、日志产生的时间、当前用户状态和时间戳6个字段。who命令默认时报告当前登录的每个用户,查看的是utmp文件的信息,但也可以指明查看wtmp文件的信息。如下图所示为使用who命令查询utmp文件并报告当前登录的用户信息,默认输出包括用户名、终端类型、登录日期及远程主机。,who查看utmp文件,10.2 Linux日志管理 10.2.3日志系统,who命令还可以通过指定文件名的方法来查看wtmp日志文件的信息,如下图所示。,who查看wtmp文件,10.2 Linux日志管理 10.2.3日志系统,日志文件/var/log/dmesg存放了系统启动时内核产生的日志,记录了内核对硬件的配置过程。首先从BIOS开始,然后依次查找CPU、硬盘驱动器、PCI设备和通信端口,接下来启动分区上的文件系统,最后配置键盘和鼠标等其他设备。使用dmesg命令可以查看该文件的信息,如右图所示。从上图可以看出在主机使用的内存容量为516MB,如果该机器实际安装的内存大于516MB,则可以从该日志中判断多余的内存没有被Linux系统识别。,dmesg日志,10.2 Linux日志管理 10.2.3日志系统,2图形工具查看日志在Red Hat Linux 9中提供了“系统日志”图形工具,用于查看系统日志,这些日志包括引导日志、Cron日志、内核启动日志等。单击“主菜单”“系统工具”“系统日志”菜单项,或在终端提示符下执行命令redhat-logviewer,都可以打开如下图所示的窗口。,“系统日志”窗口,10.2 Linux日志管理 10.2.3日志系统,可以在该窗口中的“过滤”文本框中输入关键字,然后单击“过滤器”按钮,来过滤日志文件中的内容。单击“重设”按钮,可以重新指定过虑关键字。默认情况下,当前日志文件每隔30秒刷新一次,可以单击“文件”“立即刷新”菜单项,则可以立即刷新当前屏幕上的显示信息。单击“编辑”“首选项”菜单项,弹出如下图所示的“首选项”对话框,切换到“日志文件”选项卡,点击“刷新频率”的微调按钮可以调整日志文件的显示刷新率。,10.2 Linux日志管理 10.2.3日志系统,如果希望指定所要查找的日志文件的位置,可以在列表中选择对应的行,然后选择“改变位置”按钮,在出现的“日志文件位置”对话框中,输入日志文件的新位置,或单击“浏览”按钮,从弹出的“选择日志文件”对话框中选择日志文件,即可改变日志文件的位置。,“首选项”对话框,Linux的用户安全包括账号安全和口令安全两个部分。10.3.1 Linux账号安全1.删除多余账号在Linux系统中默认添加的各种账号中,有很多是无用的,或者有部分账号因为没有启动该服务而成为多余账号,例如,如果不使用ssh服务器,那么sshd账号就是多余账号,如果不使用匿名的ftp服务,那么账号ftp即为多余。账号越多,系统越容易受到攻击。系统管理员应该在第一次使用系统时检查并删除不需要的账号。在终端提示符下使用如下的命令即可删除多余的账号。rootmyhost root#userdel mail 如果没有使用sendmail服务器,删除该用户在没有开启相应的服务的时候,如下的账号都可以删除:adm、lp、sync、halt、mail、mailnull、games、news、sshd、gopher、uucp、ftp、operator、named等。,10.3 Linux用户安全 10.3.1 Linux账号安全,2.root账号安全在Linux系统中,所有的管理功能都能由root账号完成的,它是系统的超级用户。root账号能对系统的所有资源做最大限度的调整,还可以直接允许或禁用单个用户、一部分用户或所有用户对系统的访问。root账号还可以控制用户的访问权限以及用户存放文件的位置,可以控制用户能够访问的哪些系统资源,因此不能把root账号当作普通用户来使用。在Linux系统中的/etc/securetty文件中包含了一组能够以root账号登录的终端名称。该文件的初始值仅允许本地虚拟控制台可以使用root登录,而不允许远程用户以root账号登录。虽然可以通过修改该文件的方法,允许root账号从远程主机登录,但是不建议这样做。而是先使用普通账号从远程登录Linux主机,然后再使用su命令升级为超级用户,当root账号使用完毕后,再使用exit命令注销。如果需要授权其他用户以root身份运行某些命令时可以使用sudo命令。,10.3 Linux用户安全 10.3.1 Linux账号安全,该命令使用的基本格式如下:sudo 其中command_line为需要以root身份运行的命令行。在执行sudo授权时需要当前用户输入其口令,如下图所示。,10.3 Linux用户安全 10.3.1 Linux账号安全,sudo用法,需要注意的是,如果用户在离开时忘记从系统中注销,特别是root账号离开时忘记注销,会给系统带来不可预知的隐患。Linux系统可以控制系统在空闲时自动从shell中注销,/etc/profile文件中的“timeout”变量即为空闲的超时时间,例如:timeout=600表示用户在600秒内无操作后将自动注销。3.用户信息文件安全在Linux系统中,用户的信息都被保存在/etc/passwd和/etc/shadow文件中,用户组的信息保存在/etc/group和/etc/gshadow文件中。为了防止攻击者偷窥用户和组信息,应该按如下方式设置这些文件的访问权限:,10.3 Linux用户安全 10.3.1 Linux账号安全,rootmyhost root#chmod 600/etc/passwdrootmyhost root#chmod 600/etc/shadowrootmyhost root#chmod 600/etc/grouprootmyhost root#chmod 600/etc/gshadow为了防止非授权用户通过修改用户信息文件和用户组文件修改用户口令和组群资料,可以给这些文件添加不可更改的属性,这时可使用chattr命令,其格式如下:chattr mode-R file_name其中,参数-R表示递归设置目录中所有文件的属性。mode是文件的属性,可以使用“+”表示添加某种属性,“-”表示取消某种属性,“=”表示具有某种属性。,10.3 Linux用户安全 10.3.1 Linux账号安全,10.3 Linux用户安全 10.3.1 Linux账号安全,其可以设置的属性如下表所示。,chattr常用的文件属性,例如,在终端提示符下输入如下的命令可以设置/etd/passwd文件、/etc/shadow文件、/etc/group文件和/etc/gshadow文件的不可修改属性。rootmyhost root#chattr+i/etc/passwdrootmyhost root#chattr+i/etc/shadowrootmyhost root#chattr+i/etc/grouprootmyhost root#chattr+i/etc/gshadow4.关于setuid属性在Linux系统中,一些应用程序被设置了setuid属性。这些程序在运行时,能有效地将当前执行该程序的用户的uid改变成应用程序所有者的uid,使得应用程序进程在很大程度上拥有该程序所有者的特权。如果被设置了setuid属性的应用程序归root所有,那么该进程在运行时就会自动拥有超级用户的特权,即使该进程不是root用户启动的,如/usr/bin/passwd程序。,10.3 Linux用户安全 10.3.1 Linux账号安全,由于具有setuid属性的程序在运行时能够拥有root账号,会给系统带来一定的安全隐患,因此应该尽可能减少应用程序设置setuid属性。做到除非必要,否则尽量不要给应用程序设置setuid属性。系统管理员,可以使用find命令查找系统中所有被设置了setuid属性的应用程序。在终端提示符下,输入如下的find命令,搜索结果如右图所示。rootmyhost root#find/-perm-4000对于非必要的被设置了setuid属性的应用程序,可以在终端提示符下使用chmod命令将其除去,例如除去/usr/bin/rcp程序setuid属性的命令如下:rootmyhost root#chmod-s/usr/bin/rcp,10.3 Linux用户安全 10.3.1 Linux账号安全,设置了setuid属性的应用程序,10.3.2 用户口令安全口令是Linux系统对用户进行认证的主要手段,口令安全是Linux系统安全的基石。不幸的是,用户往往对自己的口令安全没有足够的重视。一个简单、易破解的口令就等于向对攻击者敞开系统的大门,攻击者一旦获得重要账号的口令,就能够长驱直入。通常入侵者可以使用John等自动化的工具软件多次尝试登录系统,简单的口令很容易被破解。一个健壮性高的口令应该具备以下特点:不包含个人信息,不存在键盘顺序规律,不使用字典中的单词,最好包含非字母符号,长度不小于8位,同时还用方便记忆。一个比较使用的办法就是:先记住一句话,然后将这句话的第一个字母取出,在将标点符号加在字母的序列中,前后还可以加几个数字,同时可以在口令中混用大小写,例如:本教材名为Linux操作系统实用教程,可以写成口令“51”,这便是一个健壮的口令。,10.3 Linux用户安全 10.3.2 用户口令安全,在Linux系统中,大多数版本的passwd程序都可以设置一定的规范来定义用户口令,例如要求用户设置的口令不得少于8个字符,还可以限定用户口令使用的时间,保证定期更改口令等。编辑系统登录文件/etc/login.defs可以实现上述目标。该文件中有如下的行:PASS_MAX_DAYS 99999 口令使用的最长时间PASS_MIN_DAYS 0口令使用的最短时间,0表示不限PASS_MIN_LEN 8口令的最小长度PASS_WARN_AGE 7在口令过期前多少天给出警告,10.3 Linux用户安全 10.3.2 用户口令安全,访问控制和身份认证是计算机系统安全的两个重要的方面。访问控制用于判定网络中允许访问主机资源的是不是合法的网络段的主机,身份认证用于判定访问主机资源的用户是否为合法的系统用户。10.4.1 TCP Wrappers在Red Hat Linux 9操作系统中TCP Wrappers是用于实现访问控制的一个重要的组件,可以控制基于网络地址对主机的某些网络服务的访问,这些服务包括xinetd、vsFTP、telnet等。如果系统支持TCP Wrappers实现访问控制,可以在/usr/lib/目录下找到libwrap.so.0.x.x模块。,10.4 访问控制与身份认证 10.4.1 TCP Wrappers,1.TCP Wrappers的功能TCP Wrappers是一个轻量级的保护程序,它提供了一个守护进程/usr/sbin/tcpd。TCP Wrappers安装和使用的时候并不需要对现有的应用软件进行任何的改动,运行后会自动检查所请求的服务和相应的客户端进行安全验证,在整个过程中,不会与客户端和服务器交换信息及建立连接。常见的支持TCP Wrappers的网络服务程序有/usr/sbin/sshd、/usr/sbin/sendmail和/usr/sbin/xinetd等。2.TCP Wrappers的配置TCP Wrappers的配置包括开启服务进程都TCP Wrappers的支持和设定访问控制策略。例如,可以在vsFTP服务的配置文件/etc/vsftpd/vsftpd.conf中有如下的配置行,用于决定是否开启vsftpd对TCP Wrappers的支持:tcp_wrappers=YES取值YES表示支持TCP Wrappers;NO表示不支持,10.4 访问控制与身份认证 10.4.1 TCP Wrappers,TCP Wrappers会在正常的服务程序之外加一个应答请求、建立连接之前检查远程主机名称和用户等信息,查看是否符合预先的设定。在Linux系统的/etc/目录中有hosts.allow和hosts.deny文件,用于保存TCP Wrappers基于主机地址的访问控制策略。其中,hosts.allow用于保存允许访问的策略;hosts.deny用于保存拒绝访问的策略。hosts.allow和hosts.deny文件拥有相同的语法,一行代表对一个服务的访问控制策略,每一行的前两个字段是必须有的,动作字段是可以可选的,具体语法如下:服务程序列表:客户机地址列表:动作,10.4 访问控制与身份认证 10.4.1 TCP Wrappers,10.4 访问控制与身份认证 10.4.1 TCP Wrappers,其中,“服务程序列表”字段表示使用访问控制的服务程序,可能的取值及含义如下表所示。,服务程序列表取值及含义,10.4 访问控制与身份认证 10.4.1 TCP Wrappers,“客户机地址列表”字段指明了拒绝或允许访问服务的客户机的IP地址或主机名等,其可能的取值及含义如下表所示。,客户机地址列表取值及含义,10.4 访问控制与身份认证 10.4.1 TCP Wrappers,“动作”字段表示允许或拒绝客户机访问。可选取值及含义如下表所示。,动作字段取值及含义,对于hosts.allow文件和hosts.deny文件,tcpd守护进程首先解析/etc/hosts.allow文件,如果发现第一个匹配规则后退出,并且不再解析hosts.deny,否则接着解析/etc/hosts.deny,找到第一个匹配规则后退出。如果在这两个文件中都没有找到匹配的规则,或这两个文件都不存在,那么就授予访问这项服务的权限。,TCP Wrappers并不缓存主机访问文件中的规则,因此对hosts.allow或hosts.deny的配置改变都无需重新启动网络服务便会马上起作用。例10-3 配置TCP Wrappers,完成以下的访问控制功能:(1)使用TCP Wrappers对vsftpd服务和telnet服务进行基于主机的访问控制,vsftpd服务器和telnet服务器所在主机的地址为“192.168.0.128”;(2)对于vsftpd服务只允许IP地址为“192.168.0.100”至“192.168.0.199”的主机进行访问;(3)由于telnet服务不安全,因此只允许IP地址为“192.168.0.122”的客户机访问。,10.4 访问控制与身份认证 10.4.1 TCP Wrappers,10.4 访问控制与身份认证 10.4.1 TCP Wrappers,首先在hosts.allow文件中添加如下图的语句,允许telnetd从192.168.0.122客户机访问,允许vsftpd从192.168.0.100192.168.0.199客户机访问。,添加hosts.allow文件内容,10.4 访问控制与身份认证 10.4.1 TCP Wrappers,这里使用了通配符“?”,然后在hosts.deny文件中添加如下图所示的语句,禁止其他所有客户机访问telnet和vsftpd服务。,添加hosts.deny文件内容,10.4.2 PAM身份验证在Linux系统中,用户访问系统资源时除了要通过访问控制程序对远程登录的客户机的检验,还要通过用户身份认证系统的检查。可插入认证模块(Pluggable Authentication Modules,PAM)主要用于应用程序的统一身份验证方式。1.PAM概述使用PAM系统管理员可以在不重新编译具体的身份认证程序的情况下,使用程序提供的新的身份认证方式。绝大多数Linux用户无需了解PAM的配置,因为当用户安装的应用程序需要使用身份认证时,系统会自动为用户修改PAM的配置文件。但是,如果用户需要定制自己的身份认证方法,就需要自己配置PAM了。,10.4 访问控制与身份认证 10.4.2 PAM身份验证,在RedHat Linux 9中默认PAM的配置文件放置在的/etc/pam.d目录下。该目录下每一个文件就是同名应用程序的PAM认证配置文件,如下图所示。,10.4 访问控制与身份认证 10.4.2 PAM身份验证,PAM配置文件,2.PAM配置文件语法在PAM中,每个服务程序的配置文件使用的语法相同,如下图所示,“#”所在的行为注释行。,10.4 访问控制与身份认证 10.4.2 PAM身份验证,pam配置文件语法,每个使用PAM应用程序的配置文件都包括如下几个字段,每个字段之间使用Tab制表位或空格分割。PAM模块控制符 模块路径 可选参数,10.4 访问控制与身份认证 10.4.2 PAM身份验证,1)PAM模块在PAM标准中定义了4种类型的模块,分别是auth、account、password和session模块,其具体含义如下表所示。,PAM模块,由于每一类模块都可能存在多个可用用户选择,因此在实际的使用中,同一类型的模块是可以重叠的,即可能出现相同类型的多个模块。PAM也允许用户随时添加新的认证模块,支持PAM的应用程序都可以使用这些模块。2)控制符控制符通常用于决定每个模块的重要程度。模块可以被重叠(同种类型的模块按先后顺序执行),这些模块的执行顺序就是它们在相应配置文件中给出的记录的顺序,排在前面的记录在排在后的记录之前被执行。,10.4 访问控制与身份认证 10.4.2 PAM身份验证,10.4 访问控制与身份认证 10.4.2 PAM身份验证,控制符的可选值表示了相关模块的重要程度,其有required、requisite、sufficient和optional 4个关键字,含义如下表所示。,PAM控制符,3)模块路径模块路径字段可以是可动态加载的目标模块的文件路径,也即是可插入式模块本身的路径。如果路径的首字符是“/”,那它被作为一个绝对路径,否则即为相对于默认路径/lib/security的相对路径。pam需要使用适当的模块来支持不同的认证方式,模块路径就是指明这些模块的位置。4)可选参数可选参数是一组传给模块的参数。通常,合法的参数是模块特有的。无效的参数会被模块忽略,相应的模块会将错误信息写到syslog日志系统。可选参数的常用取值