admin管理员组文章数量:1566220
1 账号安全基本措施
1.1 系统账号清理
1.1.1 将非登录用户的Shell设为/sbin/nologin
在我们使用Linux系统时,除了用户创建的账号之外,还会产生系统或程序安装过程中产生的许多其他账号,除了超级用户root外,其他账号都是用来维护系统运作的,一般不允许登录,常见的非登录用户有bin、adm、mail、lp、nobody、ftp等。
使用usermod命令修改登录shell:
usermod -s /sbin/nologin 用户名
1.1.2 锁定长期不使用的账号
方法一:
passwd -l 用户名 //锁定用户
passwd -u 用户名 //解锁用户
方法二:
usermod -L 用户名 //锁定用户
usermod -U 用户名 //解锁用户
1.1.3 删除无用的账号
userdel 用户名 //删除用户,但不删除用户的家目录
userdel -r 用户名 //删除用户的同时,删除他的家目录
1.1.4 锁定账号文件passwd、shadow
chattr [-RV] [+/-/=<属性>] 文件或目录 //改变文件属性
lsattr 文件或目录 //查看文件底层属性
-R:递归处理,将指定目录下的所有文件及子目录一并处理。
-V:显示指令执行过程。
属性 | 作用 |
a(append) | 只允许对文件进行追加操作(适用于日志文件) |
A | 不允许更新文件的访问时间 |
i (immutable) | 在文件上启用这个属性时,我们不能更改、重命名或删除这个文件 |
j (journaling) | 设置了这个属性时,文件的数据首先保存在日志中,然后再写入文件 |
使用”chattr +i“为文件增加i属性,之后不能更改、重命名或删除这个文件。
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow //为两个文件增加i属性
[root@localhost ~]# lsattr /etc/passwd /etc/shadow //查看文件底层属性
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost ~]# useradd mike //尝试创建用户,创建失败
useradd:无法打开 /etc/passwd
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow //去掉两个文件的i属性
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
---------------- /etc/passwd
---------------- /etc/shadow
1.2 密码安全控制——设置密码规则
一般通过设置密码规则来控制密码安全,主要设置以下两点:
- 设置密码有效期
- 要求用户下次登录时修改密码
1.2.1 对于新建用户——修改/etc/login.defs文件
注意:第三个参数 密码最小长度规则对root无效
1.2.2 对于现有用户——chage命令
chage [选项] 用户名
选项 | 规则 |
-m | 密码可更改的最小天数。为0时代表任何时候都可以更改密码。 |
-M | 密码保持有效的最大天数。 |
-W | 用户密码到期前,提前收到警告信息的天数。 |
-E | 帐号到期的日期。过了这天,此帐号将不可用。 |
-d | 设置”最后一次修改密码的日期“。设置为 0 有特殊意思,表示用户应该在下次登录系统时更改密码。 |
-i | 停滞时期。允许密码过期后多少天内仍能使用,如果一个密码已过期这些天,那么此帐号将不可用。 |
-l | 例出当前的设置。 |
1.3 命令历史限制
一般使用两种方式控制命令历史:
- 减少记录的命令条数。
- 注销时自动清空命令历史,或登录时自动清空命令历史。
[root@localhost ~]# export HISTSIZE=200 临时修改历史命令为200条
[root@localhost ~]# echo $HISTSIZE=200 临时修改历史命令为200条
[root@localhost ~]# history -c 临时清理历史命令
永久修改历史命令条数
[root@localhost ~]# vim /etc/profile //设置历史命令条数记录为200条
( HISTSIZE=200)
[root@localhost ~]# source /etc/profile //刷新配置文件,使文件立即生
[root@localhost ~]# vim ~/.bash_logout //注销时自动清空历史命令
( echo " " > ~/.bash_history)
[root@localhost ~]# vim ~/.bashrc //登录时自动清空历史命令
( echo " " > ~/.bash_history)
1.4 终端自动注销
[root@localhost ~]# vim /etc/profile //设置闲置600秒后自动注销
(export TMOUT=600)
用户切换和提权
2.1 用户切换——su命令
su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换。
su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换。
即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)。
2.1.2 限制使用su命令的用户
限制使用su命令的用户(通过修改/etc/pam.d/su 文件):
- 将允许使用su命令的用户加入wheel组。
- 启用pam_wheel认证模块。则只有wheel组内的用户可以使用su命令切换用户。
查看 /etc/pam.d/su 文件:
注意第二行和第六行:
以上两行现在是默认状态(即开启第二行,注释第六行),这种状态下是允许所有用户间使用su命令进行切换的。
两行都注释是允许所有用户都能使用su命令,但root使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码)。
如果开启第六行,表示只有root用户和wheel组内的用户才可以使用su命令。
如果注释第二行,开启第六行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令
只需要把特定的组和用户加入wheel就可以获得su权限
2.2 用户提权——sudo命令
需要启用 Default logfile 配置
默认日志文件:/var/log/sudo.log
注意:sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,权限必须为0440
#用户 登入主机 = (代表用户) 命令
#user host=(username) command
root ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD:ALL
#root表示允许哪个用户。%wheel表示wheel组。
#第一个ALL表示通过哪些主机登入。
#第二个ALL表示以哪个用户身份。
#最后一个ALL表示允许运行哪些命令。
#NOPASSWD表示使用sudo命令不需要验证密码。
sudo基本语法:
sudo [-u username] [command]
2.2.2 sudo别名
sudo别名有四种类型:
- User_Alias(用户)
- Runas_Alias(代表用户)
- Host_Alias(登录主机)
- Cmnd_Alias(命令)
创建用户别名MYUSERS=lucy,mike。允许这两个用户使用/sbin/下的所有命令,除了reboot、poweroff、init、rm这四个命令。 (! 表示取反。! /sbin/reboot 表示不允许使用reboot命令。)
[root@localhost ~]# visudo ----------------------------------
User_Alias MYUSERS = lucy,mike
Host_Alias MYHOSTS = localhost
Cmnd_Alias MYCMNDS = /sbin/*,!/sbin/reboot,!/sbin/poweroff,!/sbin/init,!/usr/bin/rm
MYUSERS MYHOSTS=(root) NOPASSWD:MYCMNDS
2.2.4 查看sudo操作记录
-
需要启用 Default logfile 配置
-
默认日志文件:/var/log/sudo
[root@localhost log]# visudo //修改配置文件 -----------------------------
Default logfile="/var/log/sudo" //在最后一行添加 Default logfile 配置
2.3 PAM安全认证
- 包名: pam
- 模块文件目录:/lib64/security/*.so
- 特定模块相关的设置文件:/etc/security/
- 应用程序调用PAM模块的配置文件
- 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
- 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
- 注意:如/etc/pam.d存在,/etc/pam.conf将失效
2.3.2 PAM工作原理
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证。
专用配置文件/etc/pam.d/ 格式:
配置文件/etc/pam.d/每一行都是一个独立的认证过程。
每一行可以区分为三个字段: 认证类型 、控制类型 、PAM 模块及其参数 。具体如下:
认证类型(module-type):
- 认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证;
- 帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等;
- 密码管理(password management):用户修改密码时密码复杂度检查机制等功能;
- 会话管理(session management):主要是提供对会话的管理和记账。
- -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用。
控制类型: 也可以称做 Control Flags,用于 PAM 验证类型的返回结果。
- 1)required 验证失败时仍然继续,但返回 Fail。
- 2)requisite 验证失败则立即结束整个验证过程,返回 Fail 。
- 3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续。
- 4)optional 不用于验证,只是显示信息(通常用于 session 类型)。
PAM 模块及其参数:
- 默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。 同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
3 系统引导和登录控制
3.1 开关机安全控制
-
将第一引导设备设为当前系统所在硬盘;
-
禁止从其他设备(光盘、 U盘、网络)引导启动系统;
-
将安全级别设为setup,并设置管理员密码。
禁用重启热键:Ctrl+Alt+Delete,避免因用户误操作重启。
3.1.2 GRUB限制
- 未经授权禁止修改启动参数
- 未经授权禁止进入指定系统
3.1.3 GRUB菜单加密的实现
定义每个菜单项的所有脚本都存放在/etc/grub.d目录中,这些脚本的名称必须有两位的数字前缀,其目的是构建GRUB 2菜单时定义脚本的执行顺序以及相应菜单项的顺序,比如00_header文件首先被读取。
GRUB 2密码支持以下两种格式:
- 明文密码:密码数据没有经过加密,安全性差。
- PBKDF2加密密码:密码经过PBKDF2哈希算法进行加密,在文件中存储的是加密后的密码数据,安全性较高。
- CentOS 7系统中,直接使用 “grub2-setpasswd” 命令设置grub密码;
- CentOS 6系统中,先要使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令,然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令,最后使用grub2-mkconfig命令生成grub配置文件。(/etc/grub.d/00_header是开机时第一个启动的文件)
方法一
方法二
先要使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令,
然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令,
最后使用grub2-mkconfig命令生成grub配置文件。
修改配置文件
3.2 终端登录安全控制
3.2.1 限制root只在安全终端登录
安全终端配置:/etc/securetty
3.2.2 禁止普通用户登录
- 建立/etc/nologin文件
- 删除nologin文件或者重启后即恢复正常
4 网络端口扫描——nmap工具
4.1 nmap工具
- 一款强大的网络端口扫描、安全、检测工具
网络端口扫描:
控制位 | 描述 |
---|---|
SYN | 建立链接 |
ACK | 确认 |
FIN | 结束断开 |
PSH | 传送 0 数据缓存,上层应用协议 |
RST | 重置 |
URG | 紧急 |
服务和端口号:
HTTP | 80 |
HTTPS | 443 |
Telnet | 23 |
FTP | 21 |
SSH | 22 |
SMTP | 25 |
POP3 | 110 |
WebLogic | 7001 |
TOMCAT | 8080 |
WIN2003远程登录 | 3389 |
Oracle数据库 | 1521 |
MS SQL* SEVER数据库sever | 1433 |
ySQL 数据库sever | 3306 |
nmap命令常用格式
nmap [扫描类型] [选项] <扫描目标>
netstat命令
netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。
命令格式:netstat [选项]
-a | 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)。 |
-n | 拒绝显示别名,以数字的形式显示相关的主机地址、端口等信息。 |
-t | 查看TCP协议相关的信息。 |
-u | 显示UDP协议相关的信息。 |
-p | 显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限) |
-r | 显示路由表信息。 |
-l | 显示处于监听状态(Listen)的网络连接及端口信息。 |
版权声明:本文标题:Linux 系统安全及应用(账号安全和引导登录控制) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1727199240a1101956.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论