目录
一、账号安全基本设施
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
非登录:不可以使用bash程序
usermod -L 用户名 //锁定用户
usermod -U 用户名 //解锁用户
passwd -l 用户名 //锁定用户
passwd -u 用户名 //解锁用户
锁定配置文件即锁定配置文件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 //查看文件状态属性
未创建的用户需要进入/etc/login.defs进行修改密码属性,使得在下次创建用户时密码信息生效
例子
格式:chage [选项] 用户名
常用选项 | 作用 |
-m | 密码可更改的最小天数。为零时代表任何时候都可以更改密码 |
-M | 密码保持有效的最大天数 |
-W | 用户密码到期前,提前收到警告信息的天数 |
-E | 帐号到期的日期。过了这天,此帐号将不可用 |
-d | 上一次更改的日期 |
-i | 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用 |
-l | 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期 |
强制用户下次登录时一定修改密码,此时密码应该符合复杂性的要求
格式:chage -d 0 用户名
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
[root@localhost ~]# vim /etc/profile
export TMOUT=600
su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命
格式: su [options...] [-] [user [args...]]
说明
(1) 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密
码,带来安全风险
(2) 为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进
行切换
将允许使用su命令的用户加入wheel组。
启用pam_wheel认证模块。则只有wheel组内的用户可以使用su命令切换用户(编辑/etc/pam.d/su文件)。
安全日志:/var/log/secure
查看/etc/pam.d/su 文件
限制使用su命令步骤:
[root@localhost ~]# vim /etc/pam.d/su
2 auth sufficient pam_rootok.so
6 auth required pam_wheel.so use_uid
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组中
可以使用通配符
sudo别名有四种类型:
User_Alias(用户)
Runas_Alias(代表用户)
Host_Alias(登录主机)
Cmnd_Alias(命令)
进入配置文件
将用户添加至/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
通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是
一个极大的威胁。可以为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密码支持以下两种格式
先要使用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 <
如果不设密码则会直接进入grub菜单
安全终端配置:/etc/securetty
网络端口扫描
控制位 | 作用 |
---|---|
SYN | 建立链接 |
ACK | 确认 |
FIN | 结束断开 |
PSH | 传送 0 数据缓存 上层应用协议 |
RST | 重置 |
URG | 紧急 |
服务 | 端口号 |
---|---|
HTTP | 80 |
HTTPS | 443 |
Telnet | 23 |
FTP | 21 |
SSH(安全登录)、SCP(文件传输)、端口重定向 | 22 |
SMTP | 25 |
POP3 | 110 |
WebLogic | 7001 |
TOMCAT | 8080 |
WIN2003远程登录 | 3389 |
Oracle数据库 | 1521 |
MS SQL* SEVER数据库sever | 1433 |
MySQL 数据库sever | 3306 |
使用nmap前需要安装
格式:nmap [扫描类型] [选项] <扫描目标>
常见 的选 项 | 选项的作用 |
---|---|
-p | 指定扫描的端口。 |
-n | 禁用反向DNS解析(以加快扫描速度) |
-sS | TCP的SYN扫描(半开扫描),只向目标发出SYN数据包,如果收到SYNACK响应包就认为目标端口正在监听,并立即断开连接; 否则认为目标端口并未开放。 |
-sT | TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否 则认为目标端口并未开放。 |
-sF | TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而 忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。 |
-sU | UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。 |
-sP | ICMP扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。 |
-P0 | 跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放 弃扫描。 |