Linux系统安全及应用

发布时间:2024年01月06日

目录

一、账号安全控制

1. 系统账号清理

1.1?将用户设置为无法登录

1.2 锁定用户?

1.3 删除用户

1.4 锁定配置文件

2. 密码安全控制

2.1 设置密码规则

3. 命令历史?

4. 切换用户

4.1 su和su -

4.2?限制使用su命令的用户 ?

5. PAM安全认证?

5.1 概述

5.2 pam相关文件

5.3 pam工作原理

5.4?专用配置文件/etc/pam.d/ 格式

5.5 shell模块?

5.6?securetty模块

5.7?pam_nologin.so 模块?

5.8?limit?

6. sudo??

6.1 概述

6.2 特性

6.3 提权操作

6.4 别名?

6.5 子目录

二、系统引导和登录控制

1. 开关机安全控制

1.1 调整 BIOS引导设置

1.2?禁止 Ctrl + Alt + Del 快捷键重启

1.3 grup加密

2. 禁止root用户登录

2.1 禁止通过ssh协议登录root

2.2 修改root用户shell类型?

三、弱口令检测、端口扫描

1. 弱口令检测——John the Ripper

2. 网络扫描NMAP


一、账号安全控制

1. 系统账号清理

1.1?将用户设置为无法登录

shell——/sbin/nologin却比较特殊,所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源,如程序用户。

[root@localhost ~]# tail -1 /etc/passwd            #查看fql的属性
fql:x:1000:1000:fql:/home/fql:/bin/bash
[root@localhost ~]# usermod -s /sbin/nologin fql  
#修改fql的shell属性 
#或者chsh -s /sbin/nologin fql也可以修改
[root@localhost ~]# tail -1 /etc/passwd        
fql:x:1000:1000:fql:/home/fql:/sbin/nologin   
[root@localhost ~]# su fql
This account is currently not available.           #此帐户当前不可用

1.2 锁定用户?

[root@localhost ~]# passwd -l fql
锁定用户 fql 的密码 。
passwd: 操作成功

[root@localhost ~]# usermod -L fql
[zhangsan@localhost root]$ su fql
密码:
su: 鉴定故障

1.3 删除用户

[root@localhost ~]# userdel -r zhangsan  #-r表是家目录
[root@localhost ~]# id zhangsan
id: zhangsan: no such user

1.4 锁定配置文件

?chatter

  • -a 让文件或目录仅供附加用途。只能追加
  • -i 不得任意更动文件或目录。
[root@localhost ~]# chattr +i /etc/passwd  #锁定文件
[root@localhost ~]# lsattr /etc/passwd     #查看特殊权限
----i----------- /etc/passwd
[root@localhost ~]# useradd zhangsan
useradd:无法打开 /etc/passwd
[root@localhost ~]# chattr -i /etc/passwd  #解锁

2. 密码安全控制

2.1 设置密码规则

对于新建用户,可以修改/etc/login.defs文件里的内容来设置密码规则

[root@localhost ~]# vim /etc/login.defs  
#######################################
PASS_MAX_DAYS   99999         
#密码有效期,99999 是自 1970 年 1 月 1 日起密码有效的天数,相当于 273 年,可理解为密码始终有效。
PASS_MIN_DAYS   0
#表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0。
PASS_MIN_LEN    5
#指定密码的最小长度,默认不小于 5 位,但是现在用户登录时验证已经被 PAM 模块取代,所以这个选项并不生效。
PASS_WARN_AGE   7
#指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为 7 天。

?对于已有用户可以使用chage命令

chage [选项] 用户名
  • -m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
  • -M:密码保持有效的最大天数。
  • -w:用户密码到期前,提前收到警告信息的天数。
  • -E:帐号到期的日期。过了这天,此帐号将不可用。
  • -d:上一次更改的日期。
  • -i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
  • -l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
[root@localhost ~]# chage -d 0 fql
#强制fql下一次登录一定修改密码(密码符合复杂性要求)

3. 命令历史?

Shell 环境的命令历史机制有利有弊。当用户的历史命令操作过程输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。通 过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。

[root@localhost ~]# history | wc -l      #统计历史命令数
208
[root@localhost ~]# echo $HISTSIZE       #最大1000历史命令条数
1000
[root@localhost ~]# history -c | wc -l   #清除历史命令(临时)
0

