Linux--系统安全及应用

文章目录

  • 前言
  • 账号安全基本措施
    • 系统账号清理
    • 密码安全控制
    • 命令历史限制
    • 终端自动注销
    • 用户切换与限制
      • su 命令 -切换用户
      • 限制使用su命令的用户
    • Linux中的PAM安全认证
      • su命令的安全隐患
      • PAM安全认证
      • PAM安全认证流程
    • 使用sudo机制提升权限
      • su命令的缺点
      • sudo命令的用途及用法
      • 配置sudo授权
  • 系统引导和登录控制
    • 开关机安全控制
      • 调整BIOS引导设置
      • GRUB限制
    • 终端登录安全控制
      • 限制root只在安全终端登录
      • 禁止普通用户登录
  • 端口扫描
    • NMAP
      • nmap实验

前言

随着Linux的日益普及,越来越多的管理员开始进入到系统中为任务创建网络连接或服务器,这也使得Linux成为许多攻击者的选择。由于缺乏有关安全相关技术,系统管理员面临许多安全问题。学习Linux安全知识将有助于创建一个更安全的Linux系统。

  • 作为一种开放源代码的操作系统,Linux服务器以其安全,高效和稳定的显著优势得以广泛应用
  • 可以从账号安全控制,系统引导和登录控制的角度控制Linux系统的安全优化
  • 还可以使用基于Linux系统环境的弱口令检测,网络扫描等安全工具,查找隐患,及时采取有针对性的防护措施

账号安全基本措施

系统账号清理

  • 将非登录用户的Shelli设为/sbin/nologin
    在Linux系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而产生的其他大量账号
    除了root之外,其他大量账号只是用来维护系统运作,启动或保持服务进程,一般是不允许登录的,也称为非登录用户
    常见的非登录用户包括bin,daemon,adm,lp,mail,nobody,apache,mysql,dbus,ftp,gdm,haldaemon等。
    为了确保系统安全,这些用户的登录shell通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动
[root@localhost ~]# grep "/sbin/nologin$" /etc/passwd		#查看非登录用户
[root@localhost ~]# grep "bash$" /etc/passwd				#查看当前可以登录的用户

在这里插入图片描述
Linux--系统安全及应用_第1张图片

  • 锁定长期不使用的账号
    对于长期不用的用户账号,若无法确定是否删除,可以暂时将其锁定,(passwd,usermod命令都可以用来锁定和解锁账号)
[root@localhost ~]# passwd -l lisi (或者 usermod -L lisi)		#锁定用户lisi
[root@localhost ~]# usermod -U lisi (或者 passwd -u lisi)		#解锁用户lisi
[root@localhost ~]# passwd -S lisi								#查看账号状态

Linux--系统安全及应用_第2张图片

  • 删除无用的账号
    在非登录用户中,还有一部分是很少用到的,如news,uucp,games,gopher等,这些用户可视为冗余账号,可以直接删除
    此外,还有一些随着应用程序安装的用户账号,若程序卸载以后未能自动删除,需要人为手动删除
  • 锁定账号文件passwd、shadow
    如果服务器中的用户账号已经固定,不在进行更改,还可以采取锁定账号配置文件的方法
    使用chattr命令,分别结合“+i”“-i”选项来锁定,解锁文件,使用lsattr命令可以查看文件锁定情况
  • 锁定长期不使用的账号
chattr命令基本格式
chattr +i [目标文件]     #锁定目标文件
chattr -i [目标文件]     #解锁目标文件
lsattr  [目标文件]       #查看目标文件
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow		#锁定文件
[root@localhost ~]# Isattr /etc/passwd /etc/shadow			#查看状态
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow       #解锁文件
[root@localhost ~]# Isattr /etc/passwd /etc/shadow
---------------- /etc/passwd
---------------- /etc/shadow

在这里插入图片描述

密码安全控制

  • 设置密码有效期
    在不安全的网络环境中,为了降低密码被猜出或者被暴力破解的风险,用户应养成定期修改密码的习惯,避免长期使用同一个密码。
    管理员可以在服务器端限制用户密码的最大有效天数
    对于密码已经过期的用户,登录时将被要求重新设置密码,否则拒绝登录
chage 命令用于设置密码的时限
例如,将密码的有效期设置为30天
[root@localhost ~]# vi /et/login.defs     #适用于新建用户
[root@localhost ~]# chage -M 30 lisi	  #适用于已有用户

Linux--系统安全及应用_第3张图片
Linux--系统安全及应用_第4张图片

  • 要求用户下次登录时修改密码
[root@localhost ~]# chage -d 0 zhangsan   #强制在下次登录时更改密码

Linux--系统安全及应用_第5张图片

命令历史限制

  • 减少记录的命令条数
    bash终端环境中,历史命令的记录条数由变量HISTSIZE控制,默认为1000条。通过修改/etc/profile文件中的HISTSIZE变量值,可以影响系统中 的所有用户
例如:设置最多只记录200条历史命令
[root@localhost ~]# vi /etc/profile			#对于未创建的用户,使用此命令修改配置文件
将其中的HISTSIZE=1000,修改为HISTSIZE=200		
[root@localhost ~]# export HISTSIZE=200		#该命令适用于当前用户,及时成效
每当编辑完/etc/profile文件后,都需要使用命令source /etc/profile或者换重启使之生效
  • 注销时自动清空命令历史
    修改用户宿主目录中的~/.bash_logout文件,添加清空历史命令的操作语句。即:当用户注销(退出已登录的bash环境)时,所记录的历史命令将自动清空

终端自动注销

  • 闲置20秒后自动注销
