Linux系统安全

Linux系统概述

1、历史

Linux操作系统诞生于1991年,它是Unix的一种典型克隆系统。它是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统,继承了Unix以网络为核心的设计是想,也是一个性能稳定的多用户网络操作系统。由Linus Torvalds设计,在热心的支持者帮助下不断开发完善。开源、开放、免费是Linux的魅力所在,Linux还具有良好的可移植性。

2、内核简介

Linux是一个一体化内核系统。

“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一个完整的操作系统。一套基于Linux内核的完整操作系统叫做Linux操作系统,或是GNU/Linux。设备驱动程序开源完全访问硬件,可以在系统运行时直接装载或卸载。

内核是一个操作系统最重要的部分,Linux内核目前也是在不断的更新。因为内核也是会有很多漏洞和缺陷的,出于安全性内核版本应该引起注意。

Linux内核编号形式:主版本号.次版本号.修订版本号

较小的内核隐患和安全补丁被赋予了次小数点版本号,如2.6.11.1

在Linux的终端中,查看本机内核信息的命令为:

uname -a

加载内核模块的命令为insmod filename

删除内核模块的命令为rmmod filename

其中,filename为用户准备好了需要加入内核的模块文件,查看系统已经加载的内核模块如下图(比较多图里只有一部分)

3、发行版本

发行版本是真的挺多的,各种各样的,比较著名的3个:Fedora、SUSE、Debian。著名的Ubuntu就是Debian的下游,CentOS和Oracle Linux则是Fedora的下游。我用的Kali Linux就是基于Debian发展而来的。

4、文件系统

Linux和Windows下的文件的组织结构不用,Linux不使用磁盘分区符号来访问文件系统,而是整个文件系统表示成树状结构,Linux系统没增加一个文件系统都会将其加入到这个树中。

操作系统文件结构的开始,只有一个单独的顶级目录结构,叫根目录。所有的一切都是从根开始,用“/”表示,并且延申到子目录。

DOS/Windows系统下的文件系统都是按照磁盘分区的概念分类,目录存在分区上。而Linux系统则是通过“挂载“方式把所有分区都放置在"根"下的各个目录里。我虚拟机里的Kali Linux的文件结构可以看下面。

还可以用tree命令来更加直观的显示文件目录的树状结构如下图。

由于Ubuntu系统不自带tree命令,我的kali Linux也没有tree命令,所以可以使用apt-get install tree(kali linux)进行安装或sudo apt-get install tree进行安装。

OpenSSH安全配置

OpenSSH是安全Shell协议族(SSH)的一个免费版本。SSH协议族可以用来进行远程控件,或在计算机之间传送文件。而实现此功能的传统方式,如Telnet、RCP都是极不安全的,并且使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,来实现机密数据,并且代替原来的类似服务。

SSHD是一个典型的独立的守护进程,OpenSSH服务可以通过/etc/ssh/sshd_config文件配置。

1、禁止Root用户登录

只允许普通用户登录,设置如下。

#Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes

2、限制SSH验证重试次数

超过5次Socket连接会断开,设置如下。

MaxAuthTries 5

3、禁止证书登录

证书登录很安全,但是正常用户和权限用户都可以给系统安装一个证书到.ssh/authorized-keys文件里,随时进入系统。对此可以禁用证书登录

PubkeyAuthenticationno

4、使用证书替代密码认证

这个与上面讲的正好相反,只允许使用key文件登录

PasswordAuthenticationno

5、图形窗口客户端记忆密码的问题

当使用XShell、Xftp、WinSCP、SecureCRT、SecureFX等软件登录时,该软件都提供记住密码的功能,使下一吃在登录就可以不输入密码进入系统。这是很方便但是在设备丢失后,就会产生巨大的风险。可以进行如下设置。

ChallengeResponseAuthentication yes

6、禁止SSH端口映射

AllowTcpForwarding no

7、IP地址限制

如果只希望特定IP地址的用户登录主机,如果只允许192.168.1.1和192.168.1.2访问登录,可以对/etc/host.allow进行修改:

sshd:192.168.1.1 192.168.1.2

如果希望禁止所有人访问主机,对/etc/hosts.deny修改,如下:

sshd:ALL

Shell安全

1、.history文件

通过~/.bash_history文件记录系统管理员的操作记录,定制.bash_history格式。

(1)以Root用户登录服务器,在/etc/profile.d/下新建一个文件history_command。

(2)编辑刚才创建的文件,写入内容。

export HISTFILE=$HOME/.bash_history
export HISTSIZE=1200
export HISTFILESIZE=1200
export HISTCONTROL=ignoredups
export HISTTIMEFORMAT=”'whoami' %F %T “
shopt -s histappend
typeset -r HISTTIMEFORMAT

(3)使用source/etc/profile.c/history_command,使其生效。

2、执行权限

以数据库为例,从安全角度考虑,需要进行如下的更改。

#chown mysql:mysql/usr/bin/mysql*
#chown 700 /usr/bin/mysql*

mysql用户是DBA专用用户,其他用户将不能执行mysql等命令。

权限管理和控制

1、权限查看

Linux系统中每一个文件和目录都有访问许可权限,通过其来确定谁可以以何种方式访问和操作文件或者目录。

文件或目录的访问权限分为只读、只写、可执行3种。文件创建时,文件所有者自动拥有对该文件的读、写和可执行权限。

-rwxrw-rw- 1 root root 24064 1月 1410:58 qq.exe为例子

看最左边,-表示不具有该权限,r为只读,w为写,x为可执行。第一个字符如果时-则表示这是一个非目录文件,如果是d,表示是一个目录,后面的字符每3个为一组,分别表示属主、组用户、其他用户的访问权限。可以看出qq.exe是一个普通文件,属主可以读、写、可执行,而组用户只有读和写权限,其他用户也是只有读和写权限。同时,qq.exe文件的所有者是root用户,属于root组用户。

2、管理控制

可以使用chown命令来改变文件的所属用户和组,将指定文件的拥有者改为指定的用户或组。

命令格式:chown[选项]用户或组文件,命令选项为一下选项:

-R:递归改变指定目录及其下面的所有子目录和文件拥有者

-v:显示chown命令所做的工作

使用chown命令修改用户和组的如下:

使用chmod命令修改文件权限可以灵活更多,它支持数字设定权限,其中,读权限r对应数字4,写权限w对应2,执行权限x对应1,chmod使用如下

+x就是对所有的用户添加执行权限,使用u+x,指定文件的所有者增加执行权限,同理还用o+x,g+x。

数字设定权限方法如下:
777对应所有rwx权限,444对应所有的r权限。
chmod 777 b后得到如下结果

为了安全应该要尽量避免产生权限为777的文件,毕竟所有人都可以读、写、执行将会带来较大的安全威胁和风险。

文件系统安全

Linux对于文件权限管理是完善和全面的,但是用户通常会在权限的设置上产生批漏,
下面对于文件系统的权限和安全做进一步说明。

1.锁定系统重要文件

系统运维人员有时候可能会遇到通过Root用户都不能修改或删除某个文件的情况,产生
这种情况的大部分原因可能是这个文件被锁定了。在Linux下锁定文件的命令是chattr,通过
这个命令可以修改ext2、ext3、ext4文件系统下文件属性,但是这个命令必须有超级用户Root
来执行。和这个命令对应的命令是lsattr,这个命令用来查询文件属性。
通过chatr命令修改文件或目录的文件属性能够提高系统的安全性,下面简单介绍下
chattr和lsattr两个命令的用法。
lsattr用来查询文件属性,用法比较简单,其语法格式如下。
Isattr [-RVadIpv] [文件]
常用参数如下所示。
-a:列出目录中的所有文件,包括以.开头的文件。
-d:显示指定目录的属性。
-R:以递归的方式列出目录下所有文件及子目录以及属性值。
-v:显示文件或目录版本。
chattr命令的语法格式如下。
chattr [-RV] [-v version] [mode]文件或目录。
主要参数含义如下。
-R:递归修改所有的文件及子目录。
-V:详细显示修改内容,并打印输出。
其中,mode部分用来控制文件的属性,常用参数如下所示。
+:在原有参数设定基础上,追加参数。
-:在原有参数设定基础上,移除参数。
=:更新为指定参数。

