1.1PAM模块的含义:
PAM是一套应用程序接口,提供了一连串的验证机制,只要使用者将验证阶段的需求告知PAM后,
PAM就能够汇报使用者验证的结果(成功或者失败)
1.2PAM被调用的流程:
1.使用者执行/usr/bin/passwd时,并输入密码
2.passwd调用PAM模块进行验证
3.PAM模块会到/etc/pam.d/中找与程序passwd同名的配置文件
4.依据/etc/pam.d/passwd内的设置,引用相关的PAM模块逐步进行验证分析
5.将验证结果回传给passwd这只程序
6.passwd会根据PAM回传的结果决定下一步操作
1.3常用模块介绍:
/etc/pam.d/login 登陆
/etc/pam.d/system-auth
auth 组件:认证接口,要求并验证密码。即使第一个模块失败,用来防止用户知道在哪个过程失败,主要目的是防止攻击。
account组件:检测是否允许访问。检测账户是否过期或则在末端时间内能否登陆。
password组件:设置并验证密码
session组件:配置和管理用户sesison。
required:该模块必须success才能进行继续。即使失败用户也不会立刻获知,直到所有相关模块完成。
requisite:该模块必须success才能使认证继续进行。
suffifient:如果失败则忽略。
optinal:忽略结果,不管是否失败。
1.4PAM模块主要配置文件说明:
/etc/pam.d/*:每个程序个别的 PAM 配置文件;
/lib64/security/*:PAM 模块文件的实际放置目录;
/etc/security/*:其他 PAM 环境的配置文件;
/usr/share/doc/pam-*/:详细的 PAM 说明文档
1.5PAM模块里设定普通用户或组能打开的最多文件数量:
vim limits.conf:
* soft nofile 655350 * hard nofile 655350 设置限制 ulimit -a: 查看所有限制信息 ulimit -n: 设置最大可以打开的文件数量
1.6PAM日志信息存放位置:
/var/log/secure
/var/log/messages
如果发生登陆错误或者无法预期的错误时,PAM会把信息记录在文件中,可以查看日志。
2.1 sudo
表示 “superuser do”
,它允许已验证的用户以其他用户的身份来运行命令。其他用户可以是普通用户或者超级用户。然而,大部分时候我们用它来提权运行命令,以替代直接使用 root
用户的操作。sudo
命令与安全策略配合使用,安全策略可以通过文件 /etc/sudoers
来配置。其安全策略具有高度可拓展性,支持插件扩展。默认情况下 /etc/sudoers
是不能被任何人直接编辑的,因为它的权限是 440
,虽然也可以对其赋予写权限后再编辑,但推荐使用 visudo
命令编辑该文件。
2.1.1sudo的工作流程:
sudo
会读取和解析 /etc/sudoers
文件,查找调用命令的用户及其权限。然后提示调用该命令的用户输入密码,或者也可以通过 NOPASSWD
标志来跳过密码验证。sudo
创建一个子进程,调用 setuid()
来切换到目标用户。shell
或命令。USER/GROUP
: 表示需要被授权的用户或者组;如果是组则需要以 % 开头HOST
: 表示允许从哪些主机登录的用户运行 sudo 命令;ALL 表示允许从任何终端、机器访问(USER[:GROUP])
: 表示使用 sudo 可切换的用户或者组,组可以不指定;ALL 表示可以切换到系统的所有用户NOPASSWD
: 如果指定,则该用户或组使用 sudo 时不必输入密码COMMANDS
: 表示运行指定的命令;ALL 表示允许执行所有命令# 允许 sudo 组执行所有命令
%sudo ALL=(ALL:ALL) ALL
# 允许用户执行所有命令,且无需输入密码
escape ALL =(ALL) NOPASSWD: ALL
# 仅允许用户执行 echo, ls 命令
escape ALL =(ALL) NOPASSWD: /bin/echo /bin/ls
# 运行本机的用户执行关机命令
escape localhost=/sbin/shutdown -h now
# 允许 users 用户组中的用户像 root 用户一样使用 mount、unmount、chrom 命令
%users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
# 指定用户尝试输入密码的次数,默认值为3
Defaults passwd_tries=5
# 设置密码超时时间,默认为 5 分钟
Defaults passwd_timeout=2
默认 sudo 询问用户自己的密码,添加 targetpw 或 rootpw 配置可以让 sudo 询问 root 密码
Defaults targetpw
# 指定自定义日志文件
Defaults logfile="/var/log/sudo.log"
# 要在自定义日志文件中记录主机名和四位数年份,可以加上 log_host 和 log_year 参数
Defaults log_host, log_year, logfile="/var/log/sudo.log"
# 保持当前用户的环境变量
Defaults env_keep += "LANG LC_ADDRESS LC_CTYPE COLORS DISPLAY HOSTNAME EDITOR"
Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"
# 安置一个安全的 PATH 环境变量
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
2.4修改sudo的默认编辑器:
# 在.zshrc或.profile文件中
$ export EDITOR=vim;
# 希望执行对visudo生效
$ sudo EDITOR=vim visudo
# 或者修改/etc/sudoers文件的默认编辑器
Defaults editor=/usr/bin/vim
2.5 设置 sudo 会话时间
其中 sudo
命令是权限委派的命令,在生产环境中是非常常用的,默认情况下 sudo
命令会话时间是在 15
分钟。要设置 sudo
密码超时的值,需要使用 passwd_timeout
参数进行设置。
可以以分钟设置为你所需的任何时间,它会在超时之前一直等待。如果要为每个执行的 sudo
命令弹出密码提示,你也可以将时间设置为 0
,或者通过设置值 -1
永久禁用密码提示。
# 设置timeout时间
# 意味着sudo密码提示将会在用户使用20分钟后过期
Defaults env_reset,timestamp_timeout=20
2.6如果在 sudo
环境无法找到某些命令,那么可以将这些命令的路径加入该配置项之中。
$ sudo sed '/^#/d;/^$/d' /etc/sudoers
Defaults env_reset
Defaults env_keep = "COLORS IDSPLAY HOSTNAME HISTSIZE LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS"
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
3.chrony搭建私有ntp服务
3.2看看包里有哪些重要配置文件,chrony里面一个是/etc/chrony.conf配置文件,还有一个是/usr/bin/chronyc命令文件:
3.3修改/etc/下的chrony配置文件,把时间同步地址改为国内比较稳定的权威网站的源(比如阿里云的时间解析专用服务器), 也可加上自己局域网内部可以同步的主服务器IP:
3.4去主服务器上确认一下它的防火墙关闭没有,如果没关闭ping不通的话,就没法同那台主机同步时间: