Linux系统安全配置详解.docx
《Linux系统安全配置详解.docx》由会员分享,可在线阅读,更多相关《Linux系统安全配置详解.docx(27页珍藏版)》请在冰豆网上搜索。
![Linux系统安全配置详解.docx](https://file1.bdocx.com/fileroot1/2023-8/13/7ac382e9-8ed8-4194-8fdb-ab3f24704612/7ac382e9-8ed8-4194-8fdb-ab3f247046121.gif)
Linux系统安全配置详解
Linux系统安全配置详解
1.为LILO增加开机口令
在/etc/lilo.conf文件中增加选项,从而使LILO启动时要求输入口令,以加强系统的安全性。
具体设置如下:
boot=/dev/hdamap=/boot/mapinstall=/boot/boot.btime-out=60#等待1分钟promptdefault=linuxpassword=#口令设置image=/boot/vmlinuz-2.2.14-12label=linuxinitrd=/boot/initrd-2.2.14-12.imgroot=/dev/hda6read-only
此时需注意,由于在LILO中口令是以明码方式存放的,所以还需要将lilo.conf的文件属性设置为只有root可以读写。
#chmod600/etc/lilo.conf
当然,还需要进行如下设置,使lilo.conf的修改生效。
#/sbin/lilo-v
2.设置口令最小长度和
最短使用时间
口令是系统中认证用户的主要手段,系统安装时默认的口令最小长度通常为5,但为保证口令不易被猜测攻击,可增加口令的最小长度,至少等于8。
为此,需修改文件/etc/login.defs中参数PASS_MIN_LEN。
同时应限制口令使用时间,保证定期更换口令,建议修改参数PASS_MIN_DAYS。
3.用户超时注销
如果用户离开时忘记注销账户,则可能给系统安全带来隐患。
可修改/etc/profile文件,保证账户在一段时间没有操作后,自动从系统注销。
编辑文件/etc/profile,在“HISTFILESIZE=”行的下一行增加如下一行:
TMOUT=600
则所有用户将在10分钟无操作后自动注销。
4.禁止访问重要文件
对于系统中的某些关键性文件如inetd.conf、services和lilo.conf等可修改其属性,防止意外修改和被普通用户查看。
首先改变文件属性为600:
#chmod600/etc/inetd.conf
保证文件的属主为root,然后还可以将其设置为不能改变:
#chattr+i/etc/inetd.conf
这样,对该文件的任何改变都将被禁止。
只有root重新设置复位标志后才能进行修改:
#chattr-i/etc/inetd.conf
5.允许和禁止远程访问
在Linux中可通过/etc/hosts.allow和/etc/hosts.deny这2个文件允许和禁止远程主机对本地服务的访问。
通常的做法是:
(1)编辑hosts.deny文件,加入下列行:
#Denyaccesstoeveryone.ALL:
ALL@ALL
则所有服务对所有外部主机禁止,除非由hosts.allow文件指明允许。
(2)编辑hosts.allow文件,可加入下列行:
#Justanexample:
ftp:
202.84.17.11
则将允许IP地址为202.84.17.11和主机名为的机器作为Client访问FTP服务。
(3)设置完成后,可用tcpdchk检查设置是否正确。
6.限制Shell命令记录大小
默认情况下,bashshell会在文件$HOME/.bash_history中存放多达500条命令记录(根据具体的系统不同,默认记录条数不同)。
系统中每个用户的主目录下都有一个这样的文件。
在此笔者强烈建议限制该文件的大小。
您可以编辑/etc/profile文件,修改其中的选项如下:
HISTFILESIZE=30或HISTSIZE=30。
7.注销时删除命令记录
编辑/etc/skel/.bash_logout文件,增加如下行:
rm-f$HOME/.bash_history
这样,系统中的所有用户在注销时都会删除其命令记录。
如果只需要针对某个特定用户,如root用户进行设置,则可只在该用户的主目录下修改/$HOME/.bash_history文件,增加相同的一行即可。
8.禁止不必要的SUID程序
SUID可以使普通用户以root权限执行某个程序,因此应严格控制系统中的此类程序。
找出root所属的带s位的程序:
#find/-typef\(-perm-04000-o-perm-02000\)-print less
禁止其中不必要的程序:
#chmoda-sprogram_name
9.检查开机时显示的信息
Linux系统启动时,屏幕上会滚过一大串开机信息。
如果开机时发现有问题,需要在系统启动后进行检查,可输入下列命令:
#dmesg>bootmessage
该命令将把开机时显示的信息重定向输出到一个文件bootmessage中。
10.磁盘空间的维护
经常检查磁盘空间对维护Linux的文件系统非常必要。
而Linux中对磁盘空间维护使用最多的命令就是df和du了。
十招:
第1招:
取消不必要的服务
早期的Unix版本中,每一个不同的网络服务都有一个服务程序在后台运行,后来的版本用统一的/etc/inetd服务器程序担此重任。
Inetd是Internetdaemon的缩写,它同时监视多个网络端口,一旦接收到外界传来的连接信息,就执行相应的TCP或UDP网络服务。
由于受inetd的统一指挥,因此Linux中的大部分TCP或UDP服务都是在/etc/inetd.conf文件中设定。
所以取消不必要服务的第一步就是检查/etc/inetd.conf文件,在不要的服务前加上“#”号。
一般来说,除了http、smtp、telnet和ftp之外,其他服务都应该取消,诸如简单文件传输协议tftp、网络邮件存储及接收所用的imap/ipop传输协议、寻找和搜索资料用的gopher以及用于时间同步的daytime和time等。
还有一些报告系统状态的服务,如finger、efinger、systat和netstat等,虽然对系统查错和寻找用户非常有用,但也给黑客提供了方便之门。
例如,黑客可以利用finger服务查找用户的电话、使用目录以及其他重要信息。
因此,很多Linux系统将这些服务全部取消或部分取消,以增强系统的安全性。
Inetd除了利用/etc/inetd.conf设置系统服务项之外,还利用/etc/services文件查找各项服务所使用的端口。
因此,用户必须仔细检查该文件中各端口的设定,以免有安全上的漏洞。
在Linux中有两种不同的服务型态:
一种是仅在有需要时才执行的服务,如finger服务;另一种是一直在执行的永不停顿的服务。
这类服务在系统启动时就开始执行,因此不能靠修改inetd来停止其服务,而只能从修改/etc/rc.d/rc[n].d/文件或用Runleveleditor去修改它。
提供文件服务的NFS服务器和提供NNTP新闻服务的news都属于这类服务,如果没有必要,最好取消这些服务。
第2招:
限制系统的出入
在进入Linux系统之前,所有用户都需要登录,也就是说,用户需要输入用户账号和密码,只有它们通过系统验证之后,用户才能进入系统。
与其他Unix操作系统一样,Linux一般将密码加密之后,存放在/etc/passwd文件中。
Linux系统上的所有用户都可以读到/etc/passwd文件,虽然文件中保存的密码已经经过加密,但仍然不太安全。
因为一般的用户可以利用现成的密码破译工具,以穷举法猜测出密码。
比较安全的方法是设定影子文件/etc/shadow,只允许有特殊权限的用户阅读该文件。
在Linux系统中,如果要采用影子文件,必须将所有的公用程序重新编译,才能支持影子文件。
这种方法比较麻烦,比较简便的方法是采用插入式验证模块(PAM)。
很多Linux系统都带有Linux的工具程序PAM,它是一种身份验证机制,可以用来动态地改变身份验证的方法和要求,而不要求重新编译其他公用程序。
这是因为PAM采用封闭包的方式,将所有与身份验证有关的逻辑全部隐藏在模块内,因此它是采用影子档案的最佳帮手。
此外,PAM还有很多安全功能:
它可以将传统的DES加密方法改写为其他功能更强的加密方法,以确保用户密码不会轻易地遭人破译;它可以设定每个用户使用电脑资源的上限;它甚至可以设定用户的上机时间和地点。
Linux系统管理人员只需花费几小时去安装和设定PAM,就能大大提高Linux系统的安全性,把很多攻击阻挡在系统之外。
第3招:
保持最新的系统核心
由于Linux流通渠道很多,而且经常有更新的程序和系统补丁出现,因此,为了加强系统安全,一定要经常更新系统内核。
Kernel是Linux操作系统的核心,它常驻内存,用于加载操作系统的其他部分,并实现操作系统的基本功能。
由于Kernel控制计算机和网络的各种功能,因此,它的安全性对整个系统安全至关重要。
早期的Kernel版本存在许多众所周知的安全漏洞,而且也不太稳定,只有2.0.x以上的版本才比较稳定和安全,新版本的运行效率也有很大改观。
在设定Kernel的功能时,只选择必要的功能,千万不要所有功能照单全收,否则会使Kernel变得很大,既占用系统资源,也给黑客留下可乘之机。
在Internet上常常有最新的安全修补程序,Linux系统管理员应该消息灵通,经常光顾安全新闻组,查阅新的修补程序。
第4招:
检查登录密码
设定登录密码是一项非常重要的安全措施,如果用户的密码设定不合适,就很容易被破译,尤其是拥有超级用户使用权限的用户,如果没有良好的密码,将给系统造成很大的安全漏洞。
在多用户系统中,如果强迫每个用户选择不易猜出的密码,将大大提高系统的安全性。
但如果passwd程序无法强迫每个上机用户使用恰当的密码,要确保密码的安全度,就只能依靠密码破解程序了。
实际上,密码破解程序是黑客工具箱中的一种工具,它将常用的密码或者是英文字典中所有可能用来作密码的字都用程序加密成密码字,然后将其与Linux系统的/etc/passwd密码文件或/etc/shadow影子文件相比较,如果发现有吻合的密码,就可以求得明码了。
在网络上可以找到很多密码破解程序,比较有名的程序是crack。
用户可以自己先执行密码破解程序,找出容易被黑客破解的密码,先行改正总比被黑客破解要有利。
第5招:
设定用户账号的安全等级
除密码之外,用户账号也有安全等级,这是因为在Linux上每个账号可以被赋予不同的权限,因此在建立一个新用户ID时,系统管理员应该根据需要赋予该账号不同的权限,并且归并到不同的用户组中。
在Linux系统上的tcpd中,可以设定允许上机和不允许上机人员的名单。
其中,允许上机人员名单在/etc/hosts.allow中设置,不允许上机人员名单在/etc/hosts.deny中设置。
设置完成之后,需要重新启动inetd程序才会生效。
此外,Linux将自动把允许进入或不允许进入的结果记录到/rar/log/secure文件中,系统管理员可以据此查出可疑的进入记录。
每个账号ID应该有专人负责。
在企业中,如果负责某个ID的职员离职,管理员应立即从系统中删除该账号。
很多入侵事件都是借用了那些很久不用的账号。
在用户账号之中,黑客最喜欢具有root权限的账号,这种超级用户有权修改或删除各种系统设置,可以在系统中畅行无阻。
因此,在给任何账号赋予root权限之前,都必须仔细考虑。
Linux系统中的/etc/securetty文件包含了一组能够以root账号登录的终端机名称。
例如,在RedHatLinux系统中,该文件的初始值仅允许本地虚拟控制台(rtys)以root权限登录,而不允许远程用户以root权限登录。
最好不要修改该文件,如果一定要从远程登录为root权限,最好是先以普通账号登录,然后利用su命令升级为超级用户。
第6招:
消除黑客犯罪的温床
在Unix系统中,有一系列r字头的公用程序,它们是黑客用以入侵的武器,非常危险,因此绝对不要将root账号开放给这些公用程序。
由于这些公用程序都是用。
rhosts文件或者hosts.equiv文件核准进入的,因此一定要确保root账号不包括在这些文件之内。
由于r字头指令是黑客们的温床,因此很多安全工具都是针对这一安全漏洞而设计的。
例如,PAM工具就可以用来将r字头公用程序的功力废掉,它在/etc/pam.d/rlogin文件中加上登录必须先核准的指令,使整个系统的用户都不能使用自己home目录下的。
rhosts文件。
第7招:
增强安全防护工具
SSH是安全套接层的简称,它是可以安全地用来取代rlogin、rsh和rcp等公用程序的一套程序组。
SSH采用公开密钥技术对网络上两台主机之间的通信信息加密,并且用其密钥充当身份验证的工具。
由于SSH将网络上的信息加密,因此它可以用来安全地登录到远程主机上,并且在两台主机之间安全地传送信息。
实际上,SSH不仅可以保障Linux主机之间的安全通信,Windows用户也可以通过SSH安全地连接到Linux服务器上。
第8招:
限制超级用户的权力
我们在前面提到,root是Linux保护的重点,由于它权力无限,因此最好不要轻易将超级用户授权出去。
但是,有些程序的安装和维护工作必须要求有超级用户的权限,在这种情况下,可以利用其他工具让这类用户有部分超级用户的权限。
Sudo就是这样的工具。
Sudo程序允许一般用户经过组态设定后,以用户自己的密码再登录一次,取得超级用户的权限,但只能执行有限的几个指令。
例如,应用sudo后,可以让管理磁带备份的管理人员每天按时登录到系统中,取得超级用户权限去执行文档备份工作,但却没有特权去作其他只有超级用户才能作的工作。
Sudo不但限制了用户的权限,而且还将每次使用sudo所执行的指令记录下来,不管该指令的执行是成功还是失败。
在大型企业中,有时候有许多人同时管理Linux系统的各个不同部分,每个管理人员都有用sudo授权给某些用户超级用户权限的能力,从sudo的日志中,可以追踪到谁做了什么以及改动了系统的哪些部分。
值得注意的是,sudo并不能限制所有的用户行为,尤其是当某些简单的指令没有设置限定时,就有可能被黑客滥用。
例如,一般用来显示文件内容的/etc/cat指令,如果有了超级用户的权限,黑客就可以用它修改或删除一些重要的文件。
第9招:
追踪黑客的踪迹
当你仔细设定了各种与Linux相关的组态,并且安装了必要的安全防护工具之后,Linux操作系统的安全性的确大为提高,但是却并不能保证防止那些艺高人胆大的网络黑客的入侵。
在平时,网络管理人员要经常提高警惕,随时注意各种可疑状况,并且按时检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志以及用户登录日志等。
在检查这些日志时,要注意是否有不合常理的时间记载。
例如:
·正常用户在半夜三更登录;
·不正常的日志记录,比如日志只记录了一半就切断了,或者整个日志文件被删除了;
·用户从陌生的网址进入系统;
·因密码错误或用户账号错误被摈弃在外的日志记录,尤其是那些一再连续尝试进入失败,但却有一定模式的试错法;
·非法使用或不正当使用超级用户权限su的指令;
·重新开机或重新启动各项服务的记录。
第10招:
共同防御,确保安全
从计算机安全的角度看,世界上没有绝对密不透风、百分之百安全的计算机系统,Linux系统也不例外。
采用以上的安全守则,虽然可以使Linux系统的安全性大大提高,使顺手牵羊型的黑客和电脑玩家不能轻易闯入,但却不一定能阻挡那些身怀绝技的武林高手,因此,企业用户还需要借助防火墙等其他安全工具,共同防御黑客入侵,才能确保系统万无一失。
Linux安全设置笔记
[日期:
2007-11-12]来源:
Linux公社作者:
Linuxidc
Linux下用户组安全设置
chmodo-r/etc/passwd//让其他用户得不到passwd里的信息
chmodo-r/etc/group//让其他用户得不到group里的信息
chgrpapache/etc/passwd/etc/group//把passwd与group改为apache组
权限设置
cd/
chmodo-r*
cd/usr
chmodo-r*
cd/var
chmodo-r*
chmodgo-r/etc/httpd/conf
chmodgo-rx/etc/rc.d/init.d
chmodo-r/etc/rc.d/init.d/*//去掉几个目录的列权限
chmodgo-rx/usr/bin/gcc
chmodgo-rx/usr/bin/g++
chmodgo-rx/usr/include//去掉glibc的其他用户的权限
1、禁止使用Ping命令
Ping命令是计算机之间进行相互检测线路完好的一个应用程序,计算机间交流数据的传输没有经过任何的加密处理,因此我们在用ping命令来检测某一个服务器时,可能在因特网上存在某个非法分子,通过专门的黑客程序把在网络线路上传输的信息中途窃取,并利用偷盗过来的信息对指定的服务器或者系统进行攻击,为此我们有必要在Linux系统中禁止使用Linux命令。
在linux里,如果要想使ping没反应也就是用来忽略icmp包,因此我们可以在Linux的命令行中输入如下命令:
echo1>/proc/sys/net/ipv4/icmp_echo_igore_all
如果想恢复使用ping命令,就可以输入echo0>/proc/sys/net/ipv4/icmp_echo_igore_all
2、注意对系统及时备份
为了防止系统在使用的过程中发生以外情况而难以正常运行,我们应该对Linux完好的系统进行备份,最好是在一完成Linux系统的安装任务后就对整个系统进行备份,以后可以根据这个备份来验证系统的完整性,这样就可以发现系统文件是否被非法修改过。
如果发生系统文件已经被破坏的情况,也可以使用系统备份来恢复到正常的状态。
备份信息时,我们可以把完好的系统信息备份在CD-ROM光盘上,以后可以定期将系统与光盘内容进行比较以验证系统的完整性是否遭到破坏。
如果对安全级别的要求特别高,那么可以将光盘设置为可启动的并且将验证工作作为系统启动过程的一部分。
这样只要可以通过光盘启动,就说明系统尚未被破坏过。
3、改进登录服务器
将系统的登录服务器移到一个单独的机器中会增加系统的安全级别,使用一个更安全的登录服务器来取代Linux自身的登录工具也可以进一步提高安全。
在大的Linux网络中,最好使用一个单独的登录服务器用于syslog服务。
它必须是一个能够满足所有系统登录需求并且拥有足够的磁盘空间的服务器系统,在这个系统上应该没有其它的服务运行。
更安全的登录服务器会大大削弱入侵者透过登录系统窜改日志文件的能力。
4、取消Root命令历史记录
在linux下,系统会自动记录用户输入过的命令,而root用户发出的命令往往具有敏感的信息,为了保证安全性,一般应该不记录或者少记录root的命令历史记录。
为了设置系统不记录每个人执行过的命令,我们可以在linux的命令行下,首先用cd命令进入到/etc命令,然后用编辑命令来打开该目录下面的profile文件,并在其中输入如下内容:
HISTFILESIZE=0HISTSIZE=0
当然,我们也可以直接在命令行中输入如下命令:
ln-s/dev/null~/.bash_history
5、为关键分区建立只读属性
Linux的文件系统可以分成几个主要的分区,每个分区分别进行不同的配置和安装,一般情况下至少要建立/、/usr/local、/var和/home等分区。
/usr可以安装成只读并且可以被认为是不可修改的。
如果/usr中有任何文件发生了改变,那么系统将立即发出安全报警。
当然这不包括用户自己改变/usr中的内容。
/lib、/boot和/sbin的安装和设置也一样。
在安装时应该尽量将它们设置为只读,并且对它们的文件、目录和属性进行的任何修改都会导致系统报警。
当然将所有主要的分区都设置为只读是不可能的,有的分区如/var等,其自身的性质就决定了不能将它们设置为只读,但应该不允许它具有执行权限。
6、杀掉攻击者的所有进程
假设我们从系统的日志文件中发现了一个用户从我们未知的主机登录,而且我们确定该用户在这台主机上没有相应的帐号,这表明此时我们正在受到攻击。
为了保证系统的安全被进一步破坏,我们应该马上锁住指定的帐号,如果攻击者已经登录到指定的系统,我们应该马上断开主机与网络的物理连接。
如有可能,我们还要进一步查看此用户的历史记录,再仔细查看一下其他用户是否也已经被假冒,攻击者是否拥有有限权限;最后应该杀掉此用户的所有进程,并把此主机的IP地址掩码加入到文件hosts.deny中。
7、改进系统内部安全机制
我们可以通过改进Linux操作系统的内部功能来防止缓冲区溢出,从而达到增强Linux系统内部安全机制的目的,大大提高了整个系统的安全性。
但缓冲区溢出实施起来是相当困难的,因为入侵者必须能够判断潜在的缓冲区溢出何时会出现以及它在内存中的什么位置出现。
缓冲区溢出预防起来也十分困难,系统管理员必须完全去掉缓冲区溢出存在的条件才能防止这种方式的攻击。
正因为如此,许多人甚至包括LinuxTorvalds本人也认为这个安全Linux补丁十分重要,因为它防止了所有使用缓冲区溢出的攻击。
但是需要引起注意的是,这些补丁也会导致对执行栈的某些程序和库的依赖问题,这些问题也给系统管理员带来的新的挑战。
8、对系统进行跟踪记录
为了能密切地监视黑客的攻击活动,我们应该启动日志文件,来记录系统的运行情况,当黑客在攻击系统时,它的蛛丝马迹都会被记录在日志文件中的,因此有许多黑客在开始攻击系统时,往往首先通过修改系统的日志文件,来隐藏自己的行踪,为此我们必须限制对/var/log文件的访问,禁止一般权限的用户去查看日志文件。
当然,系统中内置的日志管理程序功能可能不是太强,我们应该采用专门的日志程序,来观察那些可疑的多次连接尝试。
另外,我们还要小心保护好具有根权限的密码和用户,因为黑客一旦知道了这些具有根权限的帐号后,他们就可以修改日志文件来隐藏其踪迹了。
9、使用专用程序来防范安全
有时,我们通过人工的方法来监视系统的安全比较麻烦,或者是不周密,因此我们还可以通过专业程序来防范系统的安全,目前最典型的方法为设置陷井和设置蜜罐两种方法。
所谓陷井就是激活时能够触发报警事件的软件,而蜜罐(honeypot)程序是指设计来引诱有入侵企图者触发专门的报警的陷井程序。
通过设置陷井和蜜罐程序,一旦出现入侵事件系统可以很快发出报警。
在许多大的网络中,一般都设计有专门的陷井程序。
陷井程序一般分为两种:
一种是只发现入侵者而不对其采取报复行动,另一种是同时采取报复行动。
10、将入侵消灭在萌芽状态
入侵者进行攻击之前最常做的一件事情就是端号扫瞄,如果能够及时发现和阻止入侵者的端号扫瞄行为,那么可以大大减少入侵事件的发生率。
反应系统可以是一个简单的状态检查包过滤器,也可以是一个复杂的入侵检测系统或可配置的防火墙。
我们可以采用诸如AbacusPortSentry这样专业的工具,来监视网络接口并且与防火墙交互操作,最终达到关闭端口扫瞄攻击的目的。
当发生正在进行的端口扫瞄时,AbacusSentry可以迅速阻止它继续执行。
但是如果配置不当,它也可能允许敌意的外部者在你的系统中安装拒绝服务攻击。
正确地使用这个软件将能够有效地防止对端号大量的并行扫瞄并且阻止所有这样的入侵者。
11、严格管理好口