LINUX系统的安全加固

Download Report

Transcript LINUX系统的安全加固

LINUX系统的安全加固
中国科技网网络中心
安全部 高鹏
中国科学院计算机网络信息中心 中国科技网网络中心
www.cstnet.cn
All rights reserved
前言
Linux系统凭借其稳定且源代码公开的特性,在互
联网络上的应用已经越来越多。
当前,随着各式网络攻击、病毒威胁的不断增多,
Linux系统的安全性也被愈发重视。因此,Linux系统
的加固已成为网络管理员、普通用户迫在眉睫所需进
行的工作。
目录
1
3
启动安全设置
2
帐户安全设置
3
系统安全设置
4
日志安全设置
启动安全设置
LILO引导
LILO安装命令(/sbin/lilo)读取其配置文件(/etc/lilo.conf),按照
其中的参数将特定的LILO写入系统引导区。
GRUB引导
它允许位于主引导记录区中特定的指令来装载一个GRUB菜单或是
GRUB的命令环境。这使得用户能够开始操作系统的选择,在内核引
导时传递特定指令给内核,或是在内核引导前确定一些系统参数。
启动安全设置
LILO引导、GRUB引导的单用户模式
引导启动后出现boot:提示时,使用一个特殊的
命令,如 linuxsingle或linux 1,就能进入Linux单用
户模式(Single-User mode)。
单用户模式的用户拥有root权限,其进入系统后,
可编辑/etc/passwd 文件,去掉root一行中的x 即可
在下次登录时无需密码使用root帐户。
启动安全设置
LILO引导单用户模式的口令设置
添加密码
设置权限
改变属性
编辑配置文件lilo.conf(vim /etc/lilo.conf )
防止root误操作,可使/etc/lilo.conf文件
因为 /etc/lilo.conf文件中包含明文密码
属性变为不可改,并更新LILO。
所以要把它设置成root权限读取。
## chatter
/etc/lilo.conf
chmod+i600
/etc/lilo.conf
# /sbin/lilo -v
启动安全设置
Grub引导的口令设置
进入GRUB编辑模式
生成MD5密码
写入配置文件
将加密的密码添加到/boot/grub/grub.conf
启动系统后出现GRUB引导画面
输入md5crypt
,按<C>键进入命令行方式
中的password一行
目录
1
3
启动安全设置
2
帐户安全设置
3
系统安全设置
4
日志安全设置
帐户安全设置
嵌入式认证模块---PAM介绍
PAM(Pluggable Authentication Modules )是由Sun提出的一种认证
机制。它通过提供一些动态链接库和一套统一的API,将系统提供的
服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要
给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于
向系统中添加新的认证手段。
PAM最初是集成在Solaris中,目前已移植到其它系统中,如Linux、
SunOS、HP-UX 9.0等。
帐户安全设置
嵌入式认证模块---PAM介绍
帐户安全设置
PAM支持的四种管理方式




认证管理(authentication management)
主要是接受用户名和密码,进而对该用户的密码进行认证,
并负责设置用户的一些秘密信息。
帐户管理(account management)
主要是检查帐户是否被允许登录系统,帐号是否已经过期,
帐号的登录是否有时间段的限制等等。
密码管理(password management)
主要是用来修改用户的密码。
会话管理(session management)
主要是提供对会话的管理和记账(accounting)。
帐户安全设置
PAM的文件

/usr/lib/libpam.so.* PAM核心库

/etc/pam.d/

/lib/security/pam_*.so 可动态加载的PAM服务模块
PAM配置文件
Pam_unix.so
该模块的主要功能是禁止为密码为空的用户提供服务

Pam_permit.so
总是无条件地使认证成功

Pam_deny.so
总是无条件地使认证失败,通常该模块被用来作为缺省的验证规则

Pam_cracklib.so
该模块对用户密码提供强健性检测

帐户安全设置
PAM的配置