a:即append,设定该参数后,只能向文件中添加数据,而不能删除。常用于服务器日志安全文件,只有Root用户才能设置这个属性。
c:即compresse 设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
i:即immutable, 设定文件不能被修改、 删除、重命名、设定链接等, 同时不能写入或
新增内容。 这个参数对于文件系统的安全设置有极大帮助。
s:安全删除文件或目录,即文件被删除后硬盘空间被全部收回。
u:与s参数相反,当设定为u时,系统会保留其数据块以便以后能够恢复删除这个文件。
这些参数中,最常用到的是a和i,参数a常用于服务器日志文件安全设定,而参数i更为严
格,不允许对文件进行任何操作,即使是Root用户。
在Linux系统中,如果一个用户以Root的权限登录或某个进程以Root的权限运行,那么它的使用权限就不再有任何的限制了。因此,攻击者通过远程或本地攻击手段获得了系统的Root权限将是一个灾难。 在这种情况下,文件系统将是保护系统安全的最后一道防线, 合理的属性设置可以最大限度地减小攻击者对系统的破坏程度,通过chattr命令锁定系统些重要的文件或目录,是保护文件系统安全最直接、最有效的手段。
对一些重要的目录和文件可以加上“i” 属性,常见的文件和目录如下所示。

root@kali:~/ chattr -R +i /bin /boot /lib /sbin
root@kali:~/ chattr -R +I /usr/bin /usr/include /usr/lib /usr/sbin
root@kali:~/ chattr +i/etc/passwd
root@kali:~/ chattr +i/etc/shadow
root@kali:~/ chattr +i/etc/hosts
root@kali:~/ chattr +i/ect/resolv.conf
root@kali:~/ chattr +i/etc/fstab
root@kali:~/ chattr +i/ect/sudoers

对一些重要的日志文件可以加上“a”属性,如下所示。

root@kali:~/ chattr +a /var/log/messages
root@kali:~/ chattr +a /var/log/wtmp

对重要的文件进行加锁,虽然能够提高服务器的安全性,但是也会带来一些不便。 例如,在软件的安装、升级可能需要去掉有关目录和文件的immutable属性和append-only属性,同时,对日志文件设置了append-only属性,可能会使日志轮换(logrotate)无法进行。因此,在使用chattr命令前,需要结合服务器的应用环境来权衡是否需要设置immutable属性和append-only属性。

另外,虽然通过chattr命令修改文件属性能够提高文件系统的安全性,但是它并不适合所有的目录。chattr 命令不能保护/、/dev、 /tmp、 /var 等目录。
根目录不能有不可修改属性,因为如果根目录具有不可修改属性,那么系统根本无法工作: /dev在启动时,syslog 需要删除并重新建立/dev/log套接字设备,如果设置了不可修改属性,那么可能出问题;/tmp目录会有很多应用程序和系统程序需要在这个目录下建立临时文件,也不能设置不可修改属性; /var 是系统和程序的日志目录,如果设置为不可修改属性,那么系统写日志将无法进行,所以也不能通过chattr 命令保护。

2.文件权限检查和修改

系统中如果有不正确的权限设置,可能会危及整个系统的安全,下面列举查找系统不安全权限的方法。

(1)查找系统中任何用户都有写权限的文件或目录,查找文件,如下所示。

root@kali:~# find/ -type f perm -2 -0 perm -20 | xargs ls -al

查找目录,如下所示。

root@kali:~# find / -type d -perm -2 -o perm -20 | xargs 1s -ld

(2)查找系统中所有含“s”位的程序。

find/-type f-perm -4000 -o -perm -2000 -print | xargs ls -al

含有“s”位权限的程序对系统安全威胁很大,通过查找系统中所有具有“s”位权限的程序,可以把某些不必要的“s"位程序去掉,这样可以防止用户滥用权限或提升权限的可能性。
(3)检查系统中所有suid及sgid文件。

find/ -user root -perm -2000 -print -exec md5sum {} \;
find/ -user root -perm -4000 -print -exec md5sum {} \;

将检查的结果保存到文件中,可在以后的系统检查中作为参考。
(4)检查系统中没有属主的文件

find/ -nouser -o -nogroup

没有属主的孤儿文件比较危险,往往成为黑客利用的工具,因此,找到这些文件后,要么删除掉,要么修改文件的属主,使其处于安全状态。

iptables配置

iptables是用来设置、维护和检查Linux内核的IP分组过滤规则的。作为Linux下的一款防火墙,它的功能十分强大,它有3个表,每个表内有规则链。
(1) filter 是默认的表,包含了内建的链INPUT (处理进入的分组)、FORWARD (处理通过的分组)和OUTPUT (处理本地生成的分组)。
(2)nat表被查询时表示遇到了产生新的连接的分组,由3个内建的链构成:PREROUTING(修改到来的分组)、OUIPUT (修改路由之前本地的分组) POSTROUTING (修改准备出去的分组)。
(3 )mangle表用来对指定的分组进行修改。它有2个内建规则: PREROUTING (修改路由之前进入的分组)和OUTPUT (修改路由之前本地的分组)。下面简单介绍ipables的常用配置。

1.查看iptables规则

查看当前的iptables策略,使用iptables -L命令,默认查看的是flter表的内容,如下。

2、设置chain策略

对于filter表,默认的chain策略为ACCEPT, 可以通过以下命令修改chain 的策略。

root@kali:~# iptables -P INPUT DROP
root@kali:~# iptables -P FORWARD DROP
root@kali:~# iptbales -P OUTPUT DROP

以上命令配置将接收、转发和发出分组均丢弃,施行比较严格的分组管理。由于接收和
发分组均被设置为丢弃,当进一步配置其他规则的时候,需要注意针对INPUT和OUTPUT
分别配置,当然,如果信任本机器往外发分组,上面第 3条规则可不必配置。

3.清空已有规则

可以用以下规则来清空已有的规则。

root@kali:~# iptables -F

4.网口转发规则

对于用作防火墙或网关的服务器,一个网口连接到公网,其他网口的分组转发到该网口
实现内网向公网通信,假设ethO连接内网,ethl 连接公网,配置规则如下。

root@kali:~# iptables -A FORWARD -i eth0 -0 ethl -j ACCEPT

5.端口转发规则

命令将888端口的分组转发到22端口,因而通过888端口也可进行SSH连接。

root@kali:~# iptables -t nat A PREROUTING ptep d 192 168.1.1 dport 888 1 DNAT -to 192. 168.1.1:22

6、DoS攻击防范

利用拓展模块limit,还可以配置iptables规则,实现DoS攻击防范,如下:

root@kali:~# iptables -A INPUT -p tcp -dport 80 -m limit -limit 25/minute --limit-burst 100 -j ACCEPT

–limit 25/minute 指示每分钟限制最大连接数为25 。

–limit-burst 100 指示当总连接数超过100时,启动limit/minute限制。

常见的安全策略

Linux操作系统下有如下常用的安全策略。
密码长度、session超时时间、删除不用的账号和组,限制Root用户直接Telnet或rlogin、
SSHD登录。
检查是否存在除Root之外UID为0的用户,确保Root用户的系统路径中不包含父目录,
在非必要的情况下,不应包含组权限为777的目录。
检查操作系统Linux用户umask设置,检查重要目录和文件的权限,禁止除Root之外的
用户su操作,查找系统中任何人都有写权限的目录。
查找系统中没有属主的文件,查找系统中的隐藏文件,判断日志与审计是否合规,登录
超时设置,禁用不必要的服务。

参考文献

[1]网络空间安全实战基础.陈铁民.北京.2018.2

Linux系统安全基础相关推荐

  1. Linux系统网络基础

    Linux系统网络基础 网络管理 什么是网络 网络就是把分布在不同地理位置上的主机,通过传输介质(网线.卫星等)连接起来,通过网络协议实现主机之间数据传输与共享的目的. 网络的特点 分布式 跨区域 数 ...

  2. Linux系统进阶-基础IO

    Linux系统进阶-基础IO 文章目录 Linux系统进阶-基础IO C语言中的文件接口 对文件进行写入 对文件进行读取 什么是当前路径 默认打开的三个流 stdout & stderr 系统 ...

  3. 【Linux系统】基础总结

    我不太清楚运维部门具体是做什么的,就接触过一点点运维部门! 也就是是知道他们负责管理服务器,管理网络,管理项目部署 偶尔自己需要部署,不得不接触一些linux命令.简单总结一些基础 linux系统发展 ...

  4. Linux系统:基础指令

    基础指令 使用Linux系统的第一步就是先熟悉Linux的各种指令,之后才能谈Linux的系统编程和网络编程. 1. pwd 指令 $ pwd # 显示用户当前所在目录 /home/yyx/test ...

  5. Linux系统:基础IO

    基础IO 1. 内存文件 1.1 理解内存文件 文件是内容和属性的集合,文件不仅有内容,还有各种属性.任何文件操作都可以分为对文件内容的操作和对文件属性的操作. 文件没被打开时是放在磁盘上的,想要打开 ...

  6. L022-老男孩Linux高端运维课程-linux系统网络基础知识及配置实战精讲

    01001100:第2,5,6位为1对应的数是64,8,4.那么它对应的十进制数是64+8+4=76 224=11100000(二进制数)方法:224-128=96,96-64=32,32-32=0. ...

  7. 2021-04-04:linux第1天:linux系统的基础介绍及学习

    1.Linux学习方向 linux运维工程师:是维护linux环境服务器的 linux嵌入式工程师:下面做驱动开发和linux嵌入式系统下面做开发 linux下面做开发项目:一般是写java程序,放在 ...

  8. Linux系统常用基础命令

    文章目录 一.开关机命令 二.基础操作命令 1.1 ls命令 1.2 pwd命令 1.3 mkdir 创建目录命令 1.4 rm(删除文件 支持通配符) 1.5 touch(创建文件) 1.6 查看文 ...

  9. Linux系统入门基础学习(一)

    1.虚拟机的使用方法    对于刚入门的小白来说,使用虚拟机学习Linux不失为明智之选. (1)首先登陆Linux主机,单击右键,选择Open in Terminal (2)通过输入命令来控制虚拟机 ...

最新文章

  1. 【Java】 Thinking in Java 4.8 练习9
  2. Linux内核如何管理内存
  3. Netbeans自定义mode
  4. java数据同步处理_Java如何处理多线程的数据同步问题
  5. 2.6.24及以上版本内核裁剪后启动黑屏的解决办法
  6. 怎样在MySQL中显示中文,而不出现乱码?
  7. 微信无连接服务器1.104,微信成语猜猜看太子少师答案汇总 太子少师1-104关攻略...
  8. 华为麒麟1020处理器曝光:性能提升50%,5nm制程!Mate 40有望成为首发机型
  9. matlab教程曲线拟合,matlab 曲线拟合
  10. (十二)洞悉linux下的Netfilteriptables:iptables命令行工具源码解析【下】
  11. 《信号与系统学习笔记》—信号与系统(四)
  12. CBoard框架使用总结一
  13. 清华大学计算机通识选修,清华大学外语通识选修课调查分析-20210720010045.docx-原创力文档...
  14. 编译一个java源程序文件,会产生多少个字节码文件
  15. 【经验】VMware|windows更新20H2版本后VMware虚拟机无法开启(禁用Device guard)
  16. 重构26-Remove Double Negative(去掉双重否定)
  17. 上万条个性签名与个性网名ACCESS数据库
  18. nacivate premium 12.1.12 安装包加破解注册机 亲测可用
  19. 百度地图标注不能清除问题(点聚合)
  20. Windows 无法访问指定设备,路径或文件。你可能没有合适的权限访问这个项目。

热门文章

  1. 【机器学习实战】构建/绘制决策树(ID3/C4.5)
  2. EXCEL完成一个柱形图与折线图组合图表
  3. 小米5S_2015711_官方线刷包_救砖包_解账户锁
  4. 手把手教你制作智能桌宠(小可爱哦!)
  5. PAKDD2020:阿里巴巴算法大赛冠军思路
  6. WeGame聊天室采集
  7. 三菱m70 m80系统解密 三菱m80机床到期解锁
  8. 六、Dubbo协议模块原理源码解析
  9. Windows上安装Nessus
  10. 【Python学习笔记】3. Python3 基础语法