一.账号安全基本措施
1. 系统账号清理
- 将用户设置为无法登录、
- 锁定账户
- 删除账户
- 锁定账户密码 本质锁定
shell——/sbin/nologin却比较特殊,所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。举例来说,各个系统账号中,打印作业有lp这个账号管理,www服务器有apache这个账号管理,他们都可以进行系统程序的工作,但就是无法登陆主机而已。
1.1将非登录用户的Shell设为/sbin/nologin
在我们使用Linux系统时,除了用户创建的账号之外,还会产生系统或程序安装过程中产生的许多其他账号,除了超级用户root外,其他账号都是用来维护系统运作的,一般不允许登录,常见的非登录用户有bin、adm、mail、lp、nobody、ftp等。
举例如图:
1.2锁定长期不使用的账号
这里有两种命令用法基本一致
passwd [选项] 用户名
-l :锁定用户账号
-u:解锁用户账号
-S:查看用户状态
usermod [选项] 用户名
-L:锁定用户账号
-U:解锁用户账号
举例如图:锁定用户。锁定后用户无法登录。
1.3删除无用的账号
- userdel 用户名。删除用户,但不删除用户的家目录。
用户被删除后,他的家目录会变成无主文件,文件的属主和属主位显示的是原主人的UID和GID。
- userdel -r 用户名。删除用户的同时删除他的家目录。
1.4锁定账号文件passwd、shadow
- chattr命令改变文件属性,lsattr命令查看文件底层属性
选项说明:
-R:递归处理,将指定目录下的所有文件及子目录一并处理。
-V:显示指令执行过程。
-
chattr +a 文件或目录 只允许对文件进行追加操作(适用于日志文件)
-
chattr +i 文件或目录 不能更改、重命名或删除这个文件
注:使用”chattr +i“为文件增加i属性,之后不能更改、重命名或删除这个文件
2.密码安全控制
1.设置密码有效期
2.要求用户下次登录时修改密码
chage命令
用来修改帐号和密码的有效期限。
格式:
chage [选项] 用户名
常用选项
2.1.设置密码有效期
- chage -M ,设置用户密码的有效期。
- chage -d 0,强制要求用户下次登录时必须修改密码。
3.命令历史限制
Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在 命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通 过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。例如,可以设 置最多只记录 200 条历史命令。
一般使用两种方式控制命令历史:
- 减少记录的命令条数。
- 注销时自动清空命令历史,或登录时自动清空命令历史。
家目录下有 .bash_history 文件,用于记录历史命令。清空该文件即清空了命令历史。
注:在注销时清空命令历史,或在登录时清空命令历史,设置其中一种即可。
4.终端自动注销
闲置20秒后自动注销
方法:
写入配置文件 文件位置 .bash_profile
二.用户切换和提权
2.1 用户切换——su 命令介绍
su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令。
查看su操作记录:
系统安全日志/var/log/secure,是记录ssh登陆服务器的日志文件。
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换。
su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换。
即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)。
密码验证:
- root 切换到任意用户,不验证密码。
- 普通用户切换到其他用户,需要验证目标用户的密码。
注意:
su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。
密码验证
1.从root切换到任意用户不需要验证密码
2.普通用户切换到其他用户需要验证目标用户的密码
2.2限制使用su命令的用户
su 命令的安全隐患
- 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险。
- 为了加强su 命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用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命令。
三.用户提权 sudo命令
sudo命令作用以及用法
作用:指定用户以超级用户的身份来执行部分命令
用法:sudo 授权命令
1.在配置文件中添加授权,文件位置visudo 或者 vim /etc/sudoers
root ALL=(ALL) ALL #这里的all表示所以命令
记录格式 :用户 登入主机 = (代表用户) 命令
可以使用通配符“ * ”号任意值和“ !”号进行取反操作。
权限生效后,输入密码后5分钟可以不用重新输入密码。
举例:
四. PAM安全认证
su命令的安全隐患
默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root) 的登录密码,带来安全风险;
为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换。
PAM(Pluggable Authentication Modules)可插拔式认证模块
是一种高效而且灵活便利的用户级别的认证方式
也是当前linux服务器普遍使用的认证方式
PAM认证原理
一般遵循的顺序
Service (服务)—>PAM (配置文件) —>pam_*.so
首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于:/etc/pam.d),最后调用认证文件(位于:/bin/security下)进行安全认证。
用户询问服务时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。
不同的应用程序所对应的PAM模块时不同的。
如果想查看某个程序是否支持PAM 认证,可以用ls命令进行查看/etc/pam.d/
PAM安全认证流程
控制类型也称作Control Flags,用于PAM验证类型返回的结果
1.required验证失败时任然继续,但返回Fail
2.requisite验证失败则立即结束整个验证过程,返回Fail
3.sufficien验证成功则立即返回,不在继续,否则忽略结果并继续
4.optional不用于验证,只显示信息
五.系统引导和登录控制
5.1.1 调整BIOS引导设置原则
-
将第一引导设备设为当前系统所在硬盘;
-
禁止从其他设备(光盘、 U盘、网络)引导启动系统;
-
将安全级别设为setup,并设置管理员密码。
禁用重启热键:Ctrl+Alt+Delete,避免因用户误操作重启。
5.1.2 GRUB限制
- 未经授权禁止修改启动参数
- 未经授权禁止进入指定系统
通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
5.1.3 GRUB菜单加密的实现
定义每个菜单项的所有脚本都存放在/etc/grub.d目录中,这些脚本的名称必须有两位的数字前缀,其目的是构建GRUB 2菜单时定义脚本的执行顺序以及相应菜单项的顺序,比如00_header文件首先被读取。
5.1.4设置GRUB 2加密
由于GRUB 2负责引导linux系统,其作为系统中的第一道屏障的安全性非常重要,对GRUB 2进行加密可以实现安全性。
在默认情况下,GRUB 2对所有可以在物理上进入控制台的人都是可访问的。任何人都可以选择并编辑任意菜单项,并且可以直接访问GRUB命令行。要启用认真支持,必须将环境变量超级用户设置为一组用户名(可以使用空格、逗号、分号作为分隔符)这样就只允许超级用户使用GRUB命令行、编辑菜单项以及执行任意菜单项。
GRUB 2密码支持以下两种格式:
- 明文密码:密码数据没有经过加密,安全性差。
- PBKDF2加密密码:密码经过PBKDF2哈希算法进行加密,在文件中存储的是加密后的密码数据,安全性较高。
为GRUB菜单设置密码的两种方式:
- 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是开机时第一个启动的文件)
5.1.5CentOS 7系统中,直接使用 “grub2-setpasswd” 命令设置grub密码。
5.2### 终端登录安全控制
限制root只在安全终端登录
安全终端配置:/etc/securetty
禁止普通用户登录
建立/etc/nologin
删除nologin文件或重启后即恢复正常
六.网络端口扫描——nmap工具
- 一款强大的网络端口扫描、安全、检测工具
- 官方网站:Nmap: the Network Mapper - Free Security Scanner
网络端口扫描:
服务和端口号:
常用选项和扫描类型
七.netstat命令
netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。
举例:
netstat -tnlp,直接使用ip地址列出所有处于监听状态的TCP端口,且加上程序名。