/etc/pam.d/目录下的每个文件的名字对应服务名
例如ftp服务对应文件/etc/pam.d/ftp
如果名为xxxx的服务所对应的配置文件 /etc/pam.d/xxxx不
存 在,则该服务将使用默认的配置文件/etc/pam.d/other
帐户安全设置
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 是用来传递给该模块的参数
帐户安全设置
PAM的配置
control-flag 的四种取值
required:表示即使某个模块对用户的验证失败,也要等所有的模块都执行完毕,
PAM才返回错误信息。这样做是为了不让用户知道被哪个模块拒绝。如果对用户
验证成功,所有的模块都会返回成功信息。
requisite:如果特定的模块对用户的验证失败,PAM马上返回一个错误信息,把
控制权交回应用程序,不再执行其他模块进行验证。
sufficient:表示如果一个用户通过这个模块的验证,PAM结构就立刻返回验证
成功信息,把控制权交回应用程序。后面的层叠模块即使使用requisite或者
required控制标志,也不再执行。如果验证失败,sufficient的作用和optional相同。
optional:表示即使本行指定的模块验证失败,也允许用户享受应用程序提供的
服务。使用这个标志,PAM框架会忽略这个模块产生的验证错误,继续顺序执行
下一个层叠模块。
帐户安全设置
PAM的实例演示
Linux-PAM控制用户安全登录:
1:只允许root用户本地登录;
实例描述
启用PAM
2:只允许用户paul从159.226.8网段远
程登录;
3:其他用户均不许登录系统。
修改配置
目录
1
3
启动安全设置
2
帐户安全设置
3
系统安全设置
4
日志安全设置
系统安全设置
关闭多余服务应用
查看"/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等等。
系统安全设置
建议只保留以下服务:
系统安全设置
关闭多余服务应用
第四步:
给inetd进程发送一个HUP信号:
# killall -HUP inetd
第五步:
用chattr命令把/etc/inetd.conf文件设为不可修改,这样就没人可以修改它:
# chattr +i /etc/inetd.conf
这样可以防止对inetd.conf的任何修改。唯一可以取消这个属性的人只有
root。如果要修改inetd.conf文件,首先要是取消不可修改性质:
# chattr -i /etc/inetd.conf
系统安全设置
限制用户通过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用户。
系统安全设置
Telnet 服务的设定
一、开启Telnet服务
编辑 /etc/xinetd.d/telnet
#vi /etc/xinetd.d/telnet
找到 disable = no<==此项控制服务的开启与关闭
重启服务
telnet 是挂在 xinetd 底下的,所以需要重新激活 xinetd 就能够将 xinetd 里
头的设定重新读进来,所以刚刚设定的 telnet 自然也就可以被激活。
# service xinetd restart
系统安全设置
Telnet 服务的设定
二、设置Telnet服务端口
#vi /etc/services
进入编辑模式后查找telnet
会找到如下内容:
telnet 23/tcp
将23修改成未使用的端口号(如:2000),退出vi,重启telnet服务,telnet默
认端口号就被修改了。
系统安全设置
Telnet 服务的设定
为保证更安全的Telnet服务应用,可修改其默认配置值,满足实际的
应用情况。
假设一部Linux 主机,有两块网络接口,分别是对内 192.168.0.1 与
对外的203.45.1.9 这两个,如果你想要让对内的接口限制较松,而对外
的限制较严格,可以这样的来设定:
系统安全设置
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 <==每天只有这两个时段开放服务
......
}
系统安全设置
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)
系统安全设置
Sudo
“Sudo” 是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分
配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或其他特许
用户才能完成的任务。
例如:运行一些像mount,halt,su之类的命令,或者编辑一些系统配
置文件,像/etc/mtab, /etc/samba/smb.conf等。这样以来,就不仅减少了
root用户的登陆次数和管理时间,也提高了系统安全性。
系统安全设置
Sudo
sudo的配置都记录在/etc /sudoers文件中。配置文件指明哪些用户可以执
行哪些命令。

在sudoers文件中的基本配置格式
用户
主机名列表=命令程序列表
被授权的用户
在哪些主机中使用
针对root用户的sudo配置特例
[root@localhost ~]# grep "^root" /etc/sudoers
root
ALL=(ALL)
ALL
允许以哪些用户的身份执
行命令,缺省为root
允许执行哪些命令
系统安全设置
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
目录
1
3
启动安全设置
2
帐户安全设置
3
系统安全设置
4
日志安全设置
日志安全设置
Linux系统的日志文件的配置
配置文件/etc/syslog.conf,可编辑此文件让日志系统记录更多信息,编辑后
需重启/usr/sbin/syslogd进程,重读取配置文件。
两个重要的日志文件:
utmp保存本地系统日志
wtmp保存登录其它系统时日志。
设置utmp和wtmp文件权限,确保日志系统安全
#chmod 644 /ver/log/wtmp
#chmod 644 /ver/run/utmp
日志安全设置
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 - 邮件系统的关键警告信息
日志安全设置
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
//拨出自动呼叫记录
日志安全设置
将日志文件记录到远程主机
如果有另一个Linux或系统,那么让其把消息发到另外一个系统并记录下来。
要实现这个功能,在该配置文件中,指定一个记录动作,后面接一个由“@”开头
的远程系统的主机名,如下例:
#vi /etc/syslog.conf
*.warn;authpriv.notice;auth.notice @syslog.syslog.com
同时,还要将接受消息的目的系统设置为允许这种操作。
/etc/rc.d/init.d/syslog restart -r
总结与建议
1.关闭不必要的服务
2.为用户分配适当的权限
3.口令强度
4.定期打补丁
5.定期查看日志
6.定时修正系统时间
7.修改服务的默认端口
谢谢
E-MAIL:[email protected]
TEL:58812896
中国科学院计算机网络信息中心 中国科技网网络中心
www.cstnet.cn
All rights reserved