【安全运维】 linux 系统账户,网络,简易安全加固方案(第一部分),经测试可行...
前言
讲到linux系统账户的管理以及安全,就必须涉及 /etc/passwd /etc/shadow 这2个文件
这里以截图中文字说明的方式,来分析这2个文件的内容,并且给出一些实用的安全加固方案
注意,本文会持续更新,后续加入的内容都以直接上传截图的形式呈现,希望这样能更贴近实际运维环境工作者的需求。
《删除或锁定系统内建的用户账户,组账户》
系统内建的一些账户可能会让***变得更容易,因为这些账户扩大了系统的受***面。可以通过删除,锁定,或者注释的方法来加固账户安全。
操作涉及的文件有:
/etc/passwd
/etc/shadow
/etc/group
在修改之前,建议对上面3个文件作备份,而且尽量将文件副本存储在移动存储设备如U盘,移动硬盘,或者网络云盘上面。一旦系统出现和账户相关的故障,将副本替换原有的文件,这样就能恢复:
[root@centos6-5vm 桌面]# mkdir /backup [root@centos6-5vm 桌面]# cp -p /etc/passwd /backup/passwd_backup [root@centos6-5vm 桌面]# cp -p /etc/shadow /backup/shadow_backup [root@centos6-5vm 桌面]# cp -p /etc/group /backup/group_backup
将本地文件系统的 /backup/ 目录下的这三个副本存储到上面提及的各种存储介质中,记住,不要把鸡蛋放在同一个篮子里。
后续的修改都是对原有文件进行的,需要从副本还原时,执行下面操作:
[root@centos6-5vm 桌面]# mv /backup/passwd_backup /etc/passwd [root@centos6-5vm 桌面]# mv /backup/shadow_backup /etc/shadow [root@centos6-5vm 桌面]# mv /backup/group_backup /etc/group
这会替换掉存在错误配置的原有文件。举个例子来验证:
有了上面的测试保证,我们就可以继续进行和用户账户相关的安全设置:
批量删除 passwd 文件前4~10行的用户,这些通常很少用到:
[root@centos6-5vm 桌面]# for i in adm lp sync shutdown halt mail uucp operator games gopher ftp ;do userdel $i ;done
其末尾有个 ftp 账户,如果日后有搭建FTP服务器的需求,如vsftpd等,可以将该账户保留下来,不要删除。
要批量删除 group 文件中的多余用户组,使用和上面类似的单行shell脚本:
[root@centos6-5vm 桌面]# for i in adm lp mail news uucp games dip pppusers pop users slipusers ;do groupdel $i ;done
注意,取决于你的系统环境,有些用户和组或许初始就没有创建,这里仅是给出所有可能存在并且需要删除的用户和组。
如果你不想删除这些用户以及组,然后在必要时用备份文件来还原,那么至少,要在原来的文件中,注释掉,或者锁定这些账户和组。对于注释,大家都会,下面主要说一下如何锁定:
锁定: passwd -l [用户名]
解锁: passwd -u [用户名]
也可以把这个命令替换掉前面单行shell脚本中的 userdel命令,实现批量锁定和解锁。
最后提醒一下,处于锁定状态的账户,在 shadow 文件的第二列,会显示 !! ,表明其处于锁定状态,解锁后才能登录系统。
并且,只有根用户(root)才有权限执行锁定和解锁操作。
《关闭SELinux》
为什么要关闭 SELinux,也许你有过下述经验:
用某个普通用户,甚至是 root 用户,创建一个文件后,将该文件的所有者,所属主都设置为该用户,或者 root 用户,并且所有者和所属主都具备读,写,执行的权限(即 770 ),然后尝试向该文件写入数据,系统会提示
failed: permission denied
在检查所有与该文件相关的目录,其属主属组权限都正确后,还是不能读写,那么唯一的可能就是因为开启了 SELinux 而禁止读写;
SELinux 的初衷是,即便不安全的 Linux 主机在被***后,***者取得 root 权限,也不能随意读写删除数据,但是这里却阻碍了我们的工作,
(例如阻止我们用工具创建并写入某些服务进程的配置文件)
在刚安装完成系统的初次配置时刻,如果把SELinux设置成“开启”或着“强制”,可以通过如下办法来禁用:
[root@centos6-5vm 桌面]# ls -ail /etc/selinux/config 262465 -rw-r--r--. 1 root root 458 6月 25 16:58 /etc/selinux/config [root@centos6-5vm 桌面]# vim /etc/selinux/config
将 SELINUX= 一行后面的值设为 disable,保存退出vim,重启系统后设置永久生效。
在不修改 /etc/selinux/config 的前提下,要立即生效不重启(重启失效),执行下面命令:
该命令把SELlinux设置为 Permissive 模式,等于暂时关闭
[root@centos6-5vm 桌面]# setenforce 0
要暂时开启SELlinux(等于设置为 Enforcing 模式),执行下面命令:
[root@centos6-5vm 桌面]# setenforce 1
要查看当前的 SELinux 状态,执行下面命令:
[root@centos6-5vm 桌面]# getenforce
另外一种关闭的办法是:在GRUB(引导加载程序)的启动参数后添加 selinux=0
《修改内核参数加固系统》
默认情况下,对于其它机器发送的带icmp回显请求的ping数据包,centos返回带icmp回显应答的数据包,但是这种做法会导致安全隐患,因为网络上的恶意***者可以根据ping返回的信息判断目标机器是否在线上,进而采取后续的端口扫描等***。
因此,我们需要修改linux内核的TCP/IP协议堆栈的参数,禁止向其它机器返回icmp回显应答数据包,从而缓解基于主机发现的盲目ping踩点,至于为什么仅是“缓解”,后文我们会提到。
修改相关配置文件:
[root@centos6-5 桌面]# vim /etc/sysctl.conf
在文件中加入下面内容:
net.ipv4.icmp_echo_ignore_all = 1
根据该文件首行的注释说明,可以了解到,二进制值为1,表示激活某项特性;二进制值为0,表示禁用某项特性。上面就是激活“忽略所有远程的icmp回显请求”特性。
这种修改配置文件的方式,需要在重启系统后才能生效,但是对于在线上生产环境的服务器而言,是不能随意重启的,会导致业务中断,甚至丢失用户正在发送过来的数据。
因此,使用下面的命令来让对配置文件的修改立即生效:
[root@centos6-5 桌面]# sysctl -p
验证一下参数是否生效,下面执行测试的虽然是虚拟机,但是结果与真实环境的机器并无二致。
centos机器的IP地址是192.168.1.20
发送ping数据包的windows xp机器IP地址是192.168.1.30
可以看到,windows xp发送的4个ping数据包均返回了请求超时的结果,丢包率100%。
再以***测试业界著名的 BackTrack 5 平台进行检测:
当然,任何稍微有经验的***测试师或者***,都不会使用BT5的ping工具,因为它
不能正确反映出一个目标机器的安全性,相反,被广泛使用的Nmap,可以揭露出目标机器的安全级别仍旧有待加强:
上面的例子仅仅是抛砖引玉,希望各位大牛能举一反三。
另外提一下,对于 /etc/sysctl.conf 中的内核参数,如果是开启和关闭性质的,最好不要通过“注释”的方式来禁用或激活,因为这样要重启系统,比较麻烦,应该使用该文件官方推荐的办法:将其值设为0或1,保存退出vim,
然后以命令 sysctl -p 让配置立即生效即可。还是以上面为例子:
继续前面的话题:在没有打开防火墙的情况下,仅仅是在 /etc/sysctl.conf 中添加了禁止本机回应远程ping数据包的参数,那么***者可以直接以 Nmap 运行端口扫描来枚举服务版本。
因此,必须开启centos6.5的iptables防火墙。
下面我们将看到,只要开启iptables,采用其默认规则:允许所有入站方向对本地开启的服务监听端口的套接字发起的连接,那么即便没有关闭相应服务,Nmap 的扫描也不会得到可利用的信息:
首先,根据Nmap的扫描结果,我们知道本机上开放了 TCP 111,443,902等端口和相应服务(请参考上面截图),可以用 lsof 配合 netstat 命令确认:
[root@centos6-5 桌面]# lsof -i:111 [root@centos6-5 桌面]# netstat -antupeo | grep 111 [root@centos6-5 桌面]# lsof -i:902 [root@centos6-5 桌面]# netstat -antupeo | grep 902 [root@centos6-5 桌面]# lsof -i:443
注意,我们不使用 service [service] stop 和
ps -ef | grep [PID] && kill -9 [PID]
等类似命令来关闭服务和端口,而是直接启动 iptables 防火墙:
没有特别修改 iptables 防火墙的规则,使用默认策略的情况下,阻止了nmap的各种基于设置了TCP分段标志位的探测数据包:
对于那些直接曝露在因特网上对用户提供特定服务(HTTP/S,FTP等)的linux主机来讲:正确的,健壮的,可操作性强的 iptables 防火墙安全策略规则设置,显得非常关键;
但是现在多数组织企业使用自带防火墙的路由器
(例如各种类型的 cisco IOS防火墙,ASA,PIX防火墙,其它厂商的硬件防火墙,硬件负载均衡等设备),放置在用于公网访问的服务器前端,并且还划分出DMZ(所谓的非军事防御区),来与内网机器隔离,设置区域之间的安全级别。。。种种加固手段让在linux主机上开启 iptables的做法显得多余(除非内网已被***,开启iptables 可以防止***者的“横向”提权***),而且会影响服务器性能,因此,建议执行如下命令将其关闭:
[root@centos6-5 桌面]# service iptables stop && chkconfig --level 2345 iptables off
重启系统后,无论进入带x-window 的多用户模式,还是shell终端的多用户模式,
iptables都不会启动。
可以将下面这些内核参数添加到 /etc/sysctl.conf 文件中,需要强调的是,其中部分参数,我没有做过测试,建议慎用,部分对该参数的解释援引互联网上被广泛转载的文章,这里不对其滥用造成的,包括但不限于业务损失,数据丢失等,负任何法律上的责任。
和特定参数解释相关的背景知识,参考这篇博文:
http://shayi1983.blog.51cto.com/4681835/1434989
最好先在虚拟机环境中对这些参数进行性能,基准测试,仔细评估后,再把它添加到实际的生产服务器上:
net.ipv4.tcp_fin_timeout = 30
#当本地发送(发送端)带FIN标识位的TCP分段,要求关闭连接时,如果接收端还有数据要传给发送端,那么发送端应该保持开启用于接收对方数据的TCP通信管道(套接字)的时间(TCP有限状态机保持在FIN-WAIT-2,即处于半关闭状态的时间),
这里将其设置为 30秒,超时后,发送端将关闭连接,此时从对方传输过来的数据会丢失。
对于邮件服务器,这个值设为30秒是合适的,因为此时要求关闭的是服务器,而通常客户端不会有还未传完的数据要传,而且服务器要并发支持多个客户端,因此,在内核层面,只给每个客户端30秒的时间来处理尚未发送的数据包。
内核参数中与网络安全,系统优化相关的还有很多,后面会陆续介绍,作为运维人员,应该充分理解这些系统底层的参数是如何影响你的应用层业务,用户体验,服务器高可用,稳定,以及安全的,这对提升自身核心竞争力无疑有极大帮助。
转载于:https://blog.51cto.com/shayi1983/1437099
相关文章:

