Linux系统安全及应用

本文详细介绍了Linux系统账号安全、密码控制、命令历史限制、用户切换与提权、系统引导和登录控制等方面的安全策略。包括如何锁定账号、设置密码策略、限制命令历史记录、使用su和sudo命令、配置GRUB密码以及限制终端登录等措施,旨在提升系统的整体安全性。
摘要由CSDN通过智能技术生成

目录

一、账号安全基本设施

1、系统账号清理

1.1将非登录用户的shell设为/sbin/nologin

1.2锁定长期不使用的账号

1.3删除无用的账号

1.4锁定配置文件——chattr

2、密码安全控制

2.1未创建的用户密码管理

2.2已创建用户密码管理——chage命令

3、命令历史限制

3.1命令历史限制

3.2终端自动注销

二、用户切换与提权

1、su命令——切换用户

1.1切换用户的方式

​1.2限制使用su命令的用户

2、sudo命令——用户提权

2.1sudo命令提权

2.2sudo别名

2.3sudo子目录

三、系统引导和登录控制

1、调整BIOS引导设置原则

2、GRUB菜单设置

3、GRUB限制

3.1进行GRUB限制的步骤

3.2grub加密方法2

3.3grub加密方法2

4、终端登录安全控制

4.1限制root只在安全终端登录

4.2禁止普通用户登录

5、网络扫描—NMAP


一、账号安全基本设施

1、系统账号清理

1.1将非登录用户的shell设为/sbin/nologin

非登录:不可以使用bash程序 

1.2锁定长期不使用的账号

  • 使用usermod锁定用户
usermod -L 用户名     //锁定用户
usermod -U 用户名     //解锁用户

  • 使用passwd锁定账户
passwd -l 用户名      //锁定用户
passwd -u 用户名      //解锁用户

1.3删除无用的账号

1.4锁定配置文件——chattr

锁定配置文件即锁定配置文件passwd与shadow

chattr +i /etc/passwd /etc/shadow           //锁定配置文件
chattr -i /etc/passwd /etc/shadow           //解锁配置文件
chattr +a /etc/passwd /etc/shadow           //让文件或目录仅供附加用途,只能追加
lsattr /etc/passwd /etc/shadow              //查看文件状态属性

2、密码安全控制

2.1未创建的用户密码管理

未创建的用户需要进入/etc/login.defs进行修改密码属性,使得在下次创建用户时密码信息生效

例子

  • 新建用户并更改密码属性

  •  查看信息

2.2已创建用户密码管理——chage命令

格式:chage [选项] 用户名

常用选项作用
-m密码可更改的最小天数。为零时代表任何时候都可以更改密码
-M密码保持有效的最大天数
-W用户密码到期前,提前收到警告信息的天数
-E帐号到期的日期。过了这天,此帐号将不可用
-d上一次更改的日期
-i停滞时期。如果一个密码已过期这些天,那么此帐号将不可用
-l例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期

 强制用户下次登录时一定修改密码,此时密码应该符合复杂性的要求

格式:chage -d 0 用户名

3、命令历史限制

3.1命令历史限制

Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只

要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在 命令行输入明文

的密码,则无意之中服务器的安全壁垒又多了一个缺口。Bash 终端环境中,历史命令的记录条数

由变量 HISTSIZE 控制,默认为 1000 条。通 过修改/etc/profile 文件中的 HISTSIZE 变量值,可以

影响系统中的所有用户。例如,可以设 置最多只记录 200 条历史命令。

  • 临时修改当前用户的历史命令条数
[root@localhost ~]# export HISTSIZE=200 //临时修改历史命令条数为200条

  • 进入配置文件永久修改历史命令条数
[root@localhost ~]# vim /etc/profile       //进入配置文件
HISTSIZE=200                               //将历史命令条数由1000改为200
[root@localhost ~]# source /etc/profile    //刷新配置文件,使文件立即生效

  • 退出时清除
[root@localhost ~]# vim .bash_logout
echo " " > ~/.bash_history

  • 开机后清除
[root@localhost ~]# vim .bashrc
echo " " > ~/.bash_history

3.2终端自动注销

[root@localhost ~]# vim /etc/profile
export TMOUT=600

二、用户切换与提权

1、su命令——切换用户

su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命

格式: su [options...] [-] [user [args...]]

1.1切换用户的方式

  • su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换,与只切换了一部分,这会导致某些命令运行出现问题或错误
  • su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换,切换用户身份更彻底

说明

  • root su至其他用户无须密码
  • 非root用户切换时需要密码
  • su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。


