账号安全控制
基本安全措施
系统账号清理
- 在Linux系统中,除了用户手动创建的用户,还有随着系统或程序安装过程而自动生成的其他账号。除了超级用户root之外,其他大量账号只是用于维护系统运作,启动或保持服务进程,一般不允许登录,因此也称为非登录用户账号。常见的非登录账号包括:bin,deamon,lp,main等。为了确保系统安全这些账号的登录通常是/sbin/nologin,表示禁止终端登录,应确保不被别人改动。当程序被卸载但账号未能删除,则需要手动删除。
- 对于长期不用的账号,而且不知道是否该删除,可以暂时将其锁定。
- usermod -L 账号名 锁定账号
- passwd -S 账号名 查看账号状态
- usermod -U 账号名 解锁账号
- 如果服务器中的用户已经固定,不需要更改,可以采取锁定账号配置文件的方法:使用chattr命令,分别加“+i”“-i”来锁定,解锁文件,lsattr命令可以查看文件锁定情况 。(在账号文件被锁定的情况下,内容不允许改变,所以无法添加,删除账号 ,也不能更改用户的密码,登录shell,宿主目录等属性信息)(扩展:chattr “+a”“-a”选项,+a:选择不允许用户编辑文件内容,但允许用户追加;-a:则允许用户编辑。)
- 如果不希望某个用户登录系统可以在创建该用户时加上“-s”选项+/sbin/nologin。例如:useradd 用户名 -s /sbin/nologin
密码安全控制
- 在不安全的网络环境中,为了降低密码被猜出或暴力破解的风险,用户应定期修改密码,避免长期使用一个密码。管理员可以设置密码的最大有效时间,密码过期的用户登录时会被要求重新设置密码,否则就拒绝登录
- 要求由批量创建的用户初次登录时必须自设新密码
- 修改/etc/pam.d/system-auth设置密码错误多少次结束会话
命令历史,自动注销
- xshell远程的历史命令机制为用户提供便利,但也给用户带来了潜在的风险。只要获得用户的命令历史文件,该用户的命令操作就一览无余,如在命令行中输入了明文密码,可能对服务器的安全存在巨大隐患。为防止此隐患,我们可以通过修改/etc/perofile文件中的HISTSIZE的值限制历史记录的条数,该操作可以影响系统中所有新登录的用户。如设置最多50条:
- 还可以修改用户宿主目录中的~/.bash_logout文件,设置用户退出Bash环境以后,所有记录的历史命令将自动清空
2.用户切换与提权
su命令——切换用户
su命令后面跟上想要切换到的用户名,例如su username。这将使你切换到指定的用户,但并不会加载该用户的完整环境变量和配置文件。 su -命令则会加载目标用户的完整环境,包括其家目录、shell配置文件
sudo命令——提升执行权限
sudo命令允许普通用户以其他用户(通常是root用户)的身份执行命令。它在安全控制中起到重要作用,因为它提供了权限管理的灵活性,同时避免了直接以root用户登录带来的安全风险。通过配置sudoers文件,可以精细控制哪些用户可以执行哪些命令,以及是否需要输入密码等。
条件:
使用sudo命令前,需要由超级管理员预先进行授权,sudo的配置文件为/etc/sudores,文件的默认权限为440.需使用专门的visudo进行编辑,虽然也可以用vi进行编辑,但保存时必须执行:W!命令来强制执行,否则系统将提示为只读文件而拒绝保存。
授权格式为:user MACHINE=COMMANDS
授权配置文件包括用户,主机,命令三个部分,即授权那些人在哪些人在哪些主机上执行那些命令:
用户(user):直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)
主机(MACHINE):使用此配置文件的主机名称,此部分主要是方便在多个主机间共用同一个sudores文件,一般设为localhost或者实际的主机名即可。
命令(COMMANDS):允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。
%组名 ALL=NOPASSWD:ALL设置该组内用户无需验证密码即可执行任何命令。
同时为多个用户,在多个主机上授权相同的命令时,可以以起别名的方式进行:分别通过关键字User_Alias,Host_Alias,Cmnd_ALies来进行设置。(别名必须为大写)如:
User_Alias 大写别名=用户1,用户2,用户3...
Host_Alias 大写别名=主机1,主机2,主机3...
Cmnd_Alias 大写别名=命令位置1,命令位置2,命令位置3...
用户别名 主机别名=命令别名
系统引导和登录控制
1.开关机安全控制
调整BIOS引导设置
- 将第一优先引导设备(First Boot Device)设为当前系统所在磁盘
- 禁止从其他设备(如光盘,U盘,网络等)引导系统,对应的项设为“Disabled”
- 将BIOS的安全级别改为“setup”,并设置好管理密码,以防未授权的修改
限制更改GRUB引导参数
- 通过备份GRUB引导参数,可以对一些系统问题进行修复,但从系统安全的角度考虑,为防止任何人都可以修改GRUB引导参数,可以为GRUB设置一个密码,只有提供正确密码才允许修改引导参数;为GRUB设置密码建议采用“grub2-mkpasswd-pbkdf2”命令生成,表现为经过PBKDF2算法加密的字符串,生成密码后再/etc/grub.d/00_hearder配置文件中,添加对应的用户,密码等配置,具体添加内容如下:
- 使用grub2-mkconfig命令生成新的grub.cfg配置文件
命令:grub2-mkconfig -o /boot/grub2/grub.cfg //生成新的grub文件
2.终端及登录控制
在Linux服务器中默认开启6个tty终端(也通过自行配置开启更多),允许任何用户进行本地登录。
禁止root用户登录
在Linux系统中,通过login程序读取/etc/securetty文件,决定允许root用户能登录那些终端,如果想禁止root登录某个终端,只需注释或者删除/etc/securetty文件对应的执行即可。
禁止普通用户登录
当服务器正在进行备份或者调试等维护工作时,可能不希望再有新的用户登录系统,这时候,只需要简单建立/etc/nologin文件即可。login程序如果检测到此文件存在,则拒绝普通用户登录系统(实际是利用了shutdown延迟机关的限制机制),当删除此文件或重新启动主机以后,恢复正常。
弱口令检测,端口扫描
1.弱口令检测——John the Ripper
下载并安装John the Ripper
John the Ripper的官方网站是http://www.openwall.com/john/,可在此网站获得稳定版源码包
以源码包john-1.8.0.tar.gz为例,解压候可以看到是三个目录——doc手册文档,run运行程序,src源码文件,doc/README链接的说明文件;切换到src子目录并执行“make clean linux-x86-64”命令,即可执行编译过程;编译完成后,run子目录下会生产一个名为john的可执行程序及相关的配置文件,字典文件等,可复制到任何位置使用。
检测弱口令账号
在安装有John的服务器中,只需执行run目录下的John程序,将待检测的shadow文件作为命令行参数,可以直接对/etc/shadow文件进行弱口令分析检测,其他服务器可以对shadow文件进行复制,传递给John进行检测,检测时间过长可以使用Ctrl+C终止。检测的结果密码在前用户名在后保存在john.pot文件中,可以结合“--show”选项进行查看
使用密码字典文件
John the Ripper默认提供的字典文件为password.lst,并列出除了3000多个常见的弱口令,有必要用户可以自行添加密码组合,完善字典,使用John程序时,可以结合“--wordlist=”选项来指定字典文件的位置,以便对指定密码文件进行暴力分析。
2.网络扫描——NMAP
安装NMAP软件包
在CentOS7中,既可以使用光盘自带的nmap-6.40-el7.x86_64.rpm安装包,也可以使用从NMAP官方网站下载的最新版资源包;
命令:yum -y install nmap
扫描语法及类型
NMAP扫描程序位于/usr/bin/nmap目录下。
命令格式: nmap 【扫描类型】 【选项】<扫描目标...>
其中扫描目标可以是主机名,IP地址或网络地址等,多个目标以空格分隔;常用的选项有“-p”用来指定扫描的端口,“-n”禁用反向DNS解析(以加快扫描速度);扫描类型决定着检测方式,也直接影响扫描的结果。常见的扫描类型:
- -sS,TCP SYN扫描(半开扫描):只向目标发出SYN数据包,若收到SYN/ACK响应包就认为目标端口正在监听,并立即断开扫描;否则认为目标端口未开放;
- -sT,TCP连接扫描:这时完整的TCP扫描方式,用于建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则我认为目标端口并未开放。
- -sF,TCP FIN扫描:开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多的防火墙只对SYN数据包进行简单过滤,而忽略了其它形式的TCP攻击包,这种类型的扫描可简介检测防火墙的健壮性。
- -sU,UDP扫描:探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。
- -sP,ICMP扫描:类似于ping检测,快速判断目标主机是否存活,不做其他扫描。
- -P0,跳过ping检测:这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描。
扫描操作示例
- 扫描本机,检查开放了哪些常用的TCP端口
- 扫描本机,检查开放了哪些常用的UDP端口
扫描结果中,STATE列若为open则表示端口为开放状态,为fultered表示可能被防火墙过滤,为closed表示端口为关闭状态
- 检查192.168.4.0/24(网段)中有那些主机提供FTP服务
- 快速检测192.168.4.0/24网段中有哪些存活主机(能ping通)
- 检测IP地址位于192.168.4.100~200的主机是否开启文件共享服务