Linux 服务器安全(基本)
2022/9/5 5:52:51
本文主要是介绍Linux 服务器安全(基本),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Linux 服务器安全
版本标识 |
V1 |
编制单位 |
李斌 |
编制日期 |
2020年7月 |
第一节
1、红帽linux的好处2、linux企业版发行的类型
3、操作系统的升级
4、安全问题
5、什么是CVEs?
6、如何系统升级
7、软件包的完整性检查
8、yum设置仓库使用gpg签名
9、验证rpm包脚本
1、红帽linux的好处
2、linux企业版发行的类型
第一种:AP—Advanced Platfrom(高级平台)第二种:Server(普通服务器)
第三种:Desktop/Workstation (client)(桌面版)
3、操作系统的升级(Openrating System Update)
4、安全问题
所谓的安全呢,是由某些软件产生的某些漏洞,这些漏洞的影响程度可以达到多大,分了四个等级。
第一个:Critical。就是要拉响警报的意思,很严重。这种漏洞一般是基于互联网发起的。不需要认证的,然后呢可以从远端对服务器发起毁灭性的攻击。第二个:Important。安全等级为重要。通常指的是升劝行为。这种漏洞呢也属于比较严重的,它标记为important,但是没有上面那个那么可怕。所以呢,一般来讲,您的服务器只要不开放本地用户登录的权限,这种问题一般可以规避。
第三个:Moderate:安全等级为普通类、一般类严重程度。这种严重程度通常不太容易发生,就算发生也是有限制的,不是大规模的窃取资料。
第四个:Low:一般人是影响不起的,或者呢这种安全漏洞概率极低。就算找到了这个漏洞进去了,对系统造成的损失是忽略的,是很小很小的损失。
5、什么是CVEs?
整个互联网之中,用的CVE来表达一个安全漏洞。这是一个业界标准。这也是一个工业的组织,它专门帮大家来描述一个软件问题,可以是任何一款软件。第一类:安全问题(RHSA)redhat security advisory
第二类:发现是一把bug,和安全无关的,它是个漏洞(RHBA)redhat bug fix advisory
第三类:系统增强,可升可不升。(RHEA)redhat enhancement advisory。比如说红帽升了新版的Firefox之后呢,他的渲染速度比以前有所提升,或者是给你一个量化呢是5%,性能的提升等等。
6、如何系统升级
yum updateinfo #检查更新信息第一类安全类(29个)
Critical 严重
Important 重要
Moderate 一般
第二类bugfix类(26),需要注意
第三类enhancement 性能增强的若干
yum updateinfo --security #列举出安全类的。
yum updateinfo --security list #可以查看有哪些安全包
yum update --security #如果这样,那所有的安全命令全部会打上
yum update --sec-severity=Critical #指定都一个安全级别的等级包 (严重的)
yum update --sec-severity=Important #这个里面可以看到一个kernel,内核的漏洞
yum update --bugfix -y #将所有bug都升了。
yum updateinfo list #看关于CVE的描述
yum update RHSA-2013-0271 #查看特定的某一个红帽做的补丁
yum update --cve=CVE-2013-0782 list #可以列举出设计到的软件包列表
7、软件包的完整性检查
GPG签名的目的rpm包是红帽开发出来的。rpm在生产的时候,当然是红帽的。如果是个人生产出来的时候,制作者就是你自己。它通过这个制造者签名,使得这个拿到产品的人,也就是rpm的最终用户,在安装的时候,可以通过制造者提供的公钥,然后识别是否来源是可靠的,以此来检查rpm包的来源。如果来源又问题,内容被人篡改,这个签名最终会失败,这是一种保护体系,所以大家千万别从网上下一些奇怪的软件包,想都不想就装上。
找出GPGkey
一把在服务器上自带的gls的。另外一把是我们自己系统上自带的RPM-GPG-KEY-redhat-release
rpm --import gpg-key-file #用来倒入一把钥匙
rpm -vvK #识别签名是否完整
rpm -qa | grep gpg-pubkey #查询所有安装的key
rpm -e #删除一把key
rpm -K yelp-2.28*.rpm #校验包的公钥 GPGfd43d51
rpm -qa | grep gpg-pubkey #已经安装了那些key,目前没有导入任何公钥校验rpm包
rpm --import /net/i/var/ftp/materials/GLS-GPG-KEY.txt
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat- re* #导入两把钥匙
rpm -qa | grep gpg-public #查看已经安装好的钥匙
gpg -v /net/i/var/ftp/materials/GLS-GPG-KEY.txt #可以直接查看钥匙
8、yum设置仓库使用gpg签名
平常操作系统自己装包的时候,系统默认是做安全性检查的,yum仓库配置里面有这么一句话“gpgcheck=1”,这是默认情况,因为服务系统不能随便去装包的,你装了包就可能会有安全隐患,你不知道这个包的来源是怎么样的,所以一旦检查包的钥匙,可以说这个包的来源是你可以控制的,因为到了钥匙,那么这个资源就能装,如果没有到,它相对应的资源是绝对不会装的。gpgcheck=1就是这个意思。既然要做gpg检查,那么必须知道钥匙所在的位置。gpgkey等于钥匙的路径,这是yum安全装包的关键因素。如果有第三方软件仓库,你也知道来源是可靠的,你也可以提前将gpgkey倒入你的系统里面了,直接装包就行了。如果是新装的系统,你还没来得及装钥匙,用yum做安装的时候呢,能不能突然间就弹出来一个对话框说这个包要做安全检查,你要先安装它相关的公钥
yum list yelp #有一个可用的包,还未安装
rpm -e gpg-publickey=fd4* #唯一的一把公钥删除
yum install yelp -y #提示一个报警信息,说你缺少fd……的钥匙,此包拒绝安装。所以需要在仓库中加上gpgcheck=file:///的路径后,再进行安装查看,yum install yelp。这是还可以看到, 它把这把钥匙找到了,如果再继续yes,那就可以安装了。这就是我们如何使用自动化的,让这个key倒入到你系统中的方法
9、验证rpm包脚本
rpm -qpl A.rpmrpm -qpl B.rpm #这样看上去这两个包没什么区别,都可以安装。
rpm -qp --scripts A.rpm
rpm -qp --scripts B.rpm #查这两个包内的脚本
还有另外一个跟脚本相关的,叫triggers。这是新版rpm包支持的一种特殊的指令,叫做触发器,有些时候需要包之间的关联,a包一旦安装,我、这个所安装好的b包要做一个相关联的动作,当a包一旦卸载,这个b包也要做一个相对应的脚本动作,也就是在说这个包里面的脚本不是针对自己的,而是针对其他的,当其他发生变化,我就发生变化,有点像关系型数据库
总共四个操作选项:
triggerin #当某个包在安装前的时候,安装我的脚本
triggerpostin #当某个包安装完之后,到我这个包里面调用相关的脚本
triggerun #卸载之前
triggerpostun #卸载之后
用triggers查看相关信息
rpm -qp --triggers rpm-file
rpm -qp --triggers A.rpm
可以看到这个包并没有相对应的触发器,说明它可靠。不会应为它装了一个什么包,系统而发生什么过激的反应。
本章总结
yum updateinfoyum updateinfo --security #列举出安全类的。
yum updateinfo --security list
yum update --security
yum update --sec-severity=Critical
yum update --sec-severity=Important
yum update --bugfix -y
yum update --cve=CVE-2013-0782 list
rpm --import gpg-key-file #用来倒入一把钥匙
rpm -vvK
rpm -e #删除一把key
rpm -K yelp-2.28*.rpm #校验包的公钥 GPGfd43d51
rpm -qa | grep gpg-pubkey
gpg -v
rpm -qpl A.rpm
rpm -qp --scripts A.rpm
rpm -qp --triggers rpm-file
第二节
1、文件系统安全2、文件系统挂载选项
3、超级块中的挂载选项
4、文件系统级的属性
5、特殊权限位
6、如何搜索特权文件
7、umask值
8、FACL
9、入侵检测
1、文件系统安全
红帽企业级linux从企业版5开始,就已经将LUSK加入到了整个文件系统之中,在图形化装机的时候,只需要点一个按钮“加密”,并且输入密码,整个卷组或者整个分区都已 经成为加密分区了,如果不输入正确密码,分区是无法展开的,里面的文件系统是读不到的,现在这个技术可以缩写为LUKS。cryptesetup luskFormat /dev/joinlabs/redhat #将逻辑卷初始化为LUSK格式 ,输入“YES”。
cryptsetup luksOpen /dev/joinlabs/redhat mydisk #需要在尾部加上映射名,也就是打开这个盘的名称。
mkfs.ext4 /dev/mapper/mydisk #做个文件系统格式化
cryptsetup luksClose mydisk #关闭映射点
在系统开机之后如何自动的将加密分区挂上。基本的思想是生成一把随机钥匙。
dd if=/dev/urandom of=/path/to/password/file bs=4096 count=1
chmod 666 /path/to/password/file #权限改的稍微安全些
cryptsetup luksAddKey /dev/joinlabs/redhat /path/to/password/file #添加钥匙
vim /etc/crypttab
->name
/dev/joinlabs/redhat /path/to/password/file
#第一列,就是你未来使用的名称,也就是映射点名字。
第二列就是你的加密的原盘。记住,不是映射点盘符,而是原始盘符。
第三列就是密码文件存放的路径
echo “/dev/mapper/mydisk /mnt/ ext4 defaults 0” >> /etc/fstab #永久挂载
示例 :
dd if=/dev/urandom of=/root/luks.key bs=4K count=1 //生成一把钥匙,来源于urandom
cryptsetup luksAddKey /dev/joinlabs/redhat /root/luks.key
vim /etc/crypttab
=> mydisk /dev/joinlabs/redhat /root/luks.key
chmod 600 /root/luks.key
2、文件系统挂载选项
文件系统挂载的权限。在ext文件系统之下,在默认挂载的时候,不带特殊的挂载选项,它缺省给八项操作。一共8个默认选项,其中4个是默认的。第一个:dev。意思是这个分区里面可以存设备文件,设备文件就是那些块设备,字符设备,命令管道等等这些非标准文件,默认是允许的。
第二个:exec。这里面允许出现可执行文件。可以将二进制文件执行
第三个:默认了suid,sgid程序,也就是说普通用户甚至可以以超级用户的身份执行某些指令
第四个:就是rw,文件系统默认大家都可以读写
默认选项中的可改项
第一个,nodev。有时候可以将其中一些给屏蔽掉。比如说你不希望支持设备文件,你加上选项nodev,它默认是dev。第二个,noexec。如果你觉得将来这个里面存放的都是一些普通文档,没有一个可能是执行的你 可以加上noexec,就算有人拷贝了可执行文件进去,这个文件也是不允许被执行的
第三个,nosuid。此文件系统里面禁制出现任何特殊权限的可执行文件,没有人可以变化成另外一个人的身份执行文件。你可以限制死,保证其安全性。
第四个,ro。你甚至可以让文件系统只读
示例:
就拿以上加密分区为例mount -o remount,ro /dev/mapper/mydisk
ls /mnt
touch /mnt/file
尝试在下面建一个文件,这里会报出一个错误提示,说这个文件系统是只读,建不出来。假如挂载的时候带上一个noexec,见以下操作
mount -o remount,noexec /dev/mapper/mydisk
cp /bin/ls /mnt
ls
其结果就是此挂载点下的执行文件都不能执行了。
3、超级块中的挂载选项
于文件系统挂载时候,在超级块里面预留出来的挂载属性,有这么两个是我们可以用到的。在 以前红帽企业级5以前的时候,想让一个文件系支持acl,必须在挂载选项上加入“acl”这个特殊的挂载属性。在企业版5之后,操作系统自己格式化的分区都 默认带了acl。你不用做这个什么mount -o acl这样的一个命令选项才使用它,那是因为这个标记已经嵌入到了文件系统超级快里面去了。还有一个选项叫user_xattr,支持扩展 文件的存储,这些都是可以调节
查询的方法是tune2fs -l /dev/sda1,查看某个超级块的挂载信息
示例 :
tune2fs -l /dev/sda1 #查看sda1超级块的挂载信息。如果想把某个默认挂载功能取消用这个tun2fs -o^acl /dev/sda1 #想加上选项用tune2fs -o acl /dev/sda1,做个以下演示
tune2fs -l /dev/sda1 #默认挂载属性“Default mount options”,看到有两个。
tune2fs -o^acl /dev/sda1 #这个动作时发生在超级快里面,不影响本次使用,是下一次要自动挂载的时候才生效的
umount /boot;mount -a #重新挂一下。可以尝试在里面创建一个文件
setfacl -m u:student:rw file #这时候报错会发现操作不被支持。 根本就不知道什么叫acl
mount -o remount,acl /boot #这个acl要被支持的话,需要加回来。
setfacl -m u:student:rw file #可创建文件
以上示例是以前的做法,现在再也不用了。现在只需要将默认挂载属性嵌套进超级块中,这样可以查看一下,tune2fs -l /dev/sda1 这个文件系统下就直接支持acl,不需要人为干预。
umount /bootmount /dev/sda1 /boot
cd /boot
setfacl -x u:student:- file
#比如说取消acl的设置,是完全支持的。那么言外之意,未来在格式化文件系统的时候,可以看看格式化时候的选项,其中有一个就是默认挂载属性,可以在格式化的时候把它们带进去就可以了
4、文件系统级的属性
部分功能xfs文件系统也支持,但是所有的ext文件系统都支持这种特殊的文件系统级属性。chattr +a file
#这个文件只允许追加。不允许覆盖,不允许删除。什么样的文件需要这
样,一个非常重要的日志文件,绝对不能够被删除,不能够被无意中覆盖
chattr +i file
#任何操作都不允许发生在它身上,任何想修改它的动作,想删除它的动
作,重命名等,全部阻止,只能够读取它。彻底只读,超级用户都删不掉
chattr +j file
#给某个文件加上文件数据区域日志功能,用来保证这个文件比如说突然断电或者是文件系统意外发生故障的时候呢能够回到当时的样子,尽量保证文件的数据的完 整性。
chattr +S file
#保证这个文件立即同步到磁盘,所以说这个文件太关键了,不要把它放
到内存中提高性能等等,需要立即存盘。
lsattr
#查看
示例
echo 111 > file
chattr +a file
Lsattr #可以看到除了e之外,还多了个a属性。e属性是现在ext4都支持。rm -f file是不允许被删除的。
echo 222> file #覆盖也是无法做到的。尝试追加是可以的。
chattr -a file #可以删除掉a属性即可。
chattr +i file #这个文件不准任何人去动它。只能去读取里面的东西。追加删除都不行。这样做就是组织用户无意中把它影响了。真想把它删除的时候-i就可以了
5、特殊权限位
suid#就是u+s,就是任何人在执行这个可执行文件的时候,都转化为该执行文件的所
属用户,通常都是超级用户,但不是绝对。也可以转化成任何一个人的身份去执行,主要是看这个文件的所有者是谁。
sgid
#任何人在执行这个可执行文件的时候,它的所属组变成这个可执行文件的所属组。
身份会发生变化。
Sticky Bit
#就是所谓的o+t,就是说谁在这个目录下创建内容,谁自己去删除。除了root外。
典型的目录是/tmp
6、如何搜索特权文件
find /bin/ -type f -perm -4000find /usr/bin -type f -perm -2000
find /var/ -perm -1000 #搜索var下所有粘贴位的权限。T和t的区别就在执行权限x
find /usr/bin -perm /7000 ls # - 与/是有区别的。-代表的是完全匹配,/代表的是或者,suid,
sgid,sticky bit任何满足一个要求就可以了
示例:
系统有一个用户alex,然后给alex用户分配了一个程序叫/usr/local/bin/createfile(其实这个就是touch命令),createfile的所属用户和所属组都是alex,允许alex 在/uer/local/etc目录可以创建文件,在createfile上用户和组都加了s位,任何人在执行createfile的时候,他的身份变化为alex。
cp /bin/touch /usr/local/bin/createfile
useradd alex
chown alex:alex /usr/local/bin/createfile
mkdir /usr/local/etc ; setfacl -m u:alex:rwx /usr/local/etc
chmod ug+s /usr/local/bin/createfile
接下来看看创建出来的文件,也就是说任何人企图执行这条createfile的命令的时候,所属用户会转化为alex,组也会为alex。
touch file
createfile file2
两条命令后的结果进行对比。不论谁执行这个可执行文件,他的身份都发生变化,保证任何人在用这个程序的时候,就算是超级用户也不会造成破坏。这就是特 殊权限位的反向用法,以前大家都是放大权限,现在做的是缩小权限。就算超级用户也破坏不了。
7、umask值
久经考验的umask值有两个。一个002,一个022。修改的话有两种影响范围,一种是全局的,一种是局部的全局:/etc/profile 和 /etc/bashrc 任意用户在使用umask的时候会发生变化。影响面比较广。两个文件要一起改,因为用户在登录的时候这两个文件都会自动执行的。
局部:~/.bash_profile 和 ~/.bashrc 如果是你想改某个用户的umask值,最好的办法就是去这个两个文件中的任意一个中去写umask值
8、FACL
示例 :先建立三个用户harry,natasha,sarah,都属于admin组,在根下新建一个文件叫file,它属于如用户是读写的,组是admin为只读,其他任何人没权限
useradd harry (natasha、sarah)
groupadd admin
usermod -aG admin harry(natasha,sarah)
> file
chgrp admin /file
chmod 640 /file
如果harry用户想读写这个文件该怎么办?再或者说如果你还不想让sarah碰这个文件该怎么办? 连读取都不能。
setfacl -m u:harry:rw /file
setfacl -m u:sarah:- /file
getfacl /file #查看信息。
setfacl -m d: #不论有有什么新文件,新内容产生,该权限都会继承下去,是一种acl的递归。
setfacl -x #就可以将acl权限删除掉。
setfacl -m d:g:admin:rwx /dir
9、入侵检测
时间以来的话,如果你希望你的系统中那些文件发生了变化,甚至权限发生了变化,你都很关心,更不要说文件内容发生了变化。你要去监控这些文件,都发生了什么变化。一 旦被人动过,我们必须通过某种手段查到它,那么这一套检测系统在我们企业版里面叫做aide,是个企业级入侵检测系统,可以帮助我们评估所有文件,监控到所有的文件审计它 们,你想去监控什么,就监控什么。不论是文件大小,权限,内容发生变化,或者是其他的变化,你都可以追踪它
实现步骤:
第一步:yum install aide 安装aide
第二步:vim /etc/aide.conf编辑主配置文件,定义你带监控的文件
第三步:aide --init 定义好之后,对整个系统做一次初始化
第四步:mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz 把数据库生成完之后重命名一下。这个过程是必须的
第五步:aide --check 将来检测的时候,根据以前旧的数据库和新生成的数据库进行一个比对,如果发生变化,代表这个文件被改过,或者权限被动过。
所以,通常我们会用到两类监控,第一类是权限类变化,另外一类叫NORMAL,我们所有的东西都要监控,只要和这些文件相关的。只要敢动它,就要跟我汇报,不论是权限,还是 文件的内容,所以根据分量,自己去监控。
示例
监控tmp下的一个文件test
> /tmp/test
vim /etc/aide.conf #可以看到在默认情况下,它监控的项目非常多,尤其是可执行文件。前半部分是定义监控的类型 ,后半部分监控的属性。如果全部监控的话,这个过程相当的慢,假如只想监控test,其他都不需要。将策略以下的全部注释掉
[ctrl]+[v],[shift]+[g],[shift]+[i],[shift]+[3],[esc]+[esc]
=> /test NORMAL
aide --init
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
echo test1 > test #尝试让test文件发生点变化。
aide --check #它发现这个文件被人动了,md5值已经不一样了,三种哈希算法都有变化
aide --init #如果后悔,现在才是我们要的东西。没关系,可以初始化。然后在重新定义数据库即可
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
chmod 777 test
aide --check #就会给你一个警报,其中权限就会发生变化
第三节
1、password文件2、shadow文件
3、login.defs文件
4、用户账户安全(监控登录)pam模块
5、pam模块的配置
6、简单控制值
7、监控登录,登录审计
8、用户账户设置
1、password文件
1)用户名2)密码
3)从1970年1月1日到上次修改密码的天数
4)至少在设定的天数内密码是不能修改的
5)在设定的天数之后必须重新设置密码
6)在密码失效前,提请用户密码即将失效的天数
7)设定密码过期之后,如果该账号任然没有被使用,则停用该账户的天数
8)设定账号失效的时间。如果这个时间还没有使用该账号,用户将不再以该账号身份登录
9)系统保留
2、shadow文件
第一列:用户名第二列:密码哈希值
第三列:自从1970年1月1日起,最后一次修改密码的时间。因为贝尔实验室搞出来的unix,和这个linux 有点渊源,为了保证和unix兼容性。
第四列:密码每两次修改之间的间隔周期,默认值是0。代表着用户任何时候都可以修改自己的密码
第五列:用户最长最长可以不用改密码。默认99999。
第六列:密码过期前多少天报警。
第七列:密码过期之后还有多少天,你依旧无动于衷,就是不改密码,就把你的密码封锁。
第八列:账号有效期。一般通常都是给人来开临时账号和试用账号的。
第九列:保留
chage -m3 -M 90 -W 7 -I 356 [username]
#密码90天必须改一次,每两次修改之间必须间隔3天,提前7天报警,356天后不修改密码,账户就被封锁了
chage -l [username]
chage -d 1970-1-1 [username]
#缩写形式:chage -d 0 [username] 强制用户下次进入系统后修改密码
3、login.defs文件
4、用户账户安全(监控登录)pam模块
很早的时候,在还没有linux的时候,unix要做系统的认证,用户名和密码做系统校验的时候,没pam模块,它内部的认证体系是通过一个程序来实现的,到了后来大家就尝试着使用不同的方法。自从有了pam之后,将这种认证手段,转化成了任意转换的模块,可以任意使用你所喜欢的一种方法,总体而言就是为了实现第三方认证而开发出来的一套认证体系。它当时的目的是为了实现第三方认证。linux下的标准认证,有它自己的passwd,shadow文件认证等等,那么以下的认证是非标准的,比如ldap,kerberos,yp-bind,DNS……这些都是非标准认证,需要第三方插件支持,有了pam之后只需要去修改配置文件即可。pam是需要动态配置的,没有什么服务需要去重启,所以非常的灵活,非常的棒。那么整个pam体系会告诉你你的登录是成功了,还是失败了。当今几乎所有的服务,它的后台都要经过pam,因为太方便了,这是一个已经开发完毕的,已经成熟的认证体系。
自从pam支持了第三方认证之后,顺便将unix和linux也嵌入到pam里面去了,因为linux和unix,已经成为pam这套认证体系中的一员了。所以现在整体全部用pam了。
5、pam模块的配置
它相关有两个目录第一个是:/lib[64]/security/ 下面包含了很多pam模块,这些.so文件都是动态链接库。.a为静态链接库。比如说这个最经典的pam_unix.so,我们linux认证,或者unix认证都走的是它。这就是传统认证方法的入口。在比如说pam_krb5.so,你可以把你自己喜欢的任何一种认证方法,书写成模块的形式,表达给操作系统。
第二个是:/etc/pam.d/ 这个目录呢是针对这些.so文件的使用方案,不同的程序可以在这下面书写自己的使用方案,有很多的认证的方案可以给我们使用,比如说login这个程序,我们终端登录时候该如何使用pam,通过一系列的配置而得出来。那么这么多.so文件我们该如何调用它。分两个部分:一是可执行文件本身,二是它的配置文件
在通常情况下,每个pam文件都会包含以下四个组成部分
auth:用户认证。用来确保这个用户到底是不是他自己。一程序怎么才知道是不是他自己呢?他手上有自己的用户名和密码,并且是正确的密码。account:账号有效性。有些时候你密码输成功了,并不代表你实用性。因为账号可能被管理员封了,账号可能过期了,账号可能在黑名单里。这些都有可能,就算密码对了有怎么样?依旧不能用。
password:专门为修改密码准备的。这些所有跟password相关的设置,都是教用户怎么样才能够采取修改一个符合系统管理员要求的密码。
session:会话管理。这种情况非常的少。最经典的就是pam.limit.so。有了session控制之后,就可以让用户在登录的一刹那间控制他可以访问系统的那些资源。比如说可以控制他cpu使用量,控制内存使用量,控制打开的最大文件数等等一系列的系统参数。
6、简单控制值
required:当前这个检查,必须符合pam的检查要求,如果pam的模块在这里检查失败了,整体都是失败的。但是required并不 退出立即pam的检查,还会依次往后继续检查其他模块。这是它的设计思想。sufficient:如果pam检查这个位置,从来都没有fail过,它在满足了当前检查项,立马通过。但是前提条件,你没fail的,整体是不会受影响,是不会标记为一个fail。
optional:顺便检查一下,通不通过完全没什么意见。
include:函数调用。比如说你经常要用到的模块,我把它写成一个类似模板的东西,然后其他的控制文件都可以包含进去。
示例 :
auth include system-auth #常情况下,在整个linux界,就这么两个核心的档案规范文件:第一个:system-auth #它比较倾向于控制本地认证。
第二个:password-auth #它比较倾向于控制远程认证。
所以一旦在系统中要检查或审计登录等等,要照顾这两个地方都要才行。
pam_cracklib.so
想保证检查这个密码的强壮性,一直都是这个特殊的模块。就是因为它,才可以在登录的时候弹出一个密码登陆框,然后检查到底是成功还是失败等等。示例:password requisite pam_cracklib.so retry=3 type=
这个模块几乎linux界和unix默认的密码有效性,密码强壮性检查的默认模块。
cat /etc/pam.d/sshd | grep ^password
cat /etc/pam.d/login | grep ^password
cat /etc/pam.d/gdm | grep ^password
看到以上远程sshd登录,login终端登录,图形化登录,在这里面都可以发现system-auth,
password-auth等踪影
cracklib.so
是系统中默认的密码强壮性检查的要求,password本身就是用来控制密码的更改的。
try_first_pass #就是通常不能让用户区反复的去输同样的密码。用户密码之前,
都要先输入自己本身的密码,再输新密码等等,所以这一条一定要加上,不然就会多次问到你当前的密码
retry=3 #就是给三次机会输入正确的密码
type= #就是在改密码的时候给你个提示,用来给管理员或者你登录时
候一个友好信息的。这是默认行为
这个认证模块中,有以下几个选项是我们可以操作的
第一个:minlen 最小的长度
第二个:lcredit 小写;ucredit 大写;dcredit 数字;ocredit 其他的字符。所以密码肯定是由这四类组成的。
第三个:minclass 。也就是第二个中四个可以出现几级类,如果是minclass=3,那么就至少出现三类
模拟实验 :
vim /etc/pam.d/system-auth #(本地登录)
=>password
requisite
pam_cracklib.so try_first_pass retry=3 type=joinlabs dcredit=-
1 ucredit=-1 ocredit=-1 minlen=10
vim /etc/pam.d/password-auth # (远程登录)
=>password
requisite
pam_cracklib.so try_first_pass retry=3 type=joinlabs dcredit=-
1 ucredit=-1 ocredit=-1 minlen=10
su - alex
#去尝试修改密码。会发现必须要输入一个大写字母,还有一个数字,密码长度必
须要10位才行
7、监控登录,登录审计
pam_tally2.so它的应用场合就是反暴力登录的。比如你的登录体系不断被别人尝试登录,如果你的密码安全性不够,迟早被他算出来密码,这就叫暴力破解。这个东西叫做pam_tally2.so,第2代的tally软件,可以帮助我们在它输错几次密码后锁一段时间,这就是个很好的保障,防止别人不断的暴力破解。当然,相反的副作用很明显,它可以做dos攻击,搞得你用户有正常的密码都不让你进。好坏参半。
8、用户账户设置
在session部分,经常用的一些模块。pam_limits.so 这个模块在/etc/security。这个模块专门是控制我们与session相关的pam控制文件。limits.so这个模块是非常非常常用的,而且功能非常多。maxlogins:用户可以在系统中可以登录几个相信相同的账号。如果等于1,那么用户只能登陆1次
cpu:最多能使用cpu多少。一个用户发动一个进程,最多能使用多少。如果超过限制就会被kill
as:虚存地址数。对于科学级应用的话,非常大。
nproc:用户最多起多少进程
示例1:限制一个student用户行为
vim /etc/security/limits.conf=>student hard cpu 1 #限制student用户最长限制1分钟。
测试:su - student
ulimit #可以查看自己相关的session控制。“cpu time”,这选项就是它可以修改的值,用户可以改小,但是不能改大
示例查看:除了root以外,其他用户最大能开启的进程数量是1024的警告,但是用户可以自己调。毕竟是软限。
cat /etc/security/limis.d/90-nproc.conf
=> * soft nproc 1024
=>root soft nproc unlimited
ulimit -u 2048 #用户自己可以改。毕竟是软限制
第四节
1、系统审计
2、日志的过滤
1、日志系统
在默认情况下,日志是不接收来自udp或tcp协议的日志提交的,而是本地一个imuxsock的日志回收。高速的IO通道是本地的。如果想支持UDP可将 $UDPServer Run 514 这一行开打。
server端配置
vim /etc/rsyslog.conf
=>$ModLoad imudp #如果想支持UDP日志回收,将这两个开关打开。
=>$UDPServerRun 514 #默认侦听514
=>$ModLoad imudp
=>$InputTCPServerRun #打开此处,就是支持tcp。支持tcp的重要原因是如果用打道ssl或者tls的时候,就逼着你走到tcp上。早期其实只用udp,现在tcp也支持了。
这就是服务端的配置。
client端配置
vim /etc/rsyslog.conf #客户端必须要侦听端口,因为它是发起者。
=>###RULES### #从RULES开始,归根了我们什么类型的日志,达到什么样的严重程度,发送到什么位置。
=>mail* -/var/log/maillog #“-”代表这不是立即存盘的。mail日志有两个特点,一个是量大,你发送一封mail的时候,它的日志是很全的,尤其是不能正常发
出的时候,日志量会很大。第二它不是那么的关键,就算丢条它一百来条日志,那也就丢了。不是致命的。所以可以写个“-”号,这样可以提高机器的I/O的性能。
=>user.* @@server1.example.com #有用户自发发出来的日志,尤其是用来做测试
的。将其甩到远端去。@@是tcp协议,@是UDP协议。也可以写端口号,或者不写。
测试:server:tailf -n 0 /var/log/messege
client : logger "test from client"
logger是一个简单的日志生成器。如果不加选项,他就会以user等级发送日志
2、日志的过滤
刚刚已经在主配置文件中,日志服务器默认已经安装类型或者严重程度过滤了。还要用到一种第二类过滤方法,这种方法的发明是解决一个非常重要的问题。既然收远端的日志,如果全部进入到了一个服务器的系统之中,那么这个文件会很大,第二点就是你想在里面做日志挖掘的时候很困难,因为量太大,性能也不好。如果你能在第一时间这不同服务器的日志呢,拆分成不同的文件放在var/log下,那么就会变得很轻松。我们通过第二类过滤来实现。所以呢,分别本地日志文件和远端日志文件是非常有必要的。
:property:formhost, formhost-ip, msg, and hostname
#property是要发出来的比较类型。可以formhost主机名称进行识别,formhost-ip根据对方过来的ip地址进行分类。msg是消息类容过滤,甚至可以根据消息中的hostname来进行比较。比较的方法有:字符串比较,等于比较,或者是正则表达式等等,以及你比较的值
示例:将client的日志甩到一个特定的文件,或者文件夹之中。
这些信息记不太全,可以在/usr/share/doc/rsyslog-5.8.10/中有众多的配置文件,和过滤相关的只有rsyslog_conf_filter.html。可以用火狐软件打开。
vim /etc/rsyslog.d/server1.conf #在服务器端书写一个新的配置文件,随便建立一个.conf文件
=>:formhost, isequal, "server11.example.com"
/var/log/server11.log #来自于哪台主机, 等于,"来自于server11主机的时候" , 甩到
/var/log/server11.log中
=>:formhost, isequal, "server11.example.com" ~ #这个日志提交完之后忽略掉,后面不要再有任何的该日志消息出来
tailf /var/log/server11.log #如果你的语法是正确的,重启后立即会有这个文件。
测试:server11:logger “Test ”
server1上就可以看到相关的日子消息了。但是两类日志分流,都会经过message,所以用~将其忽略掉。只在server11.log中出现。
第五节
1、系统审计
2、审计日志中作简单的搜索
3、用户按键的审计
1、系统审计
系统中有服务叫做auditd。其实这套体系是由kernel完成的,所以不是说服务把系统做的这么漂亮,需要kernel支持才可以。它是一个用户层的部件,它还有另外一些组件在用户层是看不到的。在kernel中实现了一个审计子系统,再加上用户称的auditd来配合起来使用。
如果你的系统中把auditd服务给关闭了,kernel的审计子系统如果生成了一个消息,它会进入到rsyslog中。进入到日志服务中后,那么这个消息就在message里面。
kernel出了审计消息,要么进入audit.log,要么进入/var/log/message。
如果服务器没有额外的配置,那么这个审计系统之做一些敏感信息类的捕获,尤其是认证类的,授权类的,删除添加用户,改身份,su,sudo等等,它都会审计一下。另外一类就是selinux的消息,这是一套新的日志体系
示例:less /var/log/audit/audit.log
2、审计日志中作简单的搜索
ausearch
-i #在搜索的时候尽量给我出来一些解释。
-a #uid
-k #自定义关键字
ausearch -a 29327 -i #搜索uid号为29327的,-i会尽量翻译下,时间戳正常了
示例2:假如你想关心一个重要的配置文件,可以对它进行审计。
touch /etc/test
man auditctl
vim /etc/audit/audit.rules
-> -w /tmp/test -p rwa
-k joinlabs #监控这个文件读写,改权限。加个关键字joinlabs
servcie auditd restart
tailf -n0 /var/log/audit/audit.log
cat /tmp/test #查看一下这个文件,就会有审计日志出现
ausearch -k joinlabs #可以直接搜索关键字
3、用户按键的审计
通常情况下,超级用户发出的命令,或者说数据库管理员发出的命令都是很重要的,有时候他敲错了,做了一个不该做的事情,我们需要审查的时候,就需要拿出审计系统来,看他到底敲了什么键。
示例:监控超级用户的键盘输入
vim /etc/pam.d/system-auth
=>session required pam_tty_audit.so enable=root #只监控root用户。如果不监控谁,用disable=
vim /etc/pam.d/password-auth
=>session required pam_tty_audit.so enable=root
service auditd restart
aureport #可以查看audit最近发生的类型。这些都是用户可能引起敏感的信息。它其实是把audit.log日志读出来然后在里面分类
aureport --tty #查看tty的使用情况
watch -n1 aureport --tty #一秒刷新一次。目前没有类似终端发生的行为
ssh root@server1,由超级用户重新发起一个会话,输入几条命令,同时观察日志
第六节
1、Firewall
1、Firewall
1)首先允许本地回环网卡通信。
2)需要一些ping响应
3)自己发出的链接总要回来
4)开启ssh访问
5)允许来自世界各地的vnc访问
6)允许本地CUPS协议打印机的访问
7)允许世界各地使用的ftp服务访问
8)除了以上允许的,其他的都拒绝。拒绝之外,我还要把它们甩进日志中去。方便以后审计
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#我主动发的链接要求通过。
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state -st
-A INPUT -m state --state NEW -s 192.168.0.0/24 -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -s 192.168.0.0/24 -m tcp --dport 631 -j ACCEPT
-A INPUT -m state --state NEW -m tcp --dport 5900 -j ACCEPT
-A INPUT -m state --state NEW - -m tcp --dport 21 -j ACCEPT
-A INPUT -j LOG
-A INPUT -j REJECT --reject-with icmp-host-prohibited
这篇关于Linux 服务器安全(基本)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-18git仓库有更新,jenkins 自动触发拉代码怎么配置的?-icode9专业技术文章分享
- 2024-12-18Jenkins webhook 方式怎么配置指定的分支?-icode9专业技术文章分享
- 2024-12-13Linux C++项目实战入门教程
- 2024-12-13Linux C++编程项目实战入门教程
- 2024-12-11Linux部署Scrapy教程:新手入门指南
- 2024-12-11怎么将在本地创建的 Maven 仓库迁移到 Linux 服务器上?-icode9专业技术文章分享
- 2024-12-10Linux常用命令
- 2024-12-06谁看谁服! Linux 创始人对于进程和线程的理解是…
- 2024-12-04操作系统教程:新手入门及初级技巧详解
- 2024-12-04操作系统入门:新手必学指南