不用深度学习,怎么提取图像特征?
来源 | 小白学视觉头图 | 下载于ICphoto图像分类是数据科学中最热门的领域之一,在本文中,我们将分享一些将图像转换为特征向量的技术,可以在每个分类模型中使用。VATboxVATbox,作为n一个我们所暗示的,涉及增值税问题&a…

课程第五天内容《基础交换 五》
2019独角兽企业重金招聘Python工程师标准>>> 以太网/LAN(local area network )的相关概念: 问题: 信号传输距离有限; 解决方案: 中继器 - 放大电信号,延长信息的传输距离࿱…

C#综合揭秘——Entity Framework 并发处理详解
引言 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制。从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NET Entity Framework,.NET 都为并发控制提供好良好的支持方案。 并发处理方式一般分为乐观必并发与悲观必并发两种࿰…

@2021高考生,用 Python 分析专业“钱景”
来源 | 关于数据分析于可视化头图 | 下载于ICphoto2021年的高考在昨日拉开帷幕,十年的寒窗苦读,终于到了最后见分晓的时候了。在这么一场关键的考试当中,除了考试前努力奋斗,考场上认真答题,考后的志愿填报也是极其的重…

Linux下C语言的fgets与fputs
使用的是 CentOS gcc编译下面程序 显示warning: the gets function is dangerous and should not be used.问题出在程序中使用了 gets Linux 下gcc编译器不支持这个函数,解决办法是使用 fgets fgets()函数的基本用法为: fgets(char * s,int size,FILE * …

linux发行版的用户交互
1 cli,即command line interface 纯命令行的交互方式,该命令行界面是由shell提供的。 linux内核本身也自带了一个console,即linux console,它是基于frame buffer的。 cli的界面都是基于ncurses库开发的。 2 GUI,graphi…

C#中在应用程序和DLL使用消息
在C#中采用的是事件驱动方式,但在我们使用的过程中,有时候通过调用系统原有的消息,处理起来会比较简单一些,特别是在处理与DLL文件的交互时,的确是非常的方便。 在C#中使用自定义消息 在C#中使用自定义消息非常简单&…

倪光南院士:openEuler与全球开发者共同推动计算产业发展
今日,以“创造最好的OS,成就更好的我们”为主题的 openEuler Developer Day 2021在北京成功举行。本次大会由openEuler社区发起,产业组织专家、学者、企业领袖和开发者们围绕多样性计算、云原生全栈、全场景协同等技术方向共同探讨和创新。大…

jhello框架-ajax
2019独角兽企业重金招聘Python工程师标准>>> 现在的web开发没有ajax都没法活,所以在jhello中实现了一个简单的ajax交互,使用json作为载体。 在上篇《交互》中讲到一种交互的方式是把数据放入Model中,通过ModelAndView类返回到视图…

发微信模版消息换行用\n
发微信模版消息换行用\n发微信模版消息换行用\n发微信模版消息换行用\n发微信模版消息换行用\n发微信模版消息换行用\n转载于:https://blog.51cto.com/xuqin/1974131

二次元会让人脸识别失效吗?
来源 | PyTorch 开发者社区责编 | 寇雪芹头图 | 下载于ICphoto人脸识别也遇到坑了,识别得了三次元,却对二次元无效。迪士尼的技术团队,正在开发这一算法,以帮助动画制作者进行后期搜索。团队利用 PyTorch,效率得到很大…

基于第四层交换技术的负载均衡
摘 要 本文介绍了第四层交换技术的概念,技术原理以及如何使用第四层交换技术实现远程教育系统中的应用服务器负载均衡。 作者: 凌仲权,现就读于西安电子科技大学,2001级硕士研究生。主要的科研方向为计算机网络技术研究以及远程教…

開始Unity3D的学习之旅
前言:这个系列的文章纯属对自己学习的整理,非高手之作。但确实的记载了我作为一个没接触过3D游戏编程的大学生的心路历程。争取每周整理一次吧。之所以会開始学Unity3D,最基本的原因是由于在快放暑假的时候,我找了一家做iPhone游戏…

linux 定时任务crond
1.定时任务crond 1.1 crond是什么 crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。特殊需求:(秒级别)crond服务就无法搞定了,一般工作中写脚本守护进程执行。 为什么要使用crond定时任务: linux系…

用C#去除代码的SourceSafe管理
经常看一些的程序,有些一个解决方案带有多个项目,由于代码比较多,多人开发,所以好多vs.net下的工程是用source safe进行版本控制的。而用source safe进行版本控制需要局域网路径共享,因此好多项目换一台机器打开会出现…

用jarsigner对android apk进行签名
以前对apk重新打包签名都是用的apktool里面的Auto-sign 工具,后来发现有时候利用该工具对一些apk签名会失败,所以后来就使用 jarsigner这个工具,现记录一下这个工具的使用方法1 首先要生成一个自己的keyD:\>keytool -genkey -alias myKey…

利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换
作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上的疏散耦合,而非…

C#操作消息队列
public class QueueManage { /// /// 发送对象到队列中 /// /// 队列名称,因为队列名称在一个应用中应该不改变的,所以大家最好写在配置文件中 /// 要发出去的对象 public static void SendQueue(string QueuePath,MyBase.SmsQueue sq) { Syste…

2021《程序员》数字科技企业研发实力榜TOP50
互联网的盛行带来了众多数字科技企业的崛起,但如何客观地衡量每家企业的技术实力?研发投入、研发人才的数量和人才密度是关键指标。2021年5月,《程序员》根据相关企业披露的财报数据及市场调研数据,整理发布“2021数字科技企业研发实力榜TOP5…

eclipse中java项目转换为web项目
2019独角兽企业重金招聘Python工程师标准>>> 经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目,有过很多次经历,今天也有同事遇到类似问题,就把这个解决方法记下来吧&#x…

MySQL · 引擎介绍 · Sphinx源码剖析(三)
在本节中我会介绍Sphinx在构建索引之前做的一些事情,主要是从mysql拉取数据保存,然后分词排序保存到内存等等一系列的操作。下面是几个相关指令 sql_query \SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, \title, content \FROM doc…

C#给图片添加版权信息
现在越来越多的网站都喜欢将用户上传的图片加上网站的版权信息,不要以为那是用photoshop之类的图片处理软件加上去的,其实我们只要写一小段代码,就可以实现这个功能。 添加版权信息的原理其实挺简单:通过图片获取Graphics类的对象…

Python + 爬虫:可视化大屏帮你选粽子
来源 | 数据分析与统计学之美头图 | 下载于ICphoto端午节快要到了,旅游?回家?拜访亲友?少不了要带上粽子。那么,选择什么牌子的粽子呢?选择什么口味的粽子呢?选择什么价格区间呢?今年…

adviser vs mentor
研究生或博士生提到自己导师的时候是说adviser呢?还是mentor呢? 至少我认识一个Berkeley的博士是说adviser的。 另外,我的导师也是说adviser。 那还是说adviser吧……

T extends Serializable这是什么意思呢?看明白这个,你的问题就自然而然的明白了!...
1.转自:https://blog.csdn.net/liwenqiang758/article/details/8131185 自己动手丰衣足食!!! 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 这种参数类型可以用在类、接口和方法的创建中&a…

C#中switch语句注意
大家肯定对switch语句并不陌生,它能够让程序根据控制表达式的值,从多个动作中作出选择(从逻辑过程看,和多分支语句if-else有些相似)。在C和java中也有这一语句,不过在C#中,这一语句则有了些变化。先看下边一…

对Cost (%CPU) 粗略的理解
今天研究执行计划,看到执行计划里面有Cost (%CPU),我这边研究了一把,不知道对与否,拿出来晒晒在Oracle 10g中,Oracle 把CPU的cost也统计在执行计划中去了, 这和以前的8i,9i(9i其实已经开始了)有很大的不同。…

后疫情时代,RTC期待新的场景大爆发
整理 | 寇雪芹头图 | 下载于ICphoto出品 | AI 科技大本营(ID:rgznai100) 过去的一年中,新冠疫情悄然改变了社会发展和人们的生活,也助推了实时音视频(Real-Time Communication)技术的落地应用,数…

JS-DOM-元素节点
查看元素节点: 1、getElementById():通过 id 取到唯一节点;如果 id 重名,只能取到第一个 getElementByName(): 通过name属性 getElementByTagName(): 通过标签名 getElementByClassName(): 通过class名 获取元素节点时,一定要注意:获取节点的语句,必须在 DOM 渲染完成之后执行。…