Linux系统管理11——系统安全及应用
一、基本安全措施
1、系统账号清理
(1)将非登录用户的shell设为/sbin/nologin
·方法一: usermod -s
·方法二: chsh命令,交互式修改
·方法三: chsh -s
示例:
除了上述三种方法,也可以直接vi编辑/etc/passwd文件进行修改。
(2)锁定长期不使用的账号
·方法一: passwd -l (将在密文前增加2个“!”)解锁 passwd -u 查看passwd -S
·方法二: usermod -L(将在密文前增加1个“!”)解锁 usermod -U
示例:
1>锁定:
2>解锁:
注意:若用passwd -l命令对某账号进行锁定,若用usermod -U命令解锁,需要进行两次操作才可以。如下:
除了上述两种方法,也可以直接vi编辑/etc/shadow文件进行修改。
(3)删除无用的账号
·userdel [-r] 用户名 (此处不过多解释,详见Linux系统管理03)
(4)锁定账号文件 /etc/passwd、/etc/shadow
1>锁定:chattr +i /etc/passwd /etc/shadow
2>解锁:chattr -i /etc/passwd /etc/shadow
3>查看:lsattr /etc/passwd /etc/shadow
4>示例:
注意:锁定后即使是超户,也不能修改该文件,即不能创建、删除、修改用户信息。
2、密码安全控制
(1)设置密码有效期
1>修改某个已存在用户的密码有效期:
chage -M 天数 用户名
passwd -x 天数 用户名
2>示例:
2>设置今后添加用户时的默认密码有效期:
·方法:vi编辑/etc/login.defs文件,修改“PASS_MAX_DAY”后面的数值
·示例:
[[email protected] ~]# vi /etc/login.defs
将99999天改为60天
(2)要求用户下次登录时修改密码
1>方法:chage -d 0 用户名
2>示例:
[[email protected] ~]# chage -d 0 user1
3、命令历史限制
(1)减少历史的命令条数
1>方法一:vi编辑/etc/profile文件,修改“HISTSIZE=”后面的数值
2>方法二:export HISTSIZE=数值
2>示例:
·方法一:vi编辑/etc/profile文件,修改“HISTSIZE=100”
[[email protected] ~]# vi /etc/profile
[[email protected] ~]# source /etc/profile 使/etc/profile配置文件生效,此时全局生效
·方法二:export HISTSIZE=100
[[email protected] ~]# export HISTSIZE=100 仅当前用户环境下生效
(2)注销时自动清空历史命令
1>方法:vi编辑宿主目录下的“.bash_logout”文件,添加“history -c”
2>示例:设置amber用户注销时自动清空历史命令
[[email protected] ~]# vi ~amber/.bash_logout
4、终端自动注销
(1)方法一:vi编辑/etc/profile文件,添加“TMOUT=数值”
(2)方法二:export TMOUT=数值
(3)示例:闲置600秒后自动注销
·方法一:vi编辑/etc/profile文件,添加“TMOUT=600”
[[email protected] ~]# vi /etc/profile
[[email protected] ~]# source /etc/profile 使/etc/profile配置文件生效,此时全局生效
·方法二:export TMOUT=600
[[email protected] ~]# export TMOUT=600 仅当前用户环境下生效
二、切换用户 su命令
1、作用:切换用户(Substitute User)
2、格式:su [-] 目标用户 (有“-”初始化环境变量,无“-”环境变量不改变)
3、查看su操作记录
安全日志文件:/var/log/secure
三、提升权限sudo命令
1、su命令的缺点:
在使用su命令时,不指定用户名默认切换至root用户,需要输入root密码,但实际生产中root密码是不可以被广泛告知的。如果需要执行root用户才有权限的命令,需要通过sudo命令或wheel组的设置来实现。
2、sudo命令
(1)作用:以其他用户身份(默认root身份)执行授权的命令
(2)用法:
sudo 授权命令
默认设置为首次执行时,需输入当前用户的登录密码,5分钟内再次执行sudo命 令时则无需再输入密码。
(3)配置sudo授权
1>方法一:添加单个用户的sudo授权
·visudo或者vi /etc/sudoers(效果相同),添加配置内容
·格式:用户 主机名列表=命令程序列表,命令前加“!”表示“除了”此命令
示例:
2>方法二:批量授权
·wheel组
(将希望提权的用户加入wheel组,略)
·别名
·根据示例以及实际需求,设置别名。(建议先复制行,再粘贴修改)
·设置别名后,添加格式:
用户别名 主机别名=命令别名(所有别名均大写)
(4)查看sudo操作记录
·方法:
第一步:visudo或者vi /etc/sudoers 添加“Defaults logfile=/var/log/sudo”
第二步:cat /var/log/sudo
示例:启用Defaults logfile配置,给amber用户所有/sbin/以及/usr/sbin下的命令执行权限,除了关机以及重启。
[[email protected] ~]# visudo
(5)查询授权操作 sudo -l
示例:
四、PAM安全认证
1、su命令的安全隐患
默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户(如root)的登录密码,带来安全风险。为了增强su命令的使用控制,可以借助PAM认证模块,只允许极个别用户使用su命令进行切换。
2、可插拔认证模块PAM(Pluggable Authentication Modules)
(1)PAM简介
PAM是一种高效而且灵活便利的用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式。
PAM提供了对所有服务进行认证的中央机制,适用于login,远程登录(telent,rlogin,fsh,ftp),su等应用程序。系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略。
(2)PAM认证原理
PAM认证一般遵循的顺序:Service(服务)→PAM→pam_*.so
PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(32位系统位于/lib/security下,64位系统位于/lib64/security下)进行安全认证。下图为Linux x86_64位系统中PAM的配置文件:
用户访问服务器的时候,服务器的某一个服务进程把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。
如果想查看某个程序是否支持PAM认证,可以用ls命令进行查看,如查看su是否支持PAM模块认证:ls /etc/pam.d|grep su
3、PAM认证的构成
·每一行都是一个独立的认证过程
·每一行可以区分为三个字段:认证类型、控制类型、PAM模块及其参数
示例:查看su的PAM配置文件
4、常见的四种认证类型
(1)auth 认证管理(authentication management)
·作用:接受用户名和密码,进而对该用户的密码进行认证
(2)account 账户管理(account management)
·作用:检查账户是否被允许登录系统,账号是否已过期,账号的登录是否有时间段的 限制等
(3)password 密码管理(password management)
·作用:主要是用来修改用户的密码
(4)session 会话管理(session management)
·作用:主要是提供对会话的管理和记账(accounting)
认证类型 |
意义 |
作用 |
auth |
认证管理 |
接受用户名和密码,进而对该用户的密码进行认证 |
account |
账户管理 |
检查账户是否被允许登录系统,账号是否已过期,账号的登录是否有时间段的限制等 权限 |
password |
密码管理 |
主要是用来修改用户的密码 |
session |
会话管理 |
主要是提供对会话的管理和记账 |
5、常见的五种控制类型
(1)required 验证失败时仍然继续,但返回Fail
(2)requisite 验证失败则立即结束整个验证过程,返回Fail
(3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
(4)optional 不用于验证,只是显示信息(通常用于session类型)
(5)include 不进行认证,转到后面PAM模块进行认证
6、使用PAM认证模块,限制某个命令或是服务的使用权限
(1)vi编辑该命令在/etc/pam.d/下对应的配置文件,启用pam_wheel模块
(2)添加授权用户到wheel组
(3)示例:设置仅允许用户amber和user1使用su命令进行切换
五、开关机安全控制
1、调整BOIS引导设置
(1)将第一引导设备设为当前系统所在硬盘
(2)禁止其他设备(光盘、U盘、网络)引导系统
(3)将安全级别设为setup,并设置管理员密码
2、禁用重启热键Ctrl+Alt+Del
(1)目的:避免用户误操作
(2)方法:vi编辑/etc/init/control-alt-delete.conf,将最后两行改为注解
[[email protected] ~]# init q 不重启,即时生效配置文件
3、gurb菜单限制
(1)未经授权禁止修改启动参数(第一个“title”前加密码)
(2)未经授权禁止进入指定系统(每个“title”后加密码)
(3)密码设置方式
1>password 明文串
2>password --md5 加密密码串
·使用grub-md5-crpypt命令获取加密密码串
·将加密密码串复制进grub.conf文件
六、终端登录安全控制
1、减少开放终端个数
(1)方法:vi编辑/etc/init/start-ttus.conf以及/etc/sysconfig/init两个配置文件
(2)示例:设置所用用户仅可从tty1、tty2、tty3三个终端登录
重启后,所有用户仅可从tty1、tty2、tty3登录
2、限制root只在安全终端登录
(1)方法:vi编辑/etc/securetty配置文件,将禁止的终端注解掉
(2)示例:禁止root用户从tty2、tty3终端登录
此文件修改后立即生效
3、禁止普通用户登录
(1)方法:touch /etc/nologin,删除/etc/nologin这个空文件即可恢复。
(2)示例:
七、弱口令检测 JR(Joth the Ripper)
1、JR(Joth the Ripper)简介
·一款密码分析工具,支持字典式的暴力破解
·通过对shadow文件的口令分析,可以检测密码
·官方网站:http://crushlinux.openwall.com/john/
2、安装JR工具
(1)tar包解压
(2)进到解压后的src目录下,执行make clean
(3)进到解压后的run目录下,执行命令
字典式暴力破解,可添加内容至字典
查看破解记
清空破解记录
八、端检测 NMAP
1、NMAP简介
·一款强大的网络扫描、安全检测工具
·官方网站:http://nmap.org/
·可从光盘中安装nmap-5.51-3.el6.x86_64.rpm
2、NMAP的扫描语法
nmap [扫描类型] [选项] <扫描目标>
3、常用的扫描类型
-sS TCP SYN扫描(半开)
-sT TCP链接扫描(全开)
-sF TCP FIN扫描
-sU UDP扫描
-sP ICMP扫描
-s0 跳过ping检测【较少使用】
4、常用选项:
-n 禁止DNS反向解析
-p 指定端口号
安装nmap
1、扫描本机开放了哪些TCP端口、UDP端口
2、检测当前192.168.1.0/24网段有哪些主机提供FTP服务
3、检测192.168.1.0/24网段有哪些存活主机
4、检测192.168.1.100~254/24有哪些主机开启了文件共享服务
【课外知识补充】(来自百度百科)
·TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
·TCP三次握手的过程如下:
客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established 状态。
三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。
ACK表示Acknowledgment Number字段有意义
PSH表示Push功能,RST表示复位TCP连接
SYN表示SYN报文(在建立TCP连接的时候使用)
FIN表示没有数据需要发送了(在关闭TCP连接的时候使用)
·UDP(User Datagram Protocol)协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。
·ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
·Linux常用端口:
端口号码 / 层 |
名称 |
注释 |
1 |
tcpmux |
TCP 端口服务多路复用 |
5 |
rje |
远程作业入口 |
7 |
echo |
Echo 服务 |
9 |
discard |
用于连接测试的空服务 |
11 |
systat |
用于列举连接了的端口的系统状态 |
13 |
daytime |
给请求主机发送日期和时间 |
17 |
qotd |
给连接了的主机发送每日格言 |
18 |
msp |
消息发送协议 |
19 |
chargen |
字符生成服务;发送无止境的字符流 |
20 |
ftp-data |
FTP 数据端口 |
21 |
ftp |
文件传输协议(FTP)端口;有时被文件服务协议(FSP)使用 |
22 |
ssh |
安全 Shell(SSH)服务 |
23 |
telnet |
Telnet 服务 |
25 |
smtp |
简单邮件传输协议(SMTP) |
37 |
time |
时间协议 |
39 |
rlp |
资源定位协议 |
42 |
nameserver |
互联网名称服务 |
43 |
nicname |
WHOIS 目录服务 |
49 |
tacacs |
用于基于 TCP/IP 验证和访问的终端访问控制器访问控制系统 |
50 |
re-mail-ck |
远程邮件检查协议 |
53 |
domain |
域名服务(如 BIND) |
63 |
whois++ |
WHOIS++,被扩展了的 WHOIS 服务 |
67 |
bootps |
引导协议(BOOTP)服务;还被动态主机配置协议(DHCP)服务使用 |
68 |
bootpc |
Bootstrap(BOOTP)客户;还被动态主机配置协议(DHCP)客户使用 |
69 |
tftp |
小文件传输协议(TFTP) |
70 |
gopher |
Gopher 互联网文档搜寻和检索 |
71 |
netrjs-1 |
远程作业服务 |
72 |
netrjs-2 |
远程作业服务 |
73 |
netrjs-3 |
远程作业服务 |
73 |
netrjs-4 |
远程作业服务 |
79 |
finger |
用于用户联系信息的 Finger 服务 |
80 |
http |
用于万维网(crushlinux)服务的超文本传输协议(HTTP) |
88 |
kerberos |
Kerberos 网络验证系统 |
95 |
supdup |
Telnet 协议扩展 |
101 |
hostname |
SRI-NIC 机器上的主机名服务 |
102/tcp |
iso-tsap |
ISO 开发环境(ISODE)网络应用 |
105 |
csnet-ns |
邮箱名称服务器;也被 CSO 名称服务器使用 |
107 |
rtelnet |
远程 Telnet |
109 |
pop2 |
邮局协议版本2 |
110 |
pop3 |
邮局协议版本3 |
111 |
sunrpc |
用于远程命令执行的远程过程调用(RPC)协议,被网络文件系统(NFS)使用 |
113 |
auth |
验证和身份识别协议 |
115 |
sftp |
安全文件传输协议(SFTP)服务 |
117 |
uucp-path |
Unix 到 Unix 复制协议(UUCP)路径服务 |
119 |
nntp |
用于 USENET 讨论系统的网络新闻传输协议(NNTP) |
123 |
ntp |
网络时间协议(NTP) |
137 |
netbios-ns |
在 红帽企业 Linux 中被 Samba 使用的 NETBIOS 名称服务 |
138 |
netbios-dgm |
在 红帽企业 Linux 中被 Samba 使用的 NETBIOS 数据报服务 |
139 |
netbios-ssn |
在 红帽企业 Linux 中被 Samba 使用的 NETBIOS 会话服务 |
143 |
imap |
互联网消息存取协议(IMAP) |
161 |
snmp |
简单网络管理协议(SNMP) |
162 |
snmptrap |
SNMP 的陷阱 |
163 |
cmip-man |
通用管理信息协议(CMIP) |
164 |
cmip-agent |
通用管理信息协议(CMIP) |
174 |
mailq |
MAILQ 电子邮件传输队列 |
177 |
xdmcp |
X 显示管理器控制协议(XDMCP) |
178 |
nextstep |
NeXTStep 窗口服务器 |
179 |
bgp |
边界网络协议 |
191 |
prospero |
Prospero 分布式文件系统服务 |
194 |
irc |
互联网中继聊天(IRC) |
199 |
smux |
SNMP UNIX 多路复用 |
201 |
at-rtmp |
AppleTalk 选路 |
202 |
at-nbp |
AppleTalk 名称绑定 |
204 |
at-echo |
AppleTalk echo 服务 |
206 |
at-zis |
AppleTalk 区块信息 |
209 |
qmtp |
快速邮件传输协议(QMTP) |
210 |
z39.50 |
NISO Z39.50 数据库 |
213 |
ipx |
互联网络分组交换协议(IPX),被 Novell Netware 环境常用的数据报协议 |
220 |
imap3 |
互联网消息存取协议版本3 |
245 |
link |
LINK / 3-DNS iQuery 服务 |
347 |
fatserv |
FATMEN 文件和磁带官吏服务器 |
363 |
rsvp_tunnel |
RSVP 隧道 |
369 |
rpc2portmap |
Coda 文件系统端口映射器 |
370 |
codaauth2 |
Coda 文件系统验证服务 |
372 |
ulistproc |
UNIX LISTSERV |
389 |
ldap |
轻型目录存取协议(LDAP) |
427 |
svrloc |
服务位置协议(SLP) |
434 |
mobileip-agent |
可移互联网协议(IP)代理 |
435 |
mobilip-mn |
可移互联网协议(IP)管理器 |
443 |
https |
安全超文本传输协议(HTTP) |
444 |
snpp |
小型网络分页协议 |
445 |
microsoft-ds |
通过 TCP/IP 的服务器消息块(SMB) |
464 |
kpasswd |
Kerberos 口令和钥匙改换服务 |
468 |
photuris |
Photuris 会话钥匙管理协议 |
487 |
saft |
简单不对称文件传输(SAFT)协议 |
488 |
gss-http |
用于 HTTP 的通用安全服务(GSS) |
496 |
pim-rp-disc |
用于协议独立的多址传播(PIM)服务的会合点发现(RP-DISC) |
500 |
isakmp |
互联网安全关联和钥匙管理协议(ISAKMP) |
535 |
iiop |
互联网内部对象请求代理协议(IIOP) |
538 |
gdomap |
GNUstep 分布式对象映射器(GDOMAP) |
546 |
dhcpv6-client |
动态主机配置协议(DHCP)版本6客户 |
547 |
dhcpv6-server |
动态主机配置协议(DHCP)版本6服务 |
554 |
rtsp |
实时流播协议(RTSP) |
563 |
nntps |
通过安全套接字层的网络新闻传输协议(NNTPS) |
565 |
whoami |
whoami 用户ID列表 |
587 |
submission |
邮件消息提交代理(MSA) |
610 |
npmp-local |
网络外设管理协议(NPMP)本地 / 分布式排队系统(DQS) |
611 |
npmp-gui |
网络外设管理协议(NPMP)GUI / 分布式排队系统(DQS) |
612 |
hmmp-ind |
HyperMedia 管理协议(HMMP)表示 / DQS |
631 |
ipp |
互联网打印协议(IPP) |
636 |
ldaps |
通过安全套接字层的轻型目录访问协议(LDAPS) |
674 |
acap |
应用程序配置存取协议(ACAP) |
694 |
ha-cluster |
用于带有高可用性的群集的心跳服务 |
749 |
kerberos-adm |
Kerberos 版本5(v5)的“kadmin”数据库管理 |
750 |
kerberos-iv |
Kerberos 版本4(v4)服务 |
765 |
webster |
网络词典 |
767 |
phonebook |
网络电话簿 |
873 |
rsync |
rsync 文件传输服务 |
992 |
telnets |
通过安全套接字层的 Telnet(TelnetS) |
993 |
imaps |
通过安全套接字层的互联网消息存取协议(IMAPS) |
994 |
ircs |
通过安全套接字层的互联网中继聊天(IRCS) |
995 |
pop3s |
通过安全套接字层的邮局协议版本 3(POPS3) |