相信通过上一篇的分享,已经架设了属于自己的Linux,就这样得空客就安全了吗?当然不是,今天我们一起看看Linux本省得一些安全策略。对了,关于Linux的内容是系列内容,希望大家可以从0开始搭建,然后按步骤操作,后续涉及的集群,大数据,可视化等一些的学习都会基于这个环境,所以mark住没问题。
1 Linux安全策略
在生产环境几乎都是Linux,为了保护我们程序,防止我们功能被破坏,会采取一些列的措施,所以提前学习和了解这些策略势必也会为后面的学习打下不错的基础
常见的攻击类型有哪些呢
- 密码暴力破解
目的比较明确,通过爆破工具破解用户的密码,进入服务器获取资源进行系统的破坏。我们可以想象一个字典,字典足够强大,逐一匹配就可以找到服务器的密码
- 拒绝服务攻击
通过大量的请求来占用足够多的服务资源,使得网络阻塞或者服务器死机,导致Linuxf服务器无法给用户提供服务。常见的拒绝服务攻击有Dos与分布式拒绝服务攻击。黑客通常是利用伪装的源地址或者控制其他的目标机器发出大量的连接请求,由于服务器无法在短时间接受这么多情趣,从而导致系统资源耗尽,服务挂起
- 应用程序漏洞攻击
这种情况一般是黑客通过类似扫描工具扫描服务器可能存在的漏洞,然后根据漏洞渗入到服务器进行相应的破坏,常见比如sql注入,漏洞攻击,网页权限漏洞等
如何进行防范呢
彻底的防范是不可能,但是可以尽全力的防范,通常需要一系列的安全设备和规则进行约束
- 网络传输的安全
常见的网络安全设备有硬件防火墙,网络入侵检测,路由器,交换机等。防火墙对进出网络的主机进行规则匹配,尽量保证合法的主机进入网络,可是有些攻击行为是在防火墙允许的范围内,这个时候防火墙就无所能及了,就需要诸如IDS设备来辅助。IDS会对系统的整体运行情况进行监控,尽全力发现攻击企图,从而保证网络系统资源的机密性,完整性和可用性
- 操作系统的安全
操作系统安全即服务器本身的一些安全设置和优化。比如系统内核的定期升级,自带软件的更新,配置iptable规则,关闭无关服务等
很多常见的病毒程序,防火墙很难阻止,此时如果系统存在杀毒工具就可以直接破掉第一道防线
- 应用软件安全
应用软件安全顾名思义即部署在服务器中应用的安全策略配置,比如我们会对数据库进行配置防止非规则内的连接等
再比如sql注入,跨站脚本都属于应用软件安全漏洞造成的攻击入侵
那么常用的安全策略有哪些呢
- 软件及时更新
这一块我估计很多人都不会在意,毕竟需要重新安装比较麻烦,但是很多时候需要更新,是因为有漏洞了,意味着Hack利用这些漏洞就很容易进你的系统,所以需要尤其注意
- 端口服务
一般一个有效的连接,即客户端和服务端端口的建立过程。而端口在系统中也是有一些规则的
在Linux操作系统中,系统定义了65535个端口,这些端口又分为两个部分,按照1024分割,分为只有root用户才能启用的端口和客户端的端口,对于只有root用户才能启动的端口:
也就是0-1023的端口,需要root才能启用,因为这些端口预留给一些预设的服务使用,不经常使用的端口最好关闭,比如ftp的21端口,25的mail服务端口
客户端的端口
1024端口以上的通常给客户端软件使用,由软件随机分配,对于大于1024的端口不受root的限制,比如默认的3306就是数据库的默认端口
如何查看端口的状态呢?
通过netstat -tunl查看
从上图可以发现启用了22端口,这是默认就打开了,我的远程工具XSHELL即就是连接的这个端口
如何查看链接的状态呢
netstat -tun
如果查看端口对应的什么服务,执行什么命令呢
netstat -anlp
服务与端口是什么关系
我们可能经常听到什么服务对应什么端口,他们两是一一对应的关心,没有服务运行即没有端口对应,那是不是这些服务都必须使用默认的端口呢
当然不是,大部分的软件都会有配置文件,根据相应的配置就好了
一定要记得关闭不必要的服务
在Linux中,服务的启动和关闭管理有两种方式,第一种方式是直接启动脚本,在centos7之前是在/etc/init.d目录下的服务启动和关闭。在centos7以后,使用systemctl工具来完成,这个在后续的系统管理会详细给大家说说。
如果要启动sshd服务,可以使用下面的命令
systemctl restart sshd
另外一种情况是通过超级服务管理一些常用的网络服务,比如centos的超级服务xinetd,这个服务可以管理的服务如vsftpd等,我们可以通过/etc/init.d/xinted restart来完成服务的重启
在Linux中,通过chkconfig命令或者systemctl判断服务是否开启
chkconfig --list sushi
我们怎么知道关闭哪些不必要的服务呢
这里列出一个表格
还有一些其他的安全设置
- 禁止系统响应任何从外部来的ping请求
ping通过用来检查网络的连通性,如果能够ping通,攻击者就知道这是一个活跃的机器,那么怎么禁止ping请求呢
#echo “1” >/proc/sys/net/ipv4/icmp_echo_ignore_all
- 删除不必要的用户组
删除系统不必要的用户 userdel username
删除系统不必要的组 groupdel groupname
- 关闭selinux
首先它是内核强制访问控制安全系统,,由于它和现在的linux应用程序和内核模块有一些兼容问题,如果要查看是否已启用
getenforce
如果要关闭selinux,修改下面的文件
vi /etc/sysconfig/selinux
说说防火墙
防火墙有硬件防火墙和软件防火墙,在这里主要介绍软件防火墙。根据工作方式的不同又分为封包式防火墙和应用层网关防火墙
iptable是linux中内嵌好的防火墙软件,集成在内核中,因此效率非常高的。它可以通过你设置一些封包过滤规则来定义什么数据包可以接受,什么数据包剔除
iptable的使用环境
用户组
Linux是一个真实且多用户多任务的操作系统,意味着张三王五李四都可以同时使用同一个Linux操作系统,但是他们三儿不能互相访问各自的内容,不同的用户有不同的权限,每个用户在权限范围内完成不同的任务,Linux正是通过这样的权限划分和管理实现多用户的运行机制
Linux用户的分类是怎么样的呢
- 超级用户
超级用户,默认为root,具有最高的权限
- 普通用户
只能对自己目录下的文件进行访问
- 虚拟用户
最大的特点是不能访问登录系统,他们的存在主要是为了方便系统管理,满足相关系统进程对文件属性的要求
用户和组
用户通过向Linux申请用户访问系统,这样可以合理的利用和控制系统,同时也可以帮助用户组织文件,达到提供对用户文件的安全性保护的目的
什么是用户组呢
有时候需要协同办公,假设一共10个人,让这10个人对文件的操作具有相同的权限,需要给每个用户授权,这样岂不是太麻烦了,Linux就使用组的概念,让属于组的用户都具有相同的权限
用户和组的关系
用户和组的关系可以是一对一,也可以是一对多设置多对多
- 一对一:这个组就只有一个用户
- 一对多:这个用户存在于多个组中,具有多个组的共同权限
- 多对1:多个用户存在一个组,具有相同权限
- 多对多:多个用户存在于多个组
用户的配置文件在哪儿?
- 用户和组相关配置文件
- /etc/passwd
这个文件是系统用户配置文件,起格式如下
用户名:密码:用户标识号:组标识号:注释描述:主目录:默认shell
看看/etc/passwd是什么样子
详细说说这些都是什么意思
- 用户名:用户账户
- 密码:为了保护用户隐私,这里面存放的都是一个特殊字符,加密的用户密码存放在/etc/shadow中
- 用户标识号:用户的UID,每个用户都会有一个UID且唯一,0是超级用户的标识,1-99由系统保留,
作为普通用户,uid从500开始,用户的权限和角色也是根据uid而定,如果把普通用户的uid设置为0,将拥有root权限,这个非常的危险
- 组标识号:组的gid,记录用户所在组,对应于/etc/group文件的一条记录
- 主目录:用户登录默认所处的目录
- 默认shell:默认使用的用户解析器,用户的所有操作都是通过shell传递给内核的
为了保证用户的密码安全,使用了/etc/shadow
- 用户名:与/etc/passwd的用户名相同的含义
- 加密密码:存放的是加密以后的用户密码字符串,如果字段是* !等,对应的用户不能登录系统
- 最后一次的修改时间:表示从某个时间起,到用户最近一次修改密码的间隔天数
- 最小间隔时间:两次修改密码之间的最小时间间隔
- 最大时间间隔:两次修改密码之间的最大时间间隔
- 警告时间:系统开始警告到密码正式失效的时间
- 不活动时间:表示用户密码作废以后多少天,系统禁止这个用户
- 失效时间:用户的账号生存期
/etc/group是干啥的
- 组名:用户组的名称,组名不能重复
- 密码:存放用户组加密后密码字串,默认设置在/etc/gshadow文件中,而这里的x代替
- 组标识号:gid与/etc/passwd中组标识号对应
- 组内用户列表:多个用户使用逗号分隔
/etc/default/useradd文件
为什么我们通过useradd命令创建一个用户后,默认在/home下且使用的shell是/bin/bash
看看/etc/default/useradd就明白了
/etc/default/useradd定义了新建用户的一些默认属性,比如用户的主目录,使用shell等,通过更改增额文件就可以改变新建用户的默认属性值
用户管理工具
- groupadd命令
groupadd用来新建用户组,其语法格式如下所示
groupadd -g gid group
这里的选项-g-------指定新建用户组的gid,这个gid必须唯一
-o:一般和-g同时使用,表示新用有的一直y户组gid和系统已y
此时创建一个lan_group1用户组和lan——group2用户组
group -g 1110 lan_group1
Group -g 1120 lan_group2
More /etc/group| grep lan_group1
上图
- groupdel命令
用于删除用户组
groupdel 名称
比如删除lan_group1
groupdel lan_group1
案例
添加一个用户xiaolan,指定所属的主用户组linux,附加用户组linuxlan
同时指定用户的默认主目录为/opt/lam
useradd -g
文件权限
通过ls命令就可以查看文件以及目录的权限信息,如果使用ls -al则haikeyi
查看隐藏文件
上图
为了更加详细的了解上述图每一行的意思,我们取出一行
第一列由10个字符组成,其中分为4个部分,拆解如下
- 文档类型,其中d表示目录,l表示软连接。当为-表示是文件,为c表示字符设备文件
接下来的三个部分,3个字符为一组,r-读,w-写,x-执行
- 第二个部分user部分,是对文档所有者权限的设定,rwx表示用户对xxx有读写执行的所有权
- group部分,是文档所属用户组权限的设定
- other部分是对文档所有者之外的其他用户的权限设定
第二列表示文档的连接数,表示有多少文件执行一个inode
- 第三列表示文档所属的用户和用户组
- 第四列是文档的大小
- 第五列表示最后一次修改的日期
- 第六列是文档名称
这些权限如何去修改呢
通过chown改变文件和目录的权限
使用方法:chown -R y 用户名称 文件 目录
案例
chmod
chmod用于改变文件或目录的访问权限。使用方法有两种,一种是字母和操作符表达式的字符设定法,另一种是包含数字的数字设定法
先来看第一种—字符设定法
语法:chmod [who] [+ | - | =] [mode] 文件名
下面详细说一下各个选项的含义
-
who表示操作的对象,可以是下面字母中的任何一个
- 如果是u,则代表用户,即文件或者目录的所有者
- 如果为g,则代表用户组,即文件或目录所属组
- 如果为o,表示其他用户,
- 如果为a,表示所有用户
-
操作符有哪些
- “+”表示添加某个权限
- “-”表示取消某个权限
- “=”表示赋予给定可执行的权限,其中可以是可读,可写,可执行
-
mode表示可以执行的权限,其中可以是r,w,x以及他们的组合
-
文件名可以是以空格分开的文件列表,支持通配符
案例
数字设定法,即上面的r用数字4代替,w用2代替,x用1代替,所以
案例