sudo更换身份
su 切换身份 使用su 切换身份必须首先直到被切换成用户的密码 如: su root 就必须要知道root的密码 这种机制安全性不高,容易泄露管理员密码
1. sudo能够授权指定用户在指定主机上执行某些命令
2. sudo 可以提供日志,记录每个用户使用sudo操作
3. sudo 为系统管理员提供配置文件,允许系统管理员集中的管理用户的使用权限和使用的主机
4. sudo 使用时间戳文件来完成类似"检票"系统,默认存活期为5分钟
5. 使用sudo授权后普通用户就可以执行默认不能执行的操作 相当于提升普通用户的执行权限
sudo配置
配置文件:/etc/sudoers(不建议使用), /etc/sudoers.d/
时间戳文件:/var/db/sudo
日志文件:/var/log/secure
配置文件支持使用通配符glob:
?:任意单一字符
* :匹配任意长度字符
[wxc]:匹配其中一个字符
[!wxc]:除了这三个字符的其它字符
\x : 转义
[[alpha]] :字母 示例: /bin/ls [[alpha]]*
配置文件规则有两类:
1、别名定义:不是必须的
2、授权规则:必须的
授权规则格式
root ALL=(ALL) ALL
yxh 192.168.30.7=(root) /bin/mount /dev/cdrom /mnt/
执行格式 : sudo mount /dev/cdrom /mnt/ 执行命令的时候必须和授权规则中写的命令保持完全一致 sudo mount /dev/cdrom /mnt 执行失败 因为缺少最后的/
sudo命令
ls -l /usr/bin/sudo
sudo –i –u wang 切换身份
sudo [-u user] COMMAND
-V 显示版本信息等配置信息
-u user 默认为root
-l,ll 列出用户在主机上可用的和被禁止的命令
-v 再延长密码有效期限5分钟,更新时间戳
-k 清除时间戳(1970-01-01),下次需要重新输密码
-K 与-k类似,还要删除时间戳文件
-b 在后台执行指令
-p 改变询问密码的提示符号 示例:-p ”password on %h for user %p:"
user1 ALL=(user2) ALL 第一个ALL表示所有主机 第二个ALL表示所有权限 表示user2有的权限全都赋给user1
user2可以在终端执行 sudo -u user1 cat /etc/shadow 如果没有指定-u选项,默认代表root用户
sudo别名和示例
Users和runas:
username
#uid
%group_name
%#gid
user_alias|runas_alias
host:
ip或hostname
network(/netmask)
host_alias
command:
command name
directory
sudoedit
Cmnd_Alias
别名有四种类型:User_Alias, Runas_Alias, Host_Alias ,Cmnd_Alias
别名格式:[A-Z]([A-Z][0-9]_)*
别名定义: Alias_Type NAME1 = item1, item2, item3 : NAME2 = item4, item5
示例1
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip
NETADMIN ALL=(root) NETCMD
示例2
User_Alias SYSADER=wang,mage,%admins
User_Alias DISKADER=tom
Host_Alias SERS=www.magedu.com,172.16.0.0/24
Runas_Alias OP=root
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
SYSADER SERS= SYDCMD,DSKCMD
DISKADER ALL=(OP) DSKCMD
示例3 排除特定场景
user1 192.168.175.136,192.168.175.138=(root) /usr/sbin/, !/usr/sbin/useradd
user1 ALL=(ALL) /bin/cat /var/log/messages*
安全隐患 sudo cat /var/og/messages /etc/passwd
user1 ALL=(ALL) /bin/cat /var/log/messages*, !/bin/cat /var/log/messages* *
TCP_Wrappers介绍
工作在第四层(传输层)的TCP协议 实现简单的防火墙功能
对有状态连接的特定服务进行安全检测并实现访问控制
以库文件形式实现 某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对 libwrap进行编译的
判断服务程序是否能够由tcp_wrapper进行访问控制的方法:不是所有服务都支持TCP_Wrappers
ldd /PATH/TO/PROGRAM | grep libwrap.so
strings PATH/TO/PROGRAM | grep libwrap.so
配置文件:/etc/hosts.allow, /etc/hosts.deny
检查顺序:hosts.allow,hosts.deny(默认允许) 注意:一旦前面规则匹配,直接生效,将不再继续
基本语法: daemon_list@host: client_list [ :options :option… ]
单个应用程序的二进制文件名,而非服务名.
例如vsftpd 以逗号或空格分隔的应用程序文件名列表 如:sshd,vsftpd
ALL表示所有接受tcp_wrapper控制的服务程序
主机有多个IP,可用@hostIP来实现控制 如: [email protected]
EXCEPT用法:
示例:vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT 172.16.100.1
PAM认证机制
使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序
一种认证框架,自身不做认证
PAM 是关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统 一的API,将系统提供的服务和该服务的认证方式分开
PAM相关文件
模块文件目录:/lib64/security/*.so
环境相关的设置:/etc/security/
主配置文件: /etc/pam.conf 默认不存在
为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
注意:如/etc/pam.d存在 /etc/pam.conf 将失效
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于 /etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
PAM认证过程:
1.使用者执行/usr/bin/passwd 程序,并输入密码
2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件, 这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻
/etc/pam.d/passwd此设置文件
3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)
通用配置文件/etc/pam.conf格式
application type control module-path arguments
专用配置文件/etc/pam.d/* 格式
type control module-path arguments
服务名(application) telnet、login、ftp等
服务名字“OTHER”代表所有没有在该文件中明确配置 的其它服务
模块类型(module-type)
control PAM库该如何处理与该服务相关的PAM模块的成功或失败情况
module-path 用来指明本模块对应的程序文件的路径名
Arguments 用来传递给该模块的参数
Auth 账号的认证和授权
Account 与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,当前有效的系统资源(最多可以有多少个用户),限制用户的位置(例如:root用户只能从控制台登录)
Password 用户修改密码时密码复杂度检查机制等功能
Session 用户获取到服务之前或使用服务完成之后需要进行一些附加的操作, 如:记录打开/关闭数据的信息,监视目录等
-type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是 安装在系统上的模块有用
module-path: 模块路径
相对路径: /lib64/security目录下的模块可使用相对路径 如:pam_shells.so、pam_limits.so
绝对路径: 模块通过读取配置文件完成用户对系统资源的使用控制 /etc/security/*.conf
注意: 修改PAM配置文件将马上生效
建议:编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误
Arguments 用来传递给该模块的参数
PAM模块示例
模块:pam_shells
功能:检查有效shell
man pam_shells
示例:不允许使用/bin/csh的用户本地登录
vim /etc/pam.d/login
auth required pam_shells.so
vim /etc/shells
去掉 /bin/csh
useradd –s /bin/csh testuser
testuser将不可登录
tail /var/log/secure
示例:pam_limits.so
限制用户最多打开的文件数和运行进程数
/etc/pam.d/system-auth
session required pam_limits.so
vim /etc/security/limits.conf
apache – nofile 10240 apache用户可打开10240个文件
student hard nproc 20 不能运行超过20个进程