[root@localhost ~]# vi /etc/profile			#适用于新登录的用户
export TMOUT=20								#闲置时间设置为20s
[root@localhost ~]# source /etc/profile		#使设置生效
[root@localhost ~]# export TMOUT=20			#适用于当前用户

用户切换与限制

大多数Linux服务器并不建议用户直接以root用户进行登录。
一方面可以大大减少因误操作而导致的破坏
另一方面也降低了特权密码在不安全的网络中被泄露的风险

su ,sudo 两种命令
su命令主要用来切换用户
sudo命令用来提升执行权限

su 命令 -切换用户

  • 使用su命令,可以切换为指定的另一个用户,从而具有该用户的所有权限
    切换时需要对目标用户的密码进行验证(从root用户切换为其他用户不需要)
su命令基本格式(Substitute User,切换用户)
su - 目标用户
[root@localhost ~]# su - lisi		#从root切换到其他用户不需要输入密码
[lisi@localhost ~]$ su - root		#从其他用户切换到root用户需要输入密码

限制使用su命令的用户

将允许使用su命令的用户加入wheel组
Linux--系统安全及应用_第6张图片
启用pam_wheel认证模块
Linux--系统安全及应用_第7张图片
启用pam_wheel认证以后,未加入到wheel组内的其他用户将无法使用su命令

Linux中的PAM安全认证

su命令的安全隐患

默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户的登录密码,带来风险借助pam_wheel认证模块,可以实现指定允许的用户使用su命令

PAM安全认证

PAM(Pluggable Authentication Modules),是Linux系统可插拔认证模块,是一种高效而且灵活便利的用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式。
PAM提供了对所有服务进行认证的中央机制,适用于login,远程登录
telnet,rlogin.fsh,ftp),su 等应用程序中。系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略。

  • PAM认证原理如下所示:
  • PAM认证- - 般遵循的顺序: Service (服务) - →PAM (配置文件) -→pam *.so
  • PAM认证首先要确定哪一项服务,
    然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/ib/security下)进行安全认证
  • 用户访问服务器的时候,服务器的某-一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。
    查看某个程序是否支持PAM认证,可以用Is 命令进行查看
查看su是否支持PAM模块认证
[root@localhost ~]# ls /etc/pam.d | grep su

查看su的PAM配置文件:cat /etc/pam.d/su
每一行都是一个独立的认证过程
每一行可以区分为三个字段(认证类型,控制类型,PAM模块及其参数)

PAM安全认证流程

控制类型也称做Control Flags,用于PAM验证类型的返回结果
Linux--系统安全及应用_第8张图片
1.required验证失败时仍然继续,但返回Fail
2.requisite验证失败则立即结束整个验证过程,返回Fail
3.sufficient验证成功则立即返回,不再继续,否则忽略结果并继续
4.optional不用于验证,只显示信息(通常用于session类型)

使用sudo机制提升权限

su命令的缺点

  • 用过su命令可以非常方便的切换为另一个用户,但前提条件是必须知道目标用户的登录密码
  • 对于生产环境中的Linux服务器,每多一个人知道特权密码,其安全风险也就增加一分

sudo命令的用途及用法

用途:以其他用户身份(如root) 执行授权的命令
用法:sudo 授权命令

配置sudo授权

visudo 或者 vi /etc/sudoers :sudo机制的配置文件为/etc/sudoers,文件的默认权限是440,需要使用专门的visudo工具进行编辑。若使用vi编辑,保存时必须执行“:w!”命令强制操作,否则系统将提示为只读文件而拒绝保存

配置文件/etc/sudoers中,授权记录的基本配置格式
用户 主机名列表 = 命令程序列表
命令程序列表是绝对列表

例如:
[root@localhost ~]# visudo
zhangsan		localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route		#表示张三用户在本地主机拥有以下权限 (/sbin下的所有权限,除了/sbin/ifconfig,除了/sbin/route权限)

*:通配符号
!:取反符号
 %:代表组

Linux--系统安全及应用_第9张图片

系统引导和登录控制

开关机安全控制

调整BIOS引导设置

  • 将第一引导设备设为当前系统所在硬盘
  • 禁止从其他设备(光盘,U盘,网络)引导系统
  • 将安全级别设为setup,并设置管理员密码

GRUB限制

  • 使用grub2-mkpasswd-pbkdf2生成秘钥
  • 修改/etc/grub.d/00_header文件中,添加密码记录
  • 生成新的grub.cfg配置文件
    Linux--系统安全及应用_第10张图片
    Linux--系统安全及应用_第11张图片

终端登录安全控制

限制root只在安全终端登录

安全终端配置:/etc/securetty
Linux--系统安全及应用_第12张图片

禁止普通用户登录

建立/etc/nologin文件
删除nologin文件或重启后即恢复正常
在这里插入图片描述
一般做维护的时候使用(只有root用户可以登录,其他用户不可登录

例如
[root@localhost ~]# touch /etc/nologin
此时,再用其他用户登录,即便密码输入正确也会提示密码没有奏效,从而无法登录,只有root用户可以登录
[root@localhost ~]#rm -rf /etc/nologin
此时,将之前的登录限制取消之后,其他用户也可以正常登录了

端口扫描

NMAP

  • 一款强大的网络扫描,安全检测工具

可以探测局域网中那些主机在线,或者某台主机中开了那些端口

  • NMAP的扫描语法

nmap [扫描类型] [选项] <扫描目标…>

  • 常用的扫描类型
    -sS,-sT,-sF,-sU,-sP,-P0
    -sT:TCP端口
    -sU:UDP端口
    -sP:ping

nmap实验

联网安装nmap
[root@localhost run]# yum -y install nmap
Linux--系统安全及应用_第13张图片

你可能感兴趣的:(Linux,linux)