Linux系统安全和应用
目录
本章结构
账号安全控制
系统引导和登录控制
端口扫描
一、账号安全基本措施
1、系统账号清理
- 将非登录用户的Shell设为/sbin/nologin
- 锁定长期不使用的账号
- 删除无用的账号
- 锁定账号文件passwd、shadow
-
chattr i /etc/passwd
-
锁定文件
-
chattr -i /etc/passwd
-
解锁文件
-
lsattr [选项] [文件或目录]
-
查看锁定的状态(文件或目录的扩展属性)
2、密码安全控制
- 设置密码有效期
- 要求用户下次登录时修改密码
-
vi /etc/login.defs #适用于新建的用户
-
PASS_MAX_DAYS 30 #设置密码有效期30天 默认99999
-
PASS_MIN_DAYS 0 #表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0
-
PASS_MIN_LEN 5 #密码最小长度,对于root无效
-
注解:指定密码的最小长度,默认不小于 5 位,但是现在用户登录时验证已经被 PAM 模块取代,所以这个选项并不生效。
-
PASS_WARN_AGE 7 #指定在密码到期前多少天,系统就开始提醒用户密码即将到期,默认为 7 天。
-
chage -M 30 lisi
-
三十天后修改密码
-
chage -d 0 zhangsan
-
强制在下次登录时更改密码
3、命令历史限制
- 减少记录的命令条数
- 注销时自动清空命令历史
-
history
-
查看历史命令记录
-
-
减少历史命令记录的命令条数
-
vi /etc/profile 编辑环境变量
-
/HISTSIZE 搜索
-
HISTSIZE=10 设置命令只保存十条
-
source /etc/profile 加载文件在整个环境中识别
4、退出时自动清理历史命令
-
vim ~/.bash_logout
-
history -c 清空历史记录(缓存)
-
clear 自动清空缓存
5、关于环境变量的读取顺序:
- 用户登录
- 加载~/.bash_profile
- bash_profile中配置了首先是使~/.bashrc生效
- bashrc 用户登录时所执行的命令
- bash_logouot 用户登出时所执行的命令
- bash_history 当前用户使用命令的历史记录
6、终端自动注销
-
闲置600秒后自动注销
-
vim /etc/profile
-
export TMOUT=600
-
source /etc/profile 刷新
二、限制su命令用户
默认情况下,任何用户都允许使用 su 命令,从而有机会反复尝试其他用户(如 root) 的登录密码,这样带来了安全风险。为了加强 su 命令的使用控制,可以借助于 pam_wheel 认证模块,只允许极个别用户使用 su 命令进行切换。实现过程如下:将授权使用 su 命令 的用户添加到wheel 组,修改/etc/pam.d/su 认证配置以启用 pam_wheel 认证。
在/etc/pam.d/su文件里设置禁止用户使用su命令
-
vim /etc/pam.d/su
-
-
2 # auth sufficient pam_rootok.so
-
6 #auth required pam_wheel.so use_uid
a)以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
b)两行都注释也是运行所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)
c)如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令
d)如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。
-
这条使得wheel成员su到root不用输密码
-
auth sufficient pam_wheel.so trust use_uid
-
这条使得非wheel成员无法切换到root
-
auth required pam_wheel.so use_uid
三、PAM认证原理(了解)
1.PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_ *.so;
2. PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于
/lib64/security/下)进行安全认证。
3.用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM
模块也是不同的。
4.PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用
ls /etc/pam.d
第一列代表PAM认证模块类型
auth: 对用户身份进行识别,如提示输入密码,判断是否为root。
account: 对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
password: 使用用户信息来更新数据,如修改用户密码。
session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。
第二列代表PAM控制标记
required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
optional: 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型),
include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
第四列代表PAM模块的参数,这个需要根据所使用的模块来添加。
传递给模块的参数。参数可以有多个,之间用空格分隔开
四、sudo机制提升权限
1、sudo机制介绍
通过su命令可以非常方便地切换为另一个用户,但前提条件是必须知道目标用户的登录密码。例如,若要从zhangsan 用户切换为 root 用户,必须知道 root 用户的密码。对于生产环境中Linux 服务器,每多一个人知道特权密码,其安全风险也就增加一分。 有没有一种折中的办法,既可以让普通用户拥有一部分管理权限,又不需要将 root 用户的密码告诉他呢?案是肯定的,使用 sudo命令就可以提升执行权限。不过,需要由管理员预先进行授权,指定允许哪些用户以超级用户(或其他普通用户)的身份来执行哪些命令。
sudo的配置文件/etc/sudoers文件默认权限为440,需使用专门的visudo工具进行编辑。
也可以用vi进行编辑,但保存时必须执行":w!"命令来强制操作,否则系统将提示为只读文件而拒绝保存。
2、配置sudo
-
visudo 或 vim /etc/sudoers (保存需要强制保存)
-
用户/组名称 主机组(主机名)=(提权的权限身份-root) 赋权的使用命令(要以绝对路径的方式来写) 【可以为多个】
用户:直接授权指定的用户名,或采用"%组名"的形式(授权一个组的所有用户)
主机名:使用此规则的主机名,每配置过主机名时可以用locathost,有配过主机名则用实际的主机名,ALL代表带所有主机。
(用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令
命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需要填写命令程序的完整路径,多个命令之间以逗号进行分隔。 ALL代表所有命令
3、sudo参数命令
-
sudo [参数选项] 命令
-
-l 列出用户在主机上可用的和被禁止的命令;一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的;
-
-v 验证用户的时间戳;如果用户运行sudo后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo操作;用-v可以跟踪最新的时间戳;
-
-u 指定以以某个用户执行特定操作;(重要)
-
-k 删除时间戳,下一个sudo 命令要求用求提供密码;
4、启用sudo操作日志
-
visudo
-
Defaults logfile = "/var/log/sudq"
-
-
sudo日志记录以备管理员查看,应在/etc/sudoers 文件中增加“Defaults logfile”设置
-
如果已经启用 sudo 日志,则可以从/var/log/sudo 文件中看到用户的 sudo 操作记录。
-
注:启用日志:Defaults logfile=/var/log/sudo
-
另外一个方法是/var/log/secure 日志可查看到sudo操作用户步骤
五、nmap命令-网络端口扫描
可以使用NMAP扫描主机,主要输出的内容在于端口、协议、主机ip、是否存活
作用常见:
1、扫描指定协议(TCP/UDP)端口的母校IP、主机名、网络号是否开启
2、扫描注定的网段中那些主机是存活/开启的
-
常用的扫描类型
-
-sS,TCP SYN 扫描(半开扫描):只向目标发出 SYN 数据包,如果收到 SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。
-
tcp确定三次握手
-
-sT,TCP 连接扫描:这是完整的 TCP 扫描方式,用来建立一个 TCP 连接,如果 成功则认为目标端口正在监听服务,否则认为目标端口并未开放。
-
-sF,TCP FIN 扫描:开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对 SYN 数据包进行简单过滤,而忽略了其他形式的 TCP 攻击包。这种类型的扫描可间接检测防火墙的健壮性。
-
-sU,UDP 扫描:探测目标主机提供哪些 UDP 服务,UDP扫描的速度会比较慢。
-
-sP,ICMP 扫描:类似于 ping 检测,快速判断目标主机是否存活,不做其他扫描。
-
-P0,跳过 ping 检测:这种方式认为所有的目标主机是存活的,当对方不响应 ICMP 请求时,使用这种方式可以避免因无法 ping 通而放弃扫描。
nmap -sT 127.0.0.1 扫描常用的 TCP 端口
nmap -sU 127.0.0.1 扫描常用的 UDP 端口
nmap -sP 127.0.0.1 ICMP 扫描
六、netstat命令
查看当前操作系统的网络连接状态、路由表、接口统计等信息,它是了解网络状态及排除网络服务故障的有效工具
-
-n:以数字的形式显示相关的主机地址、端口等信息
-
-r:显示路由表信息
-
-a:显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)
-
-l:显示处于监听(Listening)状态的网络连接及端口信息。
-
-t:查看 TCP(Transmission Control Protocol,传输控制协议)相关的信息
-
-u:显示 UDP(User Datagram Protocol,用户数据报协议)协议相关的信息
-
-p:显示与网络连接相关联的进程号、进程名称信息(该选项需要 root 权限)
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhejic
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24