Linux系统安全及应用

发布于:2024-04-25 ⋅ 阅读:(20) ⋅ 点赞:(0)

目录

一.账号安全基本措施

1.用户安全

2.密码安全

二.命令历史

1.清除历史命令

2.改历史命令条数

3.终端自动注销

三.切换用户

1.su命令的安全隐患

2.PAM可插拔式认证模块

3.shell模块

4. limit

四.sudo

1.别名

2.子目录

五.grub  加密

设置GRUB 2加密


一.账号安全基本措施

1.用户安全

1.1将用户设置为无法登录

1.2锁定用户

~ 使用 passwd 锁定用户

passwd  -l  用户名   #锁定用户
passwd  -u  用户名   #解锁用户

~ 使用 usermod 锁定用户

usermod  -L  用户名   #锁定用户
usermod  -U  用户名   #解锁用户

1.3删除无用账户

使用userdel命令

选项:-r  将用户家目录一起删除

1.4锁定配置文件——chattr

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 文件里的内容来设置密码规则

示例:

将密码最长有效期密码最小长度密码过期前警告天数修改后

创建新用户123,与已有用户lisi对比

2.2已有用户设置密码属性

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

格式:chage  [选项]  用户名

常用选项:

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

示例:

(1)设置密码有效期为30天

(2)例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。

(3)强制李四下一次登录一定修改密码(密码符合复杂性要求)

(4)直接使用  chage  用户名 修改密码属性

二.命令历史

Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在 命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通 过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。例如,可以设 置最多只记录 200 条历史命令。

1.清除历史命令

history  -c  临时清理历史命令

永久清除历史命令

2.改历史命令条数

临时修改历史命令条数

永久修改历史命令条数

进入配置文件修改

3.终端自动注销

vim /etc/profile #进入配置文件

三.切换用户

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

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

切换用户的方式:

su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换

su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换

示例:

说明:root su至其他用户无须密码;非root用户切换时需要密码

注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。

即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)。

示例:

限制使用su命令的用户

1.su命令的安全隐患

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

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

2.PAM可插拔式认证模块

(1)是一种高效而且灵活便利的用户级别的认证方式

(2)也是当前Linux服务器普遍使用的认证方式

进入/etc/pam.d/su

模块类型(module-type)

  • Auth 账号的认证和授权

  • Account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)

  • Password 用户修改密码时密码复杂度检查机制等功能

  • Session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等

  • -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用

Control: ( 控制位)

  • required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件

  • requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件

  • sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的

  • equired和requisiteoptional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略include: 调用其他的配置文件中定义的配置

  • optional 可选项

第三列代表PAM模块

默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。 同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。

每一行都是一个独立的认证过程; 每一行可以区分为三个字段: 认证类型 控制类型 PAM 模块及其参数 PAM 认证类型包括四种: 认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证; 帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过 期,帐号的登录是否有时间段的限制等; 密码管理(password management):主要是用来修改用户的密码; 会话管理(session management):主要是提供对会话的管理和记账。 控制类型也可以称做 Control Flags,用于 PAM 验证类型的返回结果。

1)required 验证失败时仍然继续,但返回 Fail

2)requisite 验证失败则立即结束整个验证过程,返回 Fail

3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续

4)optional 不用于验证,只是显示信息(通常用于 session 类型)

限制su命令步骤:

(1)将用户加入wheel组中

(2)进入/etc/pam.d/su,去掉第二行和第六行注释

(3)使用su命令

3.shell模块

功能:检查有效shell

帮助:man pam_shells

案例:不允许使用/bin/csh的用户本地登录

模块: pam_shells.so 只允许 规定的shell类型通过, 是在/etc/shells 文件中存在的 类型通过

实验:

(1)进入/etc/pam.d/su,在第一行下加一行  auth    required     pam_shells.so

(2)创建一个用户并指定shell类型为/bin/csh

(3)进入/etc/shells,将/bin/csh删除

(4)使用su命令切换

4. limit

功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间

修改限制的实现方式:

(1) ulimit命令

ulimit是linux shell的内置命令,它具有一套参数集,用于对shell进程及其子进程进行资源限制。

ulimit的设定值是 per-process 的,也就是说,每个进程有自己的limits值。使用ulimit进行修改,立即生效。

ulimit只影响shell进程及其子进程,用户登出后失效。

可以在profile中加入ulimit的设置,变相的做到永久生效

-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 是一个特殊值,用于表示不限制

示例:

ulimit  -a  可以查看系统相关资源限制设置

(1)临时修改open  files 的值ulimit  -n  ,且只对当前终端生效

(2)永久修改系统相关资源限制

进入limits.conf

编辑配置文件

保存退出后需要reboot重新启动,启动后使用ulimit  -a 查看

四.sudo

sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性在最早之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。sudo于1980年前后推出,sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、Mac OS X等。

sudo特性:

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

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

  • sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票

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

[root@localhost ~]#visudo
#语法检查
[root@localhost ~]#visudo -c
#检查语法

配置文件格式说明:/etc/sudoers, /etc/sudoers.d/

配置文件中支持使用通配符 glob

示例:

(1)给用户李四开放 “mount /dev/sr0  /mnt ” 命令权限

基本格式:用户  +      主机名(IP地址)=(root)    开放的命令

没有给李四开放权限则不能使用命令,如果李四使用则会被告知超级管理员,在日志中可以看到

使用visudo命令进入sudo的配置文件修改配置给予李四相关权限

错误示范:

正确示范:

(2)普通用户执行超级管理员授予权限的命令时每隔五分钟需要输入一次密码,超级管理员在编辑配置文件时可以设置不用输入密码

(3)在编辑多条命令时可以用“,”隔开,命令的优先级是后面的命令优先级高于前面的命令

我们授予李四用户/usr/sbin/下所有命令时,取消授予reboot命令权限(注意:范围小的写在后面)

错误示范:将“!/usr/sbin/reboot"写在前面时

李四用户仍然能够使用reboot命令

正确示范:

李四用户不能使用reboot命令

(4)sudo  -V  可以查看相关配置信息

(5)sudo  -l  可以查看当前用户可以使用哪些命令

1.别名

sudo别名有四种类型:

  • User_Alias(用户)

  • Runas_Alias(代表用户)

  • Host_Alias(登录主机)

  • Cmnd_Alias(命令)

别名格式:必须大写字母,数字可以使用但是不能放在开头

示例:

2.子目录

创建子目录过程:

(1)进入到/etc/sudoers.d

(2)编辑子目录zhangsan,授予张三所有权限

(3)查看子目录权限,设置权限为440,加固安全

创建结果张三可以使用所有命令

五.grub  加密

/etc/grub.d目录

定义每个菜单项的所有脚本都存放在/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哈希算法进行加密,在文件中存储的是加密后的密码数据,安全性较高。

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

在/etc/grub.d/00_header文件中添加用户和PBKDF2加密口令的格式如下。


[root@localhost ~]#grub2-setpassword
#直接设置密码

示例:


网站公告

今日签到

点亮在社区的每一天
去签到