1 基本介绍
sudo
来自sudo包
man 5 sudoers
sudo 能够授权指定 用户在指定主机上运行某些命令 。 如果未授权用用 尝试使用 sudo ,会提示联系管理员
sudo 可以提供日志,记录每个用户使用sudo 操作
sudo 为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
sudo 使用时间戳文件来完成类似“检票”的 系统,默认 存活期为5 分钟的 “入场券”
通过visudo 命令编辑配置文件,具有语法检查功能
visudo –c 检查语法
配置文件 /etc/suders,/etc/suduers.d
时间戳文件:/var/db/sudo
日志文件:/var/log/secure
配置文件支持使用通配符glob:
?:任意单个一字符
*: 匹配任意长度字符
配置文件规则两类:
1 别名定义:不是必须的
2 授权规则:必须的
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
who 运行命令的身份 user
where 通过哪些主机 host
(whom) 以哪个用户的身份,runas
which 运行那些命令 command
配置项
users hosts=(RunAs) commands
users
username
#uid
user_alias
%group_name
%#gid
hosts
ip
hostname
netaddr
command
command name
directory
sudoedit
Alias_Type NAME=item1,item2...
Name 必须要全大写
Alias_Type
User_Alias
Host_Alias
Runas_Alias
Which_Alias
普通用户使用sudo命令,需要在命令的前面加 sudo,并且要与sudo的配置文件中的定义格式必须完全一致
定义guest用户能够访问/var/log/message*的文件但是有不能其他文件
guest ALL=(ALL) /bin/cat /var/log/messsage* !/bin/cat/ message* *
2 tcp_wrapper
工作在第四层(传输层)的TCP 协议
对有状态连接的 特定 服务进行安全检测并实现访问控制
以库文件形式实现
某进程是否接受libwrap 的控制取决于发起此进程的程序在编译时是否针对libwrap 进行编译的
判断服务程序是否能够由tcp_wrapper 进行访问控制的方法:
ldd /PATH/TO/PROGRAM|grep libwrap.so
strings PATH/TO/PROGRAM|grep libwrap.so
配置文件 /etc/hosts.allow /etc/hosts.deny
基本用法
daemon_list@host: client_list [ :options :option… ]
option
deny: 主要用在 /etc/hosts.allow 定义"拒绝"规则 如:vsftpd:172.16.:deny
allow:主要用在/etc/hosts.deny定义"允许"规则 如:vsftpd:172.16.: allow
spawn: 启动一个外部程序完成执行的操作
twist 实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O和ERROR发送到客户端默认至/dev/null
tcpdmatch [-d] daemon[@host] client,如果在生产中,测试需要先写到其他文件中,然后使用-d 来调用
-d 测试当前目录下的hosts.allow和hosts.deny文件
定义访问或拒绝的事件的时候使用到一些特殊字符,需要用到转义
例如:
sshd:ALL: spawn echo "$(date +%%F) login attempt from %c to %s,%d" >>/var/log/sshd.log
仅开放本机两个IP 地址中的一个地址172.18.0.X 上绑定的sshd 和vsftpd 服务给172.18.0.0/16 网络中除了172.18.0.0/24 网络中的主机之外的所有主机,但允许172.18.0.100 访问, 每次的用户访问都要记录于日志文件中注:其中X 为学号
allow
vsftpd@172.18.0.23,sshd@172.18.0.23:172.18. EXCEPT 172.18.0. EXCEPT 172.18.0.100:spawn echo "$(date +%%F) login attempt from %c to %s,%d" >> /var/log/sshd.log
deny
vsftpd,sshd@172.18.0.23:172.18.0.
vsftpd,sshd@all:all
编写脚本/root/bin/checkip.sh ,每5 分钟检查一次,如果发
现通过ssh 登录失败次数超过10 次,自动将此远程IP 放入Tcp
Wrapper的黑名单中予以禁止防问
#!/bash
declare -a dos
while :;do
dos=(`awk '$0 ~ /Failed/{ip[$(NF-3)]++}END{for(i in ip){if(ip[i]>10)print i}}' /var/log/secure `)
for i in ${dos[@]};do
[ `iptables -L -n | grep "\<$i\>" | wc -l` -ge 1 ] && { echo $i;continue; }
iptables -A INPUT -s $i -j REJECT
done
sleep 5m
done
3 PAM 认证机制
PAM:Pluggable Authentication Modules
认证库:文本文件,MySQL ,NIS ,LDAP等 等
Sun 公司于1995 年开发的 一种 与 认证 相关的通用框架 机制
PAM 的 是关注如何为服务验证用户的 API, , 通过提供一些动态链接库和一套统一的API ,将系统提供的服务和该服务的认证方式分开
使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方 式而无需更改服务程序
一种认证框架,自身不做认证
PAM相关文件
模块文件目录: /lib64/security/
环境相关的设置:/etc/security/
主配置文件 /etc/pam.conf,默认不存在
为每一种应用模块提供一个装用的配置文件: /etc/pam.d/app_name
注意:/etc/pam.d/存在 /etc/pam.conf将失效
/etc/pam.d/文件的配置格式
module_type control module args
module_type: auth(账号认证和授权),password(密码规则),session(会话资源),account(系统资源)
control:required(一票否决,但是还有检查),sufficient(一票通过),requisite(一票通过,后面不用检查),include(包含其他文件的同type的模块选者),optional(可选项,参考)
具体使用请自行查看
/user/share/doc/pam-*
rpm -qd pam
man –k pam_
man 名 模块名 如 如man rootok
《The Linux-PAM System Administrators' Guide》
1 、限制centos 用户只能够在工作时间通过ssh 远程连接本机
使用pam_time.so
添加一行sshd;*;centos;MoTuWeThFr0900-1700到 /etc/security/time.conf
在/etc/pam.d/sshd/加入
account required pam_time.so
2 、限制只有admins 组内的用户可ssh
使用pam_group.so模块
编辑 /etc/security/group.conf 添加如下行
sshd;*;*;Al0000-2400;distro
编辑 /etc/pam.d/sshd,添加入下
auth required pam_group.so