[root@localhost ~]# vim /etc/profile     #对所有用户生效
####################################
export HISTSIZE=200                      
#设置最多只记录200条历史命令,export设置环境变量,HISTSIZE历史命令记录条数
export TMOUT=60
#设置超时时间,用户闲置后注销
[root@localhost ~]# source /etc/profile  #重新加载系统环境变量文件/etc/profile

[root@localhost ~]# vim .bashrc
###############################
echo " " > ~/.bash_history              
#开机之前先运行:将空格重定向至.bash_history文件中,即清空,仅对当前用户生效

?~/.bashrc,~/.bash_profile:开机之前先运行文件里的命令

~/.bash_logout:关机之前先运行文件里的命令

4. 切换用户

4.1 su和su -

su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令。su与su -,存在区别:su仅切换一部分,未切环境变量,这会导致某些命令运行出现问题或错误,如法使用service 命令;su -切的彻底,将使用目标用户的登录shell环境。超管切换普通用户不需要密码。

4.2?限制使用su命令的用户 ?

在pam模块中, 主要有pam_ rootok.so和pam_ wheel.so两个模块组合限制用户使用su命令。

[root@localhost ~]# vim /etc/pam.d/su

  • 默认情况下第一行开启、第二行注释:root使用su切换普通用户就不需要输入密码,允许所有用户间使用su命令进行切换
  • 两行都注释:允许所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码
  • 开启两行:只有root用户和wheel组内的用户才可以使用su命令,whell组是超级管理员的组
  • 第一行注释、第二行开启:表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令,root属于root组

这里模拟第四种情况:?第一行注释、第二行开启

[root@localhost ~]# gpasswd -a fql wheel
正在将用户“fql”加入到“wheel”组中
[root@localhost ~]# vim /etc/pam.d/su

[root@localhost ~]# su zhangsan
密码:
su: 拒绝权限         
[fql@localhost ~]$ su zhangsan 
密码:
[zhangsan@localhost fql]$             #wheel组成员fql可以使用su命令

5. PAM安全认证?

5.1 概述

PAM:Pluggable Authentication Modules,插件式的验证模块,Sun公司于1995 年开发的一种与认证相关的通用框架机制。PAM 只关注如何为服务验证用户的API,通过提供一些动态链接库和一套统一的API接口,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序一种认证框架,自身不做认证。

5.2 pam相关文件

  • 包名:pam
  • 模块文件目录:/usr/lib64/security/*.so(存放功能模块)
  • 配置文件目录:/etc/pam.d/(存放配置文件)
  • 特定模块相关的设置文件:/etc/security/(功能强大的复杂的配置文件)
  • man 8 模块名:可以查看帮助
  • 应用程序调用PAM模块的配置文件
  1. 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
  2. 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
  3. 注意:如/etc/pam.d存在,/etc/pam.conf将失效,即子模块配置优先级高

5.3 pam工作原理

PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so;PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证。

当用户来访问某一程序的时候,如果这个启用了pam模块,会先去读取配置文件,然后按照配置文件调用模块进行操作。?

5.4?专用配置文件/etc/pam.d/ 格式

  • type:指模块类型,即功能
  • control:PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
  • module-path:用来指明本模块对应的程序文件的路径名
  • Arguments:用来传递给该模块的参数

control控制类型 :

  • required:一票否决,结果失败,但是会继续验证
  • requisite:一票否决,如果失败会立即结束验证,反馈失败;如果成功继续往下走
  • sufficient:验证成功则返回,不再继续,否则忽略结果并继续
  • optional:可选项,后面的模块可能没有

5.5 shell模块?

主要功能是检查有效shell,pam_shells.so模块只允许规定的shell类型通过,使在/etc/shells 文件中存在的类型通过。

案例:不允许使用/bin/csh的用户本地登录(借用su模块添加相关配置)

[root@localhost ~]# usermod -s /bin/csh zhangsan  #修改zhangsan用户shell类型
[root@localhost ~]# vim /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
#/bin/csh                                         #去掉该类型
[root@localhost ~]# su zhangsan
密码:
su: 鉴定故障                                       #zhangsan无法登录

5.6?securetty模块

默认情况下centos是不允许用户使用telnet协议(密码明文传输,不安全)远程登录的,该模块功能为只允许root用户在/etc/securetty列出的安全终端上登陆

案例:CentOS 7允许root在telnet登陆

服务端
[root@localhost ~]# yum install -y telnet-server.x86_64  #安装telnet服务端
[root@localhost ~]# systemctl start telnet.socket        #启动服务
[root@localhost ~]# vim /etc/pam.d/remote                #修改pam模块配置
或者在/etc/securetty文件中加入
root
[root@localhost ~]# systemctl stop firewalld.service     #关闭防火墙
[root@localhost ~]# setenforce 0

客户端
[root@localhost ~]# yum install -y telnet             #安装telnet客户端
[root@localhost ~]# telnet 192.168.190.100            #通过telnet协议远程登录服务端
Trying 192.168.190.100... 
Connected to 192.168.190.100.
Escape character is '^]'.

Kernel 3.10.0-1160.el7.x86_64 on an x86_64
localhost login: root
Password: 
Last login: Sat Jan  6 15:47:48 from 192.168.190.1
[root@localhost ~]#                                   #登录成功

5.7?pam_nologin.so 模块?

如果/etc/nologin文件存在,将导致非root用户不能登陆,当该用户登陆时,会显示/etc/nologin文件内容,并拒绝登陆。可运用在维护场景下。默认此模块可以对ssh等登录有效,但不影响su登录。

[root@localhost ~]# touch /etc/nologin
[root@localhost ~]# echo "系统维护中" > /etc/nologin
[root@localhost ~]# su fql
[fql@localhost root]$ 

5.8?limit?

ulimit是linux shell的内置命令,它具有一套参数集,用于对shell进程及其子进程进行资源限制。 每个进程有自己的limits值,使用ulimit进行修改,立即生效。ulimit只影响shell进程及其子进程,用户登出后失效。可以在profile中加入ulimit的设置,变相的做到永久生效。其配置文件路径为/etc/security/limits.conf。

  • -H 设置硬件资源限制.
  • -S 设置软件资源限制.
  • -a 显示当前所有的资源限制.
  • -c size:设置core文件的最大值.单位:blocks
  • -d size:设置数据段的最大值.单位:kbytes
  • -f size:设置创建文件的最大值.单位:blocks
  • -l size:设置在内存中锁定进程的最大值.单位:kbytes
  • -m size:设置可以使用的常驻内存的最大值.单位:kbytes
  • -n size:设置内核可以同时打开的文件描述符的最大值.单位:n
  • -p size:设置管道缓冲区的最大值.单位:kbytes
  • -s size:设置堆栈的最大值.单位:kbytes
  • -t size:设置CPU使用时间的最大上限.单位:seconds
  • -u size:最大用户进程数
  • -v size:设置虚拟内存的最大值.单位:kbytes
  • unlimited 是一个特殊值,用于表示不限制?
[root@localhost ~]# ulimit -a       #可以看到系统的相关资源限制设置

案例:限制zhangsan用户最多可用打开三个进程,vim?/etc/security/limits.conf

[root@localhost ~]# su - zhangsan
'abrt-cli status' timed out
[zhangsan@localhost ~]$ bash
bash: fork: retry: 没有子进程
bash: fork: retry: 没有子进程
[root@localhost ~]# pgrep -l -u zhangsan    #显示zhangsan进程名
54852 bash
54887 bash
54888 bash

案例:修改tcp最大连接数?

[root@localhost ~]# ulimit -n 2000   #设置内核可以同时打开的文件描述符的最大值

[root@localhost ~]# ab -c1025 -n5000 http://192.168.190.100/  #压测
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.190.100 (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests

6. sudo??

6.1 概述

sudo即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。由于su root存在被暴力破解密码的风险,sudo使一般用户不需要知道超级用户的密码即可获得权限,提高了安全性。

6.2 特性

  • sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
  • sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
  • sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
  • sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440

6.3 提权操作

visudo:推荐使用,自带语法检查功能?

示例:?

[root@localhost ~]# visudo
zhangsan   ALL=(root)  /usr/bin/mount  /dev/sr0  /mnt/
[zhangsan@localhost ~]$ sudo mount /dev/sr0 /mnt/

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] zhangsan 的密码:
mount: /dev/sr0 写保护,将以只读方式挂载

6.4 别名?

格式: visudo

Host_Alias MYHOSTS = kgc,localhost
User_Alias MYUSERS = zhangsan,wangwu,lisi
Cmnd_Alias MYCMNDS = /sbin/*,!/sbin/reboot,!/sbin/poweroff,!/sbin/init,!/usr/bin/rm?

[zhangsan@localhost ~]$ sudo mount /dev/sr0 /mnt

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] zhangsan 的密码:
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# ping pc2
ping: pc2: 未知的名称或服务
[root@localhost ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.190.101 pc2                      #定义域名pc2
~
~
~
[root@localhost ~]# ping pc2
PING pc2 (192.168.190.101) 56(84) bytes of data.
64 bytes from pc2 (192.168.190.101): icmp_seq=1 ttl=64 time=1.21 ms
64 bytes from pc2 (192.168.190.101): icmp_seq=2 ttl=64 time=1.67 ms

6.5 子目录

子配置文件优先级大于主配置文件

[root@localhost ~]# vim /etc/sudoers.d/zhangsan         #配置子配置文件
zhangsan ALL= NOPASSWD:ALL                              #允许zhangsan不需要密码做任何操作
  
[zhangsan@localhost ~]$ mount | tail -1
tmpfs on /run/user/1001 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=186708k,mode=700,uid=1001,gid=1001)
[zhangsan@localhost ~]$ sudo mount /dev/sr0 /mnt        #普通用户可以根据子配置文件提权操作
mount: /dev/sr0 写保护,将以只读方式挂载

二、系统引导和登录控制

1. 开关机安全控制

1.1 调整 BIOS引导设置

  • 将第一优先引导设备 (First Boot Device) 设为当前系统所在磁盘。
  • 禁止从其他设备(如光盘、U盘、网络等)引导系统,对应的项设为“Disabled”
  • 将BIOS 的安全级别改为“setup”,并设置好管理密码,以防止未授权的修改

1.2?禁止 Ctrl + Alt + Del 快捷键重启

centos7中默认关闭,可以在/etc/inittab中查看

centos6中需要修改配置文件/etc/init/control-alt-delete.conf,注释后重启:

#start on control-alt-delete

#exec /sbin/shutdown -r now "Control-Alt-Delete pressed"

1.3 grup加密

由于GRUB 2负责引导linux系统,其作为系统中的第一道屏障的安全性非常重要,对GRUB 2进行加密可以实现安全性。

[root@localhost ~]# grub2-setpassword    #centos7可以直接设置密码
Enter password: 
Confirm password: 

通过上述配置,重新开机进入GRUB菜单时,直接按e键将无法修改引导参数若要获得编辑权限,必须先按p键并根据提示输入正确的GRUB密码。?

2. 禁止root用户登录

2.1 禁止通过ssh协议登录root

[root@localhost ~]# vim /etc/ssh/sshd_config

2.2 修改root用户shell类型?

[root@localhost ~]# usermod  -s /sbin/nologin root

三、弱口令检测、端口扫描

1. 弱口令检测——John the Ripper

[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
john-1.8.0.tar.gz  rh
[root@localhost opt]# tar xf john-1.8.0.tar.gz        #解压工具包
[root@localhost opt]# cd john-1.8.0/
[root@localhost john-1.8.0]# ls
doc  README  run  src
[root@localhost src]# cd run/
[root@localhost run]# ls
ascii.chr  digits.chr  john.conf  lm_ascii.chr  mailer  makechr  password.lst  relbench
[root@localhost run]#   yum install -y gcc gcc-c++ make    #安装软件编译工具
[root@localhost run]# cd /opt/john-1.8.0/src          #切换到src子目录
[root@localhost src]# make clean linux-x86-64         #进行编译安装
[root@localhost src]# cp /etc/shadow /opt/shadow.txt
[root@localhost src]# cd /opt/john-1.8.0/run
[root@localhost run]# ./john /opt/shadow.txt          #执行暴力破解
Loaded 3 password hashes with 3 different salts (crypt, generic crypt(3) [?/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
123              (fql)
123              (zhangsan)
123              (root)

2. 网络扫描NMAP

[root@localhost ~]# yum install -y nmap
[root@localhost ~]# nmap -sT 127.0.0.1
[root@localhost ~]# nmap -sU 127.0.0.1
#分别查看本机开放的TCP端口、UDP端口
[root@localhost ~]# nmap -p 80 192.168.190.0/24
#检测192.168.190.0/24网段有哪些主机提供HTTP服务
[root@localhost ~]# nmap -n -sP 192.168.190.0/24
#检测192.168.190.0/24网段有哪些存活主机
文章来源:https://blog.csdn.net/qq_64612585/article/details/135409609
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。