Liunx系统安全与账号应用
目录
Liunx系统安全与账号应用
常见的非登录用户账号包括 bin、daemon、adm、lp、mail 等。
chattr命令 -更改文件或目录属性的工具,这些属性可以提供额外的安全性和控制功能
基本语法:
chattr [选项] [符号] [属性] 文件名
选项:
-R:递归处理目录及其所有子文件。
-V:显示详细信息,解释执行了哪些操作。
-f:抑制错误信息,只显示成功的更改。
符号:
+:添加属性。
-:移除属性。
=:设置属性为指定的值。
属性:
a:追加模式(append only),只能向文件末尾追加数据,不能修改或删
除已有内容。
i:不可修改(immutable),文件不能被修改、删除、重命名或链接。
d:禁止备份(no dump),在执行dump备份程序时会被忽略。
s:安全删除(secure deletion),文件删除后数据会被覆盖,无法恢复。
u:不可恢复删除(undeletable),删除文件时保存其内容以便恢复。
c:压缩(compress),文件会在磁盘上被压缩保存。
A:不更新atime(no atime updates),访问文件时不更新其访问时间。
基本语法:
chattr [选项] [符号] [属性] 文件名
选项:
-R:递归处理目录及其所有子文件。
-V:显示详细信息,解释执行了哪些操作。
-f:抑制错误信息,只显示成功的更改。
符号:
+:添加属性。
-:移除属性。
=:设置属性为指定的值。
属性:
a:追加模式(append only),只能向文件末尾追加数据,不能修改或删
除已有内容。
i:不可修改(immutable),文件不能被修改、删除、重命名或链接。
d:禁止备份(no dump),在执行dump备份程序时会被忽略。
s:安全删除(secure deletion),文件删除后数据会被覆盖,无法恢复。
u:不可恢复删除(undeletable),删除文件时保存其内容以便恢复。
c:压缩(compress),文件会在磁盘上被压缩保存。
A:不更新atime(no atime updates),访问文件时不更新其访问时间。
可以通过编辑:/etc/login.defs文件设置当前密码的有效期限
PASS_MAX_DAYS:密码可以使用的最多天数
PASS_MIN_DAYS:密码更改之间允许的最小天数
PASS_MIN_LEN:可接受的最小密码长度
PASS_WARN_AGE:密码过期前发出警告的天数
PASS_MAX_DAYS:密码可以使用的最多天数
PASS_MIN_DAYS:密码更改之间允许的最小天数
PASS_MIN_LEN:可接受的最小密码长度
PASS_WARN_AGE:密码过期前发出警告的天数
chage命令 -用来更改linux用户密码到期信息,包括密码修改间隔最短、最长日期、密码失效时间等等
格式:
chage [参数] 用户名
【参数】:
-m
密码可更改的最小天数,为0表示可以随时更改
-M
密码有效期最大天数
-W
密码到期前提示
-E
账号到期时间
-d
上一次更改日期,0表示下次登录强制修改密码
-l
列出用户密码时效信息
eg:
强制要求用户 zhangsan 下次登录时重设密码【常用】
chage -d 0 zhangsan
设置zz用户两次密码更改之间间隔最小天数
chage -m 2 zz
设置zz用户两次密码更改之间间隔最大天数
chage -M 14 zz
设置zz用户密码到期2035-6-1
chage -E 2035-6-1 zz
格式:
chage [参数] 用户名
【参数】:
-m
密码可更改的最小天数,为0表示可以随时更改
-M
密码有效期最大天数
-W
密码到期前提示
-E
账号到期时间
-d
上一次更改日期,0表示下次登录强制修改密码
-l
列出用户密码时效信息
eg:
强制要求用户 zhangsan 下次登录时重设密码【常用】
chage -d 0 zhangsan
设置zz用户两次密码更改之间间隔最小天数
chage -m 2 zz
设置zz用户两次密码更改之间间隔最大天数
chage -M 14 zz
设置zz用户密码到期2035-6-1
chage -E 2035-6-1 zz
history命令 -记录命令历史记录并将其存储在文件 (~/.bash_history ) 中
查看所有命令
history
显示最新10条命令
history 10
搜索命令历史
history | grep "关键字"
执行历史记录中第100号命令
!100
运行以特定单词开头的最后一个命令
!ls
临时修改:
lHISTSIZE=200
永久修改:
sed -i 's/^HISTSIZE=1000/HISTSIZE=200/' /etc/profile
查看所有命令
history
显示最新10条命令
history 10
搜索命令历史
history | grep "关键字"
执行历史记录中第100号命令
!100
运行以特定单词开头的最后一个命令
!ls
临时修改:
lHISTSIZE=200
永久修改:
sed -i 's/^HISTSIZE=1000/HISTSIZE=200/' /etc/profile
su -命令
限制用户使用su命令切换到root用户:
修改sudoers文件、
使用sudo命令的策略配置
编辑sudoers文件:(命令:sudo visudo)
例如,如果允许用户mt使用su切换到root,但不允许其他用户这样做,可以添加如下行:
lmt ALL=(ALL) NOPASSWD: ALL
这行配置允许john执行任何命令而不需要密码。如果想限制只能使用su,可以用这个配置:
lmt ALL=(ALL) NOPASSWD: /usr/bin/su
限制用户使用su命令切换到root用户:
修改sudoers文件、
使用sudo命令的策略配置
编辑sudoers文件:(命令:sudo visudo)
例如,如果允许用户mt使用su切换到root,但不允许其他用户这样做,可以添加如下行:
lmt ALL=(ALL) NOPASSWD: ALL
这行配置允许john执行任何命令而不需要密码。如果想限制只能使用su,可以用这个配置:
lmt ALL=(ALL) NOPASSWD: /usr/bin/su
PAM模块 –是Linux 系统可插拔认证模块,是一种高效而且灵活便利的用户级别的认证方式,它也是当前 Linux 服务器普遍使用的认证方式
su 的 PAM 配置文件的具体内容如下所示(部分)
cat /etc/pam.d/su
每一行都是一个独立的认证过程;每一行可以区分为三个字段:
认证类型
控制类型
PAM 模块及其参数
cat /etc/pam.d/su
每一行都是一个独立的认证过程;每一行可以区分为三个字段:
认证类型
控制类型
PAM 模块及其参数
PAM认证类型:
PAM 认证类型包括四种:
认证管理(authentication management):
接受用户名和密码,进而对该用户的密码进行认证;
帐户管理(account management):
检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等;
密码管理(password management):
主要是用来修改用户的密码;
会话管理(session management):
主要是提供对会话的管理和记账。
PAM 认证类型包括四种:
认证管理(authentication management):
接受用户名和密码,进而对该用户的密码进行认证;
帐户管理(account management):
检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等;
密码管理(password management):
主要是用来修改用户的密码;
会话管理(session management):
主要是提供对会话的管理和记账。
验证类型返回结果:
控制类型也可以称做 Control Flags,用于 PAM 验证类型的返回结果。
1)required 验证失败时仍然继续,但返回 Fail
2)requisite 验证失败则立即结束整个验证过程,返回 Fail
3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
4)optional 不用于验证,只是显示信息(通常用于 session 类型)
控制类型也可以称做 Control Flags,用于 PAM 验证类型的返回结果。
1)required 验证失败时仍然继续,但返回 Fail
2)requisite 验证失败则立即结束整个验证过程,返回 Fail
3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
4)optional 不用于验证,只是显示信息(通常用于 session 类型)
sudo命令 –提升执行权限
配置文件/etc/sudoers 中,授权记录的基本配置格式【执行“:w!”命令来强制保存操作】
如下所示。
命令:user MACHINE=COMMANDS
授权配置主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行哪些命令
各部分含义:
用户(user):
直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。
主机(MACHINE):
使用此配置文件的主机名称。此部分主要是方便在多个主机间共用同一份 sudoers 文件,一般设为 localhost 或者实际的主机名即可。
命令(COMMANDS):
允许授权的用户通过 sudo 方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。
配置文件/etc/sudoers 中,授权记录的基本配置格式【执行“:w!”命令来强制保存操作】
如下所示。
命令:user MACHINE=COMMANDS
授权配置主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行哪些命令
各部分含义:
用户(user):
直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。
主机(MACHINE):
使用此配置文件的主机名称。此部分主要是方便在多个主机间共用同一份 sudoers 文件,一般设为 localhost 或者实际的主机名即可。
命令(COMMANDS):
允许授权的用户通过 sudo 方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。
“sudo -l”命令。
查看用户自己获得哪些 sudo 授权
未授权的用户将会得到“may not run sudo”的提示
“sudo -l”命令。
查看用户自己获得哪些 sudo 授权
未授权的用户将会得到“may not run sudo”的提示
开启sudo日志
1)创建sudo.log文件: touch /var/log/sudo.log
2)修改文件权限: chmod root:root /var/log/sudo.log
3)修改rsyslog配置文件:vim /etc/rsyslog.conf,添加以下内容:
local2.debug /var/log/sudo.log //※空白处用“Tab”键补齐,不可以用空格
4)重启rsyslog服务:systemctl restart rsyslog
5)修改sudo配置文件:visudo.添加以下内容:
Defaults logfile=/var/log/sudo.log
Defaults loglinelen=0
Defaults !syslog
1)创建sudo.log文件: touch /var/log/sudo.log
2)修改文件权限: chmod root:root /var/log/sudo.log
3)修改rsyslog配置文件:vim /etc/rsyslog.conf,添加以下内容:
local2.debug /var/log/sudo.log //※空白处用“Tab”键补齐,不可以用空格
4)重启rsyslog服务:systemctl restart rsyslog
5)修改sudo配置文件:visudo.添加以下内容:
Defaults logfile=/var/log/sudo.log
Defaults loglinelen=0
Defaults !syslog
GRUB引导参数
在Ubuntu及其衍生版本中,使用以下命令来安装:
apt install grub2-common
创建GRUB 菜单密码:
grub-mkpasswd-pbkdf2
在Ubuntu及其衍生版本中,使用以下命令来安装:
apt install grub2-common
创建GRUB 菜单密码:
grub-mkpasswd-pbkdf2
vim /etc/grub.d/00_header
添加如下内容
vim /etc/grub.d/00_header
添加如下内容
生成新的 grub.cfg 配置文件。
命令:grub-mkconfig
生成新的 grub.cfg 配置文件。
命令:grub-mkconfig
通过上述配置,重新开机进入 GRUB 菜单时,必须根据提示输入正确的 GRUB 密码
通过上述配置,重新开机进入 GRUB 菜单时,必须根据提示输入正确的 GRUB 密码
禁止root用户登录
编辑 PAM 配置文件。这个文件用于控制对系统的访问权限。
sudo vim /etc/security/access.conf
2. 添加禁止规则
在文件中添加以下行来禁止 root 用户从特定的终端登录。
例如,如果想禁止 root 用户从 tty5 和 tty6 登录,可以添加如下规则:
-:root:LOCAL
-:root:tty5
-:root:tty6
这里的 -: 表示拒绝访问,root 是用户名,LOCAL 表示本地登录,tty5 和 tty6 是特定的终端。
如果还想禁止 root 用户通过 SSH 登录,可以添加:
-:root:sshd
编辑 PAM 配置文件。这个文件用于控制对系统的访问权限。
sudo vim /etc/security/access.conf
2. 添加禁止规则
在文件中添加以下行来禁止 root 用户从特定的终端登录。
例如,如果想禁止 root 用户从 tty5 和 tty6 登录,可以添加如下规则:
-:root:LOCAL
-:root:tty5
-:root:tty6
这里的 -: 表示拒绝访问,root 是用户名,LOCAL 表示本地登录,tty5 和 tty6 是特定的终端。
如果还想禁止 root 用户通过 SSH 登录,可以添加:
-:root:sshd
禁止普通用户登录
建立/etc/nologin 文件即可。login 程序会检查/etc/nologin 文件是否存在,如果存在,则拒绝普通用户登录系统(root 用户不受限制)。
【命令:touch /etc/nologin】
实际上是利用了 shutdown 延迟关机的限制机制,只建议在服务器维护期间临时使用。
当手动删除/etc/nologin 文件或者重新启动主机以后,即可恢复正常。
建立/etc/nologin 文件即可。login 程序会检查/etc/nologin 文件是否存在,如果存在,则拒绝普通用户登录系统(root 用户不受限制)。
【命令:touch /etc/nologin】
实际上是利用了 shutdown 延迟关机的限制机制,只建议在服务器维护期间临时使用。
当手动删除/etc/nologin 文件或者重新启动主机以后,即可恢复正常。
密码破解工具John【需apt下载】
cp /etc/shadow /root/shadow.txt //准备待破解的密码文件
john /root/shadow.txt //执行暴力破解
cp /etc/shadow /root/shadow.txt //准备待破解的密码文件
john /root/shadow.txt //执行暴力破解
检测的时间太长,可以 Ctrl+C组合键强行终止。破解出的密码信息自动保存到 john.pot 文件中
可以结合“--show”选项进行查看:
【john --show /root/shadow.txt /】
执行 john 程序时,可以结合“--wordlist=”选项来指定字典文件的位置,以便对指定的密码文件进行暴力分析。
john --wordlist=/usr/share/john/password.lst /root/shadow.txt
检测的时间太长,可以 Ctrl+C组合键强行终止。破解出的密码信息自动保存到 john.pot 文件中
可以结合“--show”选项进行查看:
【john --show /root/shadow.txt /】
执行 john 程序时,可以结合“--wordlist=”选项来指定字典文件的位置,以便对指定的密码文件进行暴力分析。
john --wordlist=/usr/share/john/password.lst /root/shadow.txt
端口扫描工具NMAP【需apt下载】
语法格式:
nmap [扫描类型] [选项] <扫描目标...>
其中,扫描目标可以是主机名、IP 地址或网络地址等,多个目标以空格分隔;
常用的选项有“-p”“-n”,分别用来指定扫描的端口、禁用反向 DNS 解析(以加快扫描速度);
比较常用的几种扫描类型如下。
-sS,TCP SYN 扫描(半开扫描):
l 只向目标发出 SYN 数据包,如果收到 SYN/ACK响应包就认为目标端口正在监听,
并立即断开连接;否则认为目标端口并未开放。
-sT,TCP 连接扫描:
这是完整的 TCP 扫描方式,用来建立一个 TCP 连接,如果成功则认为目标端口正在
监听服务,否则认为目标端口并未开放。
-sF,TCP FIN 扫描:
开放的端口会忽略这种数据包,关闭的端口会回应 RST 数据包。许多防火墙只对
SYN 数据包进行简单过滤,而忽略了其他形式的 TCP 攻击包。这种类型的扫描可间
接检测防火墙的健壮性。
-sU,UDP 扫描:
探测目标主机提供哪些 UDP 服务,UDP 扫描的速度会比较慢。
-sP,ICMP 扫描:
类似于 ping 检测,快速判断目标主机是否存活,不做其他扫描。
-P0,跳过 ping 检测:
这种方式认为所有的目标主机是存活的,当对方不响应 ICMP请求时,使用这种方式可以避免因无法 ping 通而放弃扫描。
语法格式:
nmap [扫描类型] [选项] <扫描目标...>
其中,扫描目标可以是主机名、IP 地址或网络地址等,多个目标以空格分隔;
常用的选项有“-p”“-n”,分别用来指定扫描的端口、禁用反向 DNS 解析(以加快扫描速度);
比较常用的几种扫描类型如下。
-sS,TCP SYN 扫描(半开扫描):
l 只向目标发出 SYN 数据包,如果收到 SYN/ACK响应包就认为目标端口正在监听,
并立即断开连接;否则认为目标端口并未开放。
-sT,TCP 连接扫描:
这是完整的 TCP 扫描方式,用来建立一个 TCP 连接,如果成功则认为目标端口正在
监听服务,否则认为目标端口并未开放。
-sF,TCP FIN 扫描:
开放的端口会忽略这种数据包,关闭的端口会回应 RST 数据包。许多防火墙只对
SYN 数据包进行简单过滤,而忽略了其他形式的 TCP 攻击包。这种类型的扫描可间
接检测防火墙的健壮性。
-sU,UDP 扫描:
探测目标主机提供哪些 UDP 服务,UDP 扫描的速度会比较慢。
-sP,ICMP 扫描:
类似于 ping 检测,快速判断目标主机是否存活,不做其他扫描。
-P0,跳过 ping 检测:
这种方式认为所有的目标主机是存活的,当对方不响应 ICMP请求时,使用这种方式可以避免因无法 ping 通而放弃扫描。