目录和文件
ls -l 查看目录和文件的权限的设置情况
加固方法
对于重要目录,建议执行如下类似操作
Chmod -R 750 /etc/rc.d/init.d/*
这样只有root可以读写和执行这个目录下的脚本
新建了一个用户Q
写入了一些信息
发现在root用户下可以进行文件打开
接下来用普通用户进行登录
发现没有权限进行查看
设置默认的umask值,增强安全性
umask 是 Linux 系统中用于控制 新建文件 / 目录默认权限 的掩码。系统创建文件 / 目录时,会基于默认权限(文件默认 666,目录默认 777)减去 umask 值,生成最终权限。例如 umask 027,表示从默认权限中扣除对应权限,确保新建文件 / 目录的权限更安全。
使用命令“/vi/etc/profile” 修改配置文件,添加行“umask 027”,及新创建的文件属主读写执行权限,同组用户读写和执行权限,其他用户无权限,使用”umask 027”
应用设置
vi /etc/profile # 打开文件
进入编辑模式(按 i 键),在文件末尾添加:
umask 027
保存退出(按 Esc 键,输入 :wq 回车)
source /etc/profile # 立即生效配置
普通用户进入修改文件,报错此用户没有读写权限,增强了安全性
Bash历史命令
Bash历史命令
可以设置保留历史命令的条数
使用命令 “cat/etc/profile | group HISTSIZE ” 和“cat /etc/profile | grep HISTFILESIZE=”查看保留历史命令的条数
使用命令“vi/etc/profile”修改配置文件,修改HISTSIZE=5和HISTFLESIZE=5
既保留最新执行的5条命令
通过查看发现有1000条历史命令,严重影响系统安全
进行配置文件编辑
发现已经成功改变了配置文件信息
退出,先按esc :wq! 再按enter
退出,先按esc :wq! 再按enter
登陆超时,设置系统登陆后,连接超时时间增强安全性
使用命令 cat /etc/profile | grep TWOUT 查看TMOUT是否被设置
加固方法:使用命令“vi/etc/profile”修改配置文件,添加“TMOUT”行开头的注释,设置为“TMOUT=180”,及超时时间为三分钟
发现没有输出,我们进行配置
配置完成,要在最后一行添加,不然会被覆盖
G跳转到最后一行 i 进入编辑模式 Esc退出编辑模式,输入1:wq!保存并退出
配置文件生效
source /etc/profile
root路径
检查系统root用户环境变量path是否包含”.”
检查方法:以root用户环境变量path中不应该包含当前目录
以root身份执行如下操作
#echo $PATH
/usr/local/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:.
加固方法:
使用命令“vi/etc/profile” 修改echo $PATH后面的路径
但是我发现我的本来就不包含当前目录,所以不用修改
运行配置文件
运行配置文件
Source /etc/profile
验证修改结果:
Echo $PATH
看一看结果中是否包括当前目录“.”
账户安全
禁用无用账号:减少安全风险
检查方法:使用/etc/passwd 查看口令文件,与系统管理员确认不必要的账户
FTP等服务的账号,如果不需要登陆下系统,shell应该/sbin/nologin
加固方法:使用命令“passwd -l <用户名>” 锁定不必要的账号
发现已经成功锁定了Q用户禁止登录
扩展
在 Linux 系统中,用户信息存储在 /etc/passwd 文件中,每行记录对应一个用户,其中最后一个字段是用户登录时使用的 Shell 程序。
- /sbin/nologin 的作用:
它是一个特殊的 “伪 Shell”,当用户的 Shell 设置为 /sbin/nologin 时,该用户无法通过终端交互式登录系统(如 SSH 登录、本地控制台登录等)。系统会提示 “This account is currently not available”,拒绝登录请求。- 应用场景:
对于 FTP 服务账号、仅用于运行服务的账号(如某些程序运行的用户),这些账号不需要登录系统执行命令,只需保留服务功能。将它们的 Shell 设置为 /sbin/nologin,既能保证服务正常运行,又能禁止用户通过这些账号登录系统,降低安全风险。- 安全意义:避免无用账号被攻击者利用进行登录操作,减少系统暴露面,提升安全性。例如,若攻击者破解了一个设置为 /sbin/nologin 的账号密码,也无法通过该账号登录系统执行恶意命令。
查看指定用户的默认登录 Shell
通过/etc/passwd文件查看:系统用户信息存储在/etc/passwd文件中,每行对应一个用户的信息,每行最后一个字段就是该用户的默认登录 Shell。比如查看root用户的 Shell,在终端执行命令cat /etc/passwd | grep ^root ,其中^表示匹配行首,命令执行结果中最后一个:号后的内容,即为root用户的登录 Shell 类型 ,常见的如/bin/bash 。如果想查看其他用户,将root替换为对应的用户名即可
- 通过echo $SHELL查看当前用户默认登录 Shell:在终端输入echo $SHELL命令,会返回当前正在使用终端的用户的默认登录 Shell。例如返回/bin/bash,则表示默认登录 Shell 是 Bash。
查看当前正在运行的 Shell
- 使用echo $0命令:在终端中输入echo $0,会输出当前正在运行的 Shell 名称。比如显示bash,就表示当前运行的是 Bash Shell。
- 使用ps -p $$命令:$$代表当前 Shell 的进程号,该命令会返回当前 Shell 的详细信息,其中包括正在运行的 Shell 类型。执行命令后,在输出结果中找到CMD列,对应的值就是正在运行的 Shell。
创建ftp账号
扩展知识
以下以 Linux 系统中常见的 vsftpd 软件为例,介绍创建 ftp 服务账号且该账号不需要登录系统(shell 为 /sbin/nologin )的教程:
1. 安装 vsftpd
打开终端,使用包管理工具安装 vsftpd。以 CentOS、RHEL 系统为例,执行命令:
bash
sudo yum -y install vsftpd
对于 Debian、Ubuntu 系统,则执行:
bash
sudo apt-get -y install vsftpd
发现没有进行激活
发现安装成功
2. 创建本地映射用户(非虚拟用户方式)
使用useradd命令创建一个系统用户,该用户将作为 FTP 用户的映射用户,且设置其 shell 为 /sbin/nologin,使其无法登录系统。假设创建用户名为ftpuser,命令如下:
bash
sudo useradd -d /var/ftp/pub -s /sbin/nologin ftpuser
其中-d参数指定用户的家目录为/var/ftp/pub,你可以根据实际需求修改。
3. 设置用户密码
执行以下命令为新创建的用户设置密码:
sudo passwd ftpuser
按照提示输入并确认密码。
4. 配置 vsftpd
打开 vsftpd 的配置文件vsftpd.conf,一般路径为/etc/vsftpd/vsftpd.conf:
sudo vi /etc/vsftpd/vsftpd.conf
根据需求修改以下一些关键配置项:
- 禁止匿名登录:确保anonymous_enable=NO ,防止匿名用户访问 FTP 服务器。
- 允许本地用户登录:确保local_enable=YES 。
- 启用写入权限:若需要让用户有上传文件的权限,设置write_enable=YES 。
- 锁定用户主目录:为了安全,建议设置chroot_local_user=YES ,将用户限制在其主目
- 录中,防止访问其他系统目录。
- 重装vim
修改完成后,保存并退出编辑器。
5. 检查并添加 shell 到合法列表(可选但建议)
vsftpd 默认会检查用户的 shell 是否在/etc/shells文件中列出 ,如果不在可能导致用户无法登录 FTP。因此,需要检查并添加/sbin/nologin到该文件中。
使用以下命令查看当前/etc/shells文件内容:bash
cat /etc/shells
如果其中没有/sbin/nologin这一行,则使用编辑器添加:
bash
sudo vi /etc/shells
在文件末尾添加/sbin/nologin ,保存并退出。
6. 重启 vsftpd 服务
使配置生效,执行命令:
对于 CentOS、RHEL、Fedora 等系统:bash
sudo systemctl restart vsftpd
对于 Debian、Ubuntu 系统:
bash
sudo service vsftpd restart
7. 测试
使用 FTP 客户端软件,如 FileZilla、CuteFTP 等,输入 FTP 服务器的地址、创建的用户名和密码进行连接测试,验证是否能够正常访问 FTP 服务器。
分享
账号策略
操作目的:防止口令暴力破解,降低风险
检查方法:使用命令“cat/etc/pam.d/ system-auth”查看配置文件
加固方法:
设置连续输错10次密码,账号锁定5分钟
使用命令“vi /etc/pam.d/ system-auth”修改配置文件,添加 auth required pam_tally.so onerr=fail deny=10 unlock_time=300
检查特殊账号
操作目的:
查看空口令和root权限的账号
检查方法;
使用命令:“awk -F:’($2==””)’/etc/shadow” 查看空口令账号
使用命令:“awk -F:’($3==0)’/etc/passwd”查看UID为零的账号
加固方法:
使用命令“passwd<用户名>“为空命令账号设置密码
UID为零的账号应该只有root,设置UID方法:
usermod -u UID<用户名>
口令周期策略
操作目的:
加强口令的复杂度,降低被猜解的可能性
检查方法:
使用命令:“cat /etc/login.defs| grep PASS“和 ”cat /etc/pam.d/system-auth“查看密码策略设置
加固方法:
使用命令“vi /etc/login.defs“修改配置文件
PASS_MAX_DAYS 90 #新建用户的密码最长使用天数
PASS_MAX_DAYS 0 #新建用户的密码最短使用天数
PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数
使用change命令修改用户设置,例如:
Chage -m 0 -M 30 -E 2000-01-01 -W 7<用户名>
表示:将此用户的密码最长使用天数设为30,最短使用天数设为0,账号2000年1月1日过期,过期前7天警告用户。
口令复杂策略
操作目的:加强口令的复杂度等,降低被猜解的可能性
检查方法;使用命令“cat/etc/pam.d/system-auth | grep pam_cracklib.so”
查看密码复杂度策略设置
没有发现密码策略配置
加固方法:建议在/etc/pam.d/system-auth文件中配置:
适用于普通用户
Passwd requisite pam_cracklib.so retry=5 difok=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1
这一句适用于普通用户和root用户
password requisite pam_cracklib.so retry=5 difok=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 enforce_for_root
至少八位,包含一位大写字母,一位小写字母和一位数字
进来是这个界面,点击i进行输入
按esc, “:wq!”进行退出编辑模式,并保存
进行验证,发现进行了提示,密码策略小于8位
限制root远程登陆
操作目的:限制root远程telent登录
检查方法:
使用命令“cat/etc/securetty | grep CONSOLE” 查看是否禁止root远程登陆
加固方法:
Vi编辑/etc/securetty 文件,配置:CONSOLE=/dev/tty01
直接点击G进入最后一行,
Esc :wq!
扩展知识:
使用xshell进行远程连接kali教程
sudo -i 进入(root)管理员模式
Xshell安装教程
发现已经成功连接
发现正常的linux命令都能使用
重新连接,发现失败
限制用户 su
操作目的:检查是否使用pam 认证模块禁止wheel组之外的用户为root
检查方法:
使用命令:“cat /etc/pam.d/su | grep pam_wheel.so”查看配置文件,确认是否有相关的限制
加固方法
编辑su 配置文件,vi 打开/etc/pam.d/su 文件,添加或者修改以下配置
Auth required pam_wheel.so use_uid:强制要求执行su 操作的用户属于wheel组,use_uid表示通过用户id,验证组成员身份。这一句话前面没有注释符号,说明系统已经强制要求执行su 操作用户必须属于wheel组。
若文件存在其他与pam_wheel.so相关的注释行(#auth sufficient pam_wheel.so trust use_uid),可取消注释·并调整为上述规范配置
- 将用户加入wheel组
对允许使用su 切换为root的用户,执行命令usermod -G wheel用户名(例如:usermod -G wheel user1),将其加入wheel组,使其获得su至root的权限
通过以上配置,非wheel组,使其获得su 至root的权限。
发现B用户已经可以进行su 命令的使用了
检查Grub/Lilo密码
操作目的:
查看系统引导管理器是否设置密码
检查方法
使用命令:“cat /etc/grub.conf | grep password”查看grub是否设置密码
使用命令:“cat /etc/lilo.conf | grep password”查看lilo是否设置密码
加固方法
Vi编辑 /etc/grub.conf
Splashimage 这个参数下一行添加:password密码
如果需要md5加密,可以添加一行:password --md5 密码
Vi编辑/etc/lilo.conf
Password=密码
发现上述的方法已经不适用于新版kali
所以又找了一个方法
检查GBUB2是否设置密码
Sudo grep -i ‘password_pbkdf2’ /boot/grub/grub.cfg
在 GRUB2 中,password_pbkdf2 用于标识通过 PBKDF2 算法加密的启动密码配置。
这条命令通过搜索 GRUB2 配置文件中是否存在 password_pbkdf2 相关内容,判断系统是否为 GRUB2 设置了加密启动密码。若有对应输出,说明已设置;若无输出,则表示未配置密码。
设置GBUB2密码(正确加固方法)
- 生成加密密码:
执行命令生成PBKDF2加密密码,按提示输入密码,添加或修改以下内容(将加密字符串替换为实际生成的内容)GRUB_ENABLE_CRYPTODISK=y
GBUB_PASSWORD=”grub.pbkdf2.sha512. ………”#填入生成的加密字符串
Snmp团体字
操作目的:
如果打开了snmp协议,snmp团体字设置不能使用默认的团体字
检查方法:
查看配置文件 cat /etc/snmp/snmpd.conf
加固方法:
Vi编辑 /etc/snmp/snmpd.cof 文件
应禁止使用public.private 默认团体字,使用用户自定义的团体字,例如将以下设置中的public替换为用户自定义的团体字:com2sec notConfig notConfigUser default public
编辑文件:
bash
sudo vi
/etc/snmp/snmpd.conf
2. 添加配置:
在文件中添加:
Conf
com2sec notConfigUser default YourCustomCommunity # 将 YourCustomCommunity 替换为自定义强团体字(如包含大小写字母、数字、符号)
access notConfigGroup "" any noauth exact all none none
3. 保存退出:按 Esc,输入 :wq 保存并退出。
4. 重启服务:bash

sudo
systemctl restart snmpd
弱口令审计
检查方法:
john /etc/shadow –single
john /etc/shadow –wordlist=pass.dic
加固方法:
使用“passwd 用户名” 命令为用户设置复杂密码
若显示!! *表示密码未设置,或者密码已经锁定,无有效哈希可破解
服务进程
Linux系统的服务进程
系统守护进程(服务)
服务就是运行在网络服务器上监听用户请求的进程
服务就是通过端口号来区分的
常见的服务及其对应端口号
ftp:21
ssh:22
telnet:23
smtp:25
ssl:443
http(www):80
pop3:110
系统守护进程(服务)
在unix/linux系统中,服务是一般通过inted进程或者启动脚本来启动。
通过inted来启动的服务可以通过在/etc/inted.conf文件进行注释来禁用。
通过启动脚本启动的服务可以通过改变脚本名称的方式禁用。
查看linux进程的命令
检查ssh服务
操作目的:对ssh服务进行安全检查
检查方法:
使用命令“cat /etc/ssh/sshd_config”查看配置文件
加固方法:
使用命令“vi /etc/ssh/sshd_config”编辑配置文件
- 不允许root直接登录 设置“PermitRootLogin”的值为no
无法通过ssh进行远程登陆
修改SSH使用的协议版本 设置“Protocol” 的版本为2,如果没有这一行,直接添加这一行。
- 修改允许密码错误次数(默认6次)设置“MaxAuthTries” 值为3
Tcp Wrapper
操作目的:
使用tcp wrapper 对 libwrap库支持的程序做访问控制
检查方法:
使用命令“vi /etc/hosts.allow” 和 “cat /etc/hosts.deny” 查看配置
加固方法:
使用命令“vi /etc/hosts.allow” 和”vi /etc/hosts.deny” 修改配置
- 若允许 Windows 主机访问 Linux 虚拟机的 SSH:
- 查看 Windows 主机 IP:按 Win + R,输入 cmd 打开命令提示符,执行 ipconfig,找到 IPv4 地址(如 192.168.1.100)。
- 在 Linux 虚拟机的 hosts.allow 中填写:sshd:Windows主机的IPv4地址(例如 sshd:192.168.1.100),表示仅允许该 Windows 主机 IP 访问 Linux 的 SSH 服务。
- 若允许其他设备访问:
- 同理,获取对应设备的 IP(如另一台 Linux 服务器、手机等),填写到 hosts.allow 中。
最终目的是:填写 “希望被允许连接到 Linux 虚拟机 SSH 服务的设备 IP”,而非固定填主机或虚拟机 IP,需根据实际访问需求决定。
Vi /etc/hosts.allow
按i 进入编辑模式
加入: sshd:IP地址
Vi /etc/hosts.deny
按I 进入编辑模式
Sshd:ALL
(该配置为仅允许特定ip地址访问ssh)
NFS共享
操作目的:
查看NFS共享
检查方法:
使用命令“exportfs” 查看NFS输出的共享文件
加固方法:
使用命令:“vi /etc/exports”编辑配置文件,删除不必要的共享
如果发现配置文件里面没有命令,说明你没有配置过共享
如果有的话,进行删除,并用下面的两条命令进行执行
systemctl restart nfs-server
systemctl restart nfs-kernel-server
syslogd认证相关记录
操作目的:
查看所有日志记录
检查方法:
#cat /etc/rsyslog.conf | grep authpriv
查看是否有 authpriv.* /var/log/secure
加固方法:
添加相关日志的记录:
将authpirv 设备的任何级别的信息记录到 /var/log/secure发现本来就在这个路径当中,所以不用进行修改
Syslogd 日志设置
操作目的:
查看所有日志记录
检查方法:
使用命令:”cat /etc/rsyslog.conf” 查看rsyslogd
系统日志(默认) /var/log/messages
Cron日志(默认) /var/log/cron
安全日志(默认) /var/log/secure
加固方法:
添加相关日志的记录
- local1:属于为本地使用预留的日志设施(local0 - local7 )之一,没有固定的日志记录类型限制 ,可由用户自定义用于记录特定应用程序或服务产生的日志。例如,可以将自定义脚本的运行日志、一些特定业务系统的日志通过配置使用 local1 来记录,方便区分和管理。
- auth:主要记录与安全和认证相关的消息,比如用户登录、注销信息,身份验证成功或失败的记录等。像用户通过 SSH 登录系统、使用 sudo 命令提权等操作产生的相关认证信息,通常会由 auth 设施来记录 。不过,对于一些更私密的安全认证信息,会使用 authpriv 设施记录。
限制ctrl+alt+del命令
- 操作目的:
防止误使用ctrl+alt+del重启命令
检查方法
使用命令“cat /etc/inittab | grep ctrlaltdel” 查看输入行是否被注释
加固方法:
先使用命令“vi /etc/inittab” 编辑配置文件,在行开头添加注释符号“#”,
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now,在使用命令“init q” 应用设置
新旧系统判断
从系统初始化机制来看,当前填写方式需结合系统类型判断:
- 若系统使用 systemd(多数新 Linux 发行版,如 CentOS 7+、Ubuntu 16.04+):
/etc/inittab 已不再生效(图中文件开头也提示 inittab is no longer used when using systemd),此时即使注释 #ca::ctrlaltdel:/sbin/shutdown -t3 -r now,也无法限制 Ctrl+Alt+Del。需通过 systemd 机制处理,例如:bash
systemctl mask ctrl-alt-del.target # 屏蔽 Ctrl+Alt+Del 对应的系统目标
- 若系统仍使用传统初始化(极老旧系统):
在 /etc/inittab 中注释 ca::ctrlaltdel:/sbin/shutdown -t3 -r now 行是正确的,注释后 Ctrl+Alt+Del 的重启功能会被禁用,后续执行 init q 刷新配置即可生效。因此,需先确认系统初始化类型:新系统需用 systemd 方案,老旧系统此填写有效
查看发现是属于新版本的
这个是新版本的教程
- 屏蔽 Ctrl+Alt+Del 对应的系统目标:
bash
systemctl mask ctrl-alt-del.target
执行此命令后,Ctrl+Alt+Del 的重启功能会被禁用。
- 验证状态(可选):
bash
systemctl status ctrl-alt-del.target
若显示 masked,则表示屏蔽成功。
此方法适配 systemd 初始化机制,是 CentOS 7 等新系统限制 Ctrl+Alt+Del 的正确操作。
发现虚拟机已经禁止了这个命令,执行成功。
服务进程安全
关闭不必要的服务
- 使用服务:“who -r” 查看当前init级别
- 使用命令“chkconfig --list”查看所有服务的状态
- 使用命令“chkconfig -level <init级别> <服务名> on | off | reset”设置服务在个init 级别下开机是否启动
禁止 httpd 服务在运行级别 3、5 开机启动:
chkconfig --level 35 httpd off
设置 sshd 服务在运行级别 2、3、4、5 开机启动:
chkconfig --level 2345 sshd on
恢复 network 服务默认启动设置:
chkconfig --level 3 network reset
完结撒花