目录
一:账号安全控制
1.1系统账号清理
1.2密码安全控制
1.3命令历史限制
1.3.1减少记录的命令条数
1.3.2注销时自动清空命令历史
二:使用su命令切换用户
2.1用途及用法
2.2限制使用su命令的用户
三:Linux中的PAM安全认证
四:PAM认证原理及构成
4.1PAM认证的原理
4.2PAM认证的构成
五:使用sudo机制提升权限
5.1sudo机制提升权限
5.2别名设置
5.3查看sudo操作记录
六:系统弱口令检测
七:网络端口扫描
八:总结
引言:在生产环境中我们一般都是普通用户操作,不能使用root用户进行操作,所以需要给普通用户一些权力并进行安全操作。因此我们需要理解PAM认证的过程。
将非登录用户的shell设为/sbin/nologin
锁定长期不使用的账号
删除无用的账号
锁定账号文件passwd,shadow
锁定账号文件passwd无法创建新用户,可以修改已有用户的密码
锁定账号文件shadow无法创建新用户也不可以更改已有用户的密码
设置密码有效期
要求用户下次登录时修改密码
chage -M 日期 用户 【设置用户密码有效期】
chage -E xxxx-xx-xx 用户 【设置用户过期时间】
此方法适合已存在的用户
vi /etc/login.defs 【修改密码配置文件】
进入后默认为9999更改为60,在创建新用户,密码有效期将变为60天
此方法适合新建用户
vi /etc/profile 【编辑全局变量配置文件】
进入 vi /etc/profile 将HISTSIZE默认值修改为5, source刷新一下,此时在使用history查看将会只有5条命令。
vi ~/.bashrc 【进入编辑~/.bashrc文件】
重新启动后之前的命令全部清空
用途:substitute user,切换用户
格式:su - 目标用户
密码验证
root用户到任意用户,不验证密码
普通用户到任意用户,验证目标用户的密码
将允许使用su命令的用户加入wheel组
启用pam_wheel认证模块
su命令具有安全隐患
su命令使每个用户都具有反复尝试其他用户的登陆密码的能力,若是root用户,则风险更大。
所以需要加强su命令的使用控制,可以借助PAM认证模块,仅允许极个别指定用户可使用su命令进行切换
命令进行切换。实现过程如下:将授权使用su命令的用户添加到 wheel组,修改/etc/pam.d/su认证配置以启用pam wheel 认证。
在/etc/ pam.d/su文件里设置禁止用户使用su命令
vim /etc/pam.d/ su
#auth sufficient pam_ rootok.so
#auth required pam_ wheel.so use__uid
以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的
两行都注释也是运行所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam_rootok)
so模块的主要作用是使uid为o的用户,即root用户能够直接通过认证而不用输入密码如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令
如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令
示例:
将suangcaiyu用户加入wheel组中
进入vi /etc/pam.d/su
将这条命令前面的#号删除启动
得出结果:进入wheel组中的酸菜鱼密码输入正确可以切换用户,而没有进入wheel组中的liyu即使密码正确也不可以切换用户
说明在启用/etc/pam.d/su文件中那一行后,就会仅允许root和wheel组中的成员使用su命令
Linux-PAM,是linux可插拔认证模块,是一套可定制、可动态加载的共享库,使本地系统管理员可以随意选择程序的认证方式。
PAM使用/etc/pam. d/下的配置文件,来管理对程序的认证方式。应用程序调用相应的PAM配置文件,从而调用本地的认证模块,模块放置在/Lib64/security下,以加载动态库的形式进行认证。比如使用su命令时,系统会提示输入root用户的密码,这就是su命令通过调用PAM模块实现的。
一般遵循的顺序:
Service (服务) -->PAM (配置文件) --> pam_ *.so;
首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d 下),最后调用认证模块(位于/lib64/ security/下)进行安全认证。
3.用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。
查看某个程序是否支持PAM认证,可以用ls命令
ls /etc/pam.d | grep su
查看su的PAM配置文件:cat /etc/pam.d/su
每一行都是一个独立的认证过程
每一行可以区分为三个字段
认证类型
控制类型
PAM模块及其参数
第一列代表PAM认证模块类型
①auth:对用户身份进行识别,如提示输入密码,判断是否为root。
②account:对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
③password:使用用户信息来更新数据,如修改用户密码。
④session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。
第二列代表PAM控制标记
①required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
②requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
③sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
④optional:不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于 session 类型)。
⑤include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
第四列代表PAM模块的参数,这个需要根据所使用的模块来添加。
su命令的缺点
不需要进行命令的验证
sudo命令的用途及用法
用途:以其他用户身份(如root)执行授权的命令
用法:sudo 授权命令
visudo或者vi /etc/sudoers
记录格式 用户 主机名列表 = 命令程序列表
语法格式:
用户主机名-命令程序列表
用户主机名=(用户)命令程序列表
用户:直接授权指定的用户名,或采用"%组名"的形式(授权一个组的所有用户)
主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则代表所有主机
(用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令
命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号","进行分隔。ALL则代表系统中的所有命令
示例:
Tom ALL=/sbin/ifconfig
Jerry localhost=/sbin/*,!. /sbin/reboot, ! /sbin/poweroff 通配符"*"表示所有、取反符号"!”表示排除
%wheel ALL一NOPASSWD:ALL【取反优先级最高】
表示wheel组成员无需验证密码即可使用sudo执行任何命令
Mike ALL=(root)NOPASSWD: /bin/ki1l,/usr/bin/killallgpasswd -M lisi wheel 李四加入wheel组
案例:
先创建用户zhangsan和lisi
进入visudo 给zhangsan权限
lisi创建用户失败
当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名。用户、主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、 Cmnd Alias来进行设置。
查看组下面的用户
grep "wheel" /etc/group
用户别名的语法格式:
1 ) User_Alias用户别名:包含用户、用户组(8组名(使用%引导))、还可以包含其他其他已经用户的别名
User_Alias OPERATORS=zhangsan , tom, lisi
2) Host_Alias主机别名:主机名、IP、网络地址、其他主机别名!取反
Host_Alias MAILSVRS=smtp,pop
3 ) Cmnd_Alias命令路径、目录(此目录内的所有命令)、其他事先定义过的命令别名Cmnd_Alias PKGTOOLS=/bin/ rpm, /usr/bin/ yum
用户 改成别名用户 目的为了可以操作多个用户和组
主机名改成 别名主机 目的为了可以操作设置主机的多个名称或者主机取反
命令操作列表 改成别名命令列表 目的是所有命令可以做操作也就是所有命令集合
案例:
先进入visudo进行设置
设置结果如下
此时切换到张三用户可以使用此命令
首先先进入visudo输入Defaults logfile = “/var/log/sudo”命令保存并退出
然后查看/var/log里是否有sudo
进入vim sudo 可查看操作日志
安装JR工具
安装方法:make clean系统类型
主程序文件为john
检测弱口令账号
获得Linux/Unix服务器的shadow文件
执行john程序,将shadow文件作为参数
密码文件的暴力破解
准备好密码字典文件,默认为password.lst
执行john程序,结合--wordlist=字典文件
示例:
上传压缩包
进行挂载
安装软件编译工具
NMAP:
一款强大的网络扫描,安全检测工具
CentOS 7.7光盘中安装包 nmap-6.40-7.el7.x86_64.rpm
rpm -qalgrep nimap查看nmap yum install-y nmap
nmap命令常用的选项和描类型
-p:指定扫描的端口
-n :禁用反向DNS解析(以加快扫播速度)
-sS: TCP的SYN扫描(半开扫描),只向日标发出sY数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放
-sT:TCP连接扫描,这是完整的TcP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放
-sF:TCP的PIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对sYu数据包进行简单过滤,而忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性
-sU: UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢
-sP: ICMP扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描
-PO:;跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应IGMP请求时,使用这种方式可以避免因无法ping通而放弃扫描
示例:
编译安装nmap软件,rpm -qa|grep nmap查看是否有
查看本机开放的tcp服务
查看本机开放的udp端口
指定80端口查询
在生产环境中我们不可以直接使用root账户我们只能使用普通账户,所以我们需要使用sudo命令来让我们的普通用户得到一些特定的权限,增加我们账号的安全性,开关机安全的控制我们也需要进行设置防止在开机或者重启时被别人破译密码,在生产环境中我们的密码至少设置16位。