PAM模块详解及sudo命令

1.PAM模块解析:

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
PAM模块详解及sudo命令_第1张图片
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.sudo命令解析:

2.1 sudo 表示 “superuser do”,它允许已验证的用户以其他用户的身份来运行命令。其他用户可以是普通用户或者超级用户。然而,大部分时候我们用它来提权运行命令,以替代直接使用 root 用户的操作。sudo 命令与安全策略配合使用,安全策略可以通过文件 /etc/sudoers 来配置。其安全策略具有高度可拓展性,支持插件扩展。默认情况下 /etc/sudoers 是不能被任何人直接编辑的,因为它的权限是 440,虽然也可以对其赋予写权限后再编辑,但推荐使用 visudo 命令编辑该文件。

2.1.1sudo的工作流程:

  • sudo 会读取和解析 /etc/sudoers 文件,查找调用命令的用户及其权限。然后提示调用该命令的用户输入密码,或者也可以通过 NOPASSWD 标志来跳过密码验证。
  • 之后,sudo 创建一个子进程,调用 setuid() 来切换到目标用户。
  • 最后,它会在上述子进程中执行参数给定的 shell 或命令。
  • 2.2理解 sudo 命令授权配置 USER/GROUP HOST=(USER[:GROUP]) [NOPASSWD:] COMMANDS
    • 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
  • 2.3配置 Defaults 选项
# 指定用户尝试输入密码的次数,默认值为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.1安装chrony软件包 

 3.2看看包里有哪些重要配置文件,chrony里面一个是/etc/chrony.conf配置文件,还有一个是/usr/bin/chronyc命令文件:

PAM模块详解及sudo命令_第2张图片

3.3修改/etc/下的chrony配置文件,把时间同步地址改为国内比较稳定的权威网站的源(比如阿里云的时间解析专用服务器), 也可加上自己局域网内部可以同步的主服务器IP:

 

PAM模块详解及sudo命令_第3张图片

3.4去主服务器上确认一下它的防火墙关闭没有,如果没关闭ping不通的话,就没法同那台主机同步时间:

 PAM模块详解及sudo命令_第4张图片

3.5最后用“chronyc sources“命令确认一下 修改后的时间同步设置是否已成功生效。PAM模块详解及sudo命令_第5张图片

你可能感兴趣的:(linux,服务器,运维)