1.2限制使用su命令的用户

  • su命令的安全隐患

     (1)  默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密

码,带来安全风险

      (2) 为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进

行切换

  •  限制使用su命令的用户

      将允许使用su命令的用户加入wheel组。

      启用pam_wheel认证模块。则只有wheel组内的用户可以使用su命令切换用户(编辑/etc/pam.d/su文件)。

  • 查看su操作记录

       安全日志:/var/log/secure

查看/etc/pam.d/su 文件

  •  以上两行是默认状态(即开启第二行,注释第六行),这种状态下是允许所有用户间使用su命令进行切换的。
  • 两行都注释这种状态下运行所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码;如果第二行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)
  • 如果开启第二行与第六行,表示只有root用户和wheel组内的用户才可以使用su命令
  • 如果注释第二行,开启第六行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。

限制使用su命令步骤:

  • 将用户加入wheel组中

  •  修改/etc/pam.d/su文件内容
    [root@localhost ~]# vim /etc/pam.d/su
    2 auth            sufficient      pam_rootok.so
    6 auth            required        pam_wheel.so use_uid

  • 使用su命令

2、sudo命令——用户提权

2.1sudo命令提权

sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如

halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性在最早

之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告

知超级用户的密码。

sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可

以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc

/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限

时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户

本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分

钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。由于不需要超级用户的密码。

sudo特性

  • sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员

  • sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器

  • sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票。sudo -V 可以查看相关配置信息

  • sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440

配置sudo

可以使用visudo也可以使用vim /etc/sudoers进行配置,但通常使用visudo,因为visudo可以自动检

查语法是否输入错误

[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

#用户    登入主机=(代表用户)  命令
#user    host   =(runas)   command
root     ALL    =(ALL)     ALL(绝对路径)  //root可以使用任何主机代表任何用户执行任何命令
%wheel   ALL    =(ALL)     ALL

user: 运行命令者的身份
      可以是用户也可以是组(组前应该加%)
      用户可以是用户名或者UID
      组可以是组名或者GID
host: 通过哪些主机 可以写IP地址或主机名 可以有多个主机
runas:以哪个用户的身份
command: 运行哪些命令
     command name  (命令)
     directory     (文件夹里的命令)
     sudoedit      (可以编辑sudoers这个文件,变相变成管理员)
     Cmnd_Alias    (命令别名)

格式:sudo [-u用户名] [命令]

例子:

将用户加入sudoers

  • 进入配置文件

  •  提权后使用命令(命令必须与配置文件中的命令一致)

 将用户加入wheel组中

可以使用通配符

2.2sudo别名

sudo别名有四种类型:

  • User_Alias(用户)

  • Runas_Alias(代表用户)

  • Host_Alias(登录主机)

  • Cmnd_Alias(命令)

进入配置文件

2.3sudo子目录

将用户添加至/etc/sudoers.d子目录中也可以提权

[root@localhost ~]# vim /etc/sudoers.d/test
tieniu1 ALL=(root) usr/bin/*,!/usr/sbin/reboot

[root@localhost ~]# useradd tieniu1
[root@localhost ~]# echo "123123" |passwd --stdin tieniu1
更改用户 tieniu1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# ll /etc/sudoers.d/test 
-rw-r--r--. 1 root root 24 3月  11 00:05 /etc/sudoers.d/test
[root@localhost ~]# chmod 440 /etc/sudoers.d/test 
[root@localhost ~]# ll /etc/sudoers.d/test 
-r--r-----. 1 root root 24 3月  11 00:05 /etc/sudoers.d/test

 

三、系统引导和登录控制

1、调整BIOS引导设置原则

  • 将第一引导设备设为当前系统所在硬盘;
  • 禁止从其他设备(光盘、 U盘、网络)引导启动系统;
  • 将安全级别设为setup,并设置管理员密码。
  • 禁用重启热键:Ctrl+Alt+Delete 避免因用户误操作重启

2、GRUB菜单设置

  • 未经授权禁止修改启动参数
  • 未经授权禁止进入指定系统

3、GRUB限制

通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是

一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

3.1进行GRUB限制的步骤

定义每个菜单项的所有脚本都存放在/etc/grub.d目录中,这些脚本的名称必须有两位的数字前缀,

其目的是构建GRUB 2菜单时定义脚本的执行顺序以及相应菜单项的顺序,比如00_header文件首

先被读取。

文件描述
00_header设置grub默认参数
10_linux系统中存在多个linux版本
20_ppc_terminfo设置tty控制台
30_os_prober设置其他分区中的系统(硬盘中有多个操作系统时设置)
40_custom和41_custom用户自定义的配置

设置GRUB 2加密

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

加密可以实现安全性。

在默认情况下,GRUB 2对所有可以在物理上进入控制台的人都是可访问的。任何人都可以选择并

编辑任意菜单项,并且可以直接访问GRUB命令行。要启用认真支持,必须将环境变量超级用户设

置为一组用户名(可以使用空格、逗号、分号作为分隔符)这样就只允许超级用户使用GRUB命令行

编辑菜单项以及执行任意菜单项。

GRUB 2密码支持以下两种格式

  • 明文密码:密码数据没有经过加密,安全性差
  • PBKDF2加密密码:密码经过PBKDF2哈希算法进行加密,在文件中存储的是加密后的密码数据,安全性较高。

3.2grub加密方法2

 

3.3grub加密方法2

先要使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令,然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令,最后使用grub2-mkconfig命令生成grub配置文件。

[root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak //将文件备份
[root@localhost ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
[root@localhost ~]# grub2-mkpasswd-pbkdf2   //根据提示设置GRUB菜单的密码
输入口令:               //输入密码
Reenter password:       //重新输入密码 
PBKDF2 hash of your password is //生成的密码口令
grub.pbkdf2.sha512.10000.D256BD5860E19BD5D861BB353C00BA75747C04271D4C2C029760DC4CA1542ADC7A7DBFA6D3F2382971FFFFD03D57E1A9B524F60153E691A8F98FDEC69996EF73.C4B2FDF005391F90CA7B0CE6D840BFCE8D7C3EF386C3DCEC097282D59B6FE5798A45E3D8886C446DABA1113D47D174075208D2433D63CCE8B5F5A42A9BF06506
[root@localhost ~]# vim /etc/grub.d/00_header //在/etc/grub.d/00_header文件中
cat <<EOF
set superusers="root"// 添加超级用户 此时超级用户名为root
password_pbkdf2 root//添加生成的随机的PBKDF2加密口令

grub.pbkdf2.sha512.10000.D256BD5860E19BD5D861BB353C00BA75747C04271D4C2C029760DC4CA1542ADC7A7DBFA6D3F2382971FFFFD03D57E1A9B524F60153E691A8F98FDEC69996EF73.C4B2FDF005391F90CA7B0CE6D840BFCE8D7C3EF386C3DCEC097282D59B6FE5798A45E3D8886C446DABA1113D47D174075208D2433D63CCE8B5F5A42A9BF06506
EOF
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg//使用grub2-mkconfig命令生成grub配置文件。
  • 文件备份

  • 使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令

  • 在/etc/grub.d/00_header文件中添加用户和PBKDF2加密口令

  •  使用grub2-mkconfig命令生成grub配置文件

  •  重启按e键进入grub菜单

 如果不设密码则会直接进入grub菜单

4、终端登录安全控制

4.1限制root只在安全终端登录

安全终端配置:/etc/securetty

4.2禁止普通用户登录

  • 建立/etc/nologin文件
  • 删除nologin文件或者重启后即恢复正常

 

 

5、网络扫描—NMAP

网络端口扫描

控制位作用
SYN建立链接
ACK确认
FIN结束断开
PSH传送 0 数据缓存 上层应用协议
RST重置
URG紧急
服务端口号
HTTP80
HTTPS443
Telnet23
FTP21
SSH(安全登录)、SCP(文件传输)、端口重定向22
SMTP25
POP3110
WebLogic7001
TOMCAT8080
WIN2003远程登录3389
Oracle数据库1521
MS SQL* SEVER数据库sever1433
MySQL 数据库sever3306

使用nmap前需要安装

格式:nmap [扫描类型] [选项] <扫描目标>

常见 的选 项选项的作用
-p指定扫描的端口。
-n禁用反向DNS解析(以加快扫描速度)
-sSTCP的SYN扫描(半开扫描),只向目标发出SYN数据包,如果收到SYNACK响应包就认为目标端口正在监听,并立即断开连接; 否则认为目标端口并未开放。
-sTTCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否 则认为目标端口并未开放。
-sFTCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而 忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。
-sUUDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。
-sPICMP扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。
-P0跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放 弃扫描。
  •  nmap -p 端口 网段 ——指定扫描的端口

  • nmap -sP查看网段有哪些存活主机

  •  nmap -sU查看目标主机提供的UDP服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值