安全机制(身份认证:本地登录、PAM)
Liux自带防火墙机制
查看防火墙状态:
service iptables status
一.安全机制
身份认证+访问控制(权限)+审计(日志)
身份认证:
本地登录:用户名+密码
远程(telnet)明文的方式暴露给第三方,协议本身缺陷,改进后
(telnet+ssh)即https
PAM(程序之间数据交换 认证的方式)
访问控制:
用什么机制保证访问控制的功能:
实验:Linux档案权限篇之一(该用户chown,改用户组chgrp,改权限chmod) - 学习日志羁旅 - 博客园 (cnblogs.com)
二.账户管理
1.认识系统文件
用户:
UID
root 0
普通用户 500~65534(其中65534是nobody来宾)
系统用户 1~499
所有用户都可以在/etc/passwd中查看用户名
口令文档 :/etc/shadow
*表示隐藏方式
用户组:权限相同的用户集合(多任务多用户)
GID区分
组的名字:/etc/group
查看当前用户所在的组
id -a
组的口令:/etc/gshadow
2.建立与删除普通用户账户,管理组
- useradd 命令用于建立用户帐号
-G<群组> 指定用户所属的附加群组
-g<群组> 指定用户所属的群组
-d<登入目录> 指定用户登入时的起始目录
-n 取消建立以用户名称为名的群组
-u<uid> 指定用户ID
添加一般用户 # useradd tt 为添加的用户指定相应的用户组 # useradd -g root tt 为新添加的用户指定home目录 # useradd -d /home/myd tt 建立用户且制定ID # useradd caojh -u 544
- userdel 删除用户
-r 同时删除自家目录
- usermod 修改帐号
groupadd 增加一个新的用户组
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同
向系统中增加了一个新组group2,同时指定新组的组标识号是101 # groupadd -g 101 group2
groupdel 删除一个已有的用户组
groupmod 修改用户组的属性
-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同
-n新用户组 将用户组的名字改为新名字
将组group2的组标识号修改为102 # groupmod -g 102 group2 组group2的标识号改为10000,组名修改为group3 # groupmod –g 10000 -n group3 group2
3.用户口令管理与口令时效管理
passwd 用来更改使用者的密码
- -d 删除密码,使账号无口令
- -f 强迫用户下次登录时必须修改口令
- -w 口令要到期提前警告的天数
- -k 更新只能发送在过期之后
- -l 停止账号使用
- -S 显示密码信息
- -u 启用已被停止的账户
- -x 指定口令最长存活期
- -g 修改群组密码
- -i 口令过期后多少天停用账户
chage 口令时效是系统管理员用来防止机构内不良口令的一种技术
- -m days: 指定用户必须改变口令所间隔的最少天数。如果值为0,口令就不会过期。
- -M days: 指定口令有效的最多天数。当该选项指定的天数加上-d选项指定的天数小于当前的日期时,用户在使用该帐号前就必须改变口令。
- -d days: 指定从1970年1月1日起,口令被改变的天数
- -I days: 指定口令过期后,帐号被锁前不活跃的天数。如果值为0,帐号在口令过期后就不会被锁。
- -E date: 指定帐号被锁的日期。日期格式YYYY-MM-DD。若不用日期,也可以使用自1970年1月1日后经过的天数。
- -W days: 指定口令过期前要警告用户的天数。
- -l: 列出指定用户当前的口令时效信息,以确定帐号何时过期
chage命令
两天内不能更改口令,并且口令最长的存活期为30天,并且口令过期前5天通知用户
三.pam认证机制
1.PAM机制
在centos 6中用户的密码权限更变模块主要涉及到PAM(Pluggable Authentication Modules)认证机制,该机制由Sun公司提供.
在Linux中,PAM是可动态配置的,本地系统管理员可以自由选择应用程序如何对用户进行身份验证。
PAM应用在许多程序与服务上,比如登录程序(login、su)的PAM身份验证(口令认证、限制登录),passwd强制密码,用户进程实时管理,向用户分配系统资源等
2.PAM的组成
pam主要由动态库与配置文件构成
/etc/pam.d/
目录中定义了各种程序和服务的PAM配置文件:
[root@host-10-1-1-91 pam.d]# ls chfn fingerprint-auth newrole password-auth run_init smartcard-auth ssh-keycat system-auth chsh fingerprint-auth-ac other password-auth-ac runuser smartcard-auth-ac su system-auth-ac config-util login passwd remote runuser-l sshd su-l 其中system-auth文件主要负责用户登录系统的身份认证工作 password-auth配置文件也是与身份验证相关的重要配置文件,比如用户的远程登录验证(SSH登录)就通过它调用 依赖的模块文件则主要存放于/lib64/security/中 [root@host-10-1-1-91 security]# ls pam_access.so pam_echo.so pam_ftp.so pam_localuser.so pam_permit.so pam_selinux.so pam_timestamp.so pam_unix.so pam_cap.so pam_env.so pam_group.so pam_loginuid.so pam_postgresok.so pam_sepermit.so pam_tty_audit.so pam_userdb.so pam_chroot.so pam_exec.so pam_issue.so pam_mail.so pam_pwhistory.so pam_shells.so pam_umask.so pam_warn.so .....
3.PAM模块文件内容
选取其中一个sshd来观察
1.第一列:PAM的模块类型
PAM有四种模块类型,分别代表四种不同的任务,它们是:
认证管理(auth):鉴别类接口模块类型用于检查用户和密码,并分配权限;
账号管理(account):账户类接口,主要负责账户合法性检查,确认帐号是否过期,是否有权限登录系统等
会话管理(session):会话类接口。用于管理和配置用户会话。会话在用户成功认证之后启动生效
密码(password)管理:口令类接口。用于用户更改密码,以及强制使用强密码配置
2)第二列:PAM的控制标记
- required:若成功则带有 success (成功) 的标志,若失败则带有 failure 的标志,但不论成功或失败都会继续后续的验证流程。 由于后续的验证流程可以继续进行,因此相当有利于数据的登录 (log) ,这也是 PAM 最常使用 required 的原因。
- requisite:若验证失败则立刻返回 failure 的标志,并终止后续的验证流程。若验证成功则带有 success 的标志并继续后续的验证流程。 这个项目与 required 最大的差异,就在于失败的时候还要不要继续验证下去。由于 requisite 是失败就终止, 因此失败时所产生的 PAM 信息就无法透过后续的模块来记录了。
- sufficient:若验证成功则立刻回传 success 给原程序,并终止后续的验证流程;若验证失败则带有 failure 标志并继续后续的验证流程。
- optional :该模块返回的通过/失败结果被忽略。当没有其他模块被引用时,标记为optional模块并且成功验证时该模块才是必须的。
- include:include与模块结果的处理方式无关。该标志用于直接引用其他PAM模块的配置参数
3)模块
一般保存在/lib64/security
常用模块:
- pam_securetty.so:限制系统管理员 (root) 只能够从安全的 (secure) 终端机登陆;例如 tty1, tty2 等就是传统的终端机装置名称。那么安全的终端机配置呢? 就写在 /etc/securetty 这个文件中。你可以查阅一下该文件, 就知道为什么 root 可以从 tty1~tty7 登陆,但却无法透过 telnet 登陆 Linux 主机了!
- pam_selinux.so:SELinux 是个针对程序来进行细部管理权限的功能。由于 SELinux 会影响到用户运行程序的权限,因此我们利用 PAM 模块,将 SELinux 暂时关闭,等到验证通过后, 再予以启动!
pam_console.so:当系统出现某些问题,或者是某些时刻你需要使用特殊的终端接口 (例如 RS232 之类的终端联机设备) 登陆主机时, 这个模块可以帮助处理一些文件权限的问题,让使用者可以透过特殊终端接口 (console) 顺利的登陆系统。
- pam_loginuid.so:验证使用者的 UID 是否合理是否是我们所需
- pam_env.so:用来配置环境变量的一个模块,如果你有需要额外的环境变量配置,可以参考 /etc/security/pam_env.conf 这个文件的详细说明。
- pam_unix.so:auth(提示用户输入密码,并与/etc/shadow文件相比对.匹配返回0)account、password功能
- pam_cracklib.so:可以用来检验口令的强度,包括口令是否在字典中,口令输入几次都失败就断掉此次联机等功能。
检验:linux检查密码的复杂性强度,centos中检查密码的复杂性和强度以及评分 互联网技术圈 互联网技术圈..._六十度灰的博客-CSDN博客
(1条消息) linux中pam认证解析_学无止境-CSDN博客_linux pam
4)模块参数
pam_cracklib.so的相关参数:
注意,以上参数仅对非root用户生效,如果想对root用户生效,需要加入参数enforce_for_root
Linux下PAM模块学习总结 - 散尽浮华 - 博客园 (cnblogs.com)
4.PAM设置密码复杂度
系统对密码的控制是有两部分组成:
1 cracklib
2 /etc/login.defs
因为centos7有默认的密码复杂度设置,所以查看下是不是7版本
centos6中默认是通过pam_cracklib.so模块控制:
大小写字母各至少一个,数字至少3个,其他至少2个
在password requisite pam_cracklib.so try_first_pass retry=3
在其后追加如下黄框参数后,保存并退出先按esc再输入:wq
解决:
另:
验证时若出现任何与pam_tally有关的错误则停止登录
auth required pam_tally.so onerr=fail magic_root
账号验证过程中一旦发现连续5次输入密码错误,就通过pam_tally锁定此账号600秒
account required pam_tally.so deny=5 lock_time=600 magic_root reset
1)思考还有哪些加强linux账户安全的管理方法?
限制用户权限、禁用、锁用户,不允许切换用户等
2)比较一下linux账户跟unix账户管理的异同。
命令不同:
EG:切换到root用户
linux : su -
Unix: sudo -i