========================================================================================================================================= TCP wrapper:tcp包装器 1、TCP_Wrappers 是工作在传输层的 TCP 协议,对有状态的连接的特定服务进行安全监测并实现访问控制。 TCP Wrapper 是一个基于主机的网络访问控制表系统,用于过滤类 Unix 系统(如Linux或BSD)的网络访问。对基于 tcp 开发并提供服务的应 用程序,提供的一层访问控制工具。尽管 TCP Wrappers 不能替代防火墙,但可以结合防火墙使用 TCP Wrappers 可以给系统增加一道安全防线。 TCP Wrapper 基于库调用实现其功能,只有由 super daemon 管理的服务以及有支持 libwarp.so 动态库的程序才可以支持 TCP Wrappers。任何由 xinetd 管理的服务都支持 TCP Wrappers 机制。 2、判断某服务是否能够由 TCP Wrapper 进行访问控制 # 如果某服务动态调用 libwarp.so 库 ldd $(which sshd) | grep libwrap # 如果某服务静态编译了 libwarp.so 库,则使用 strings 查看服务程序发文件 strings /path/to/file 够由 TCP Wrapper 进行访问控制服务:sshd 、xinetd 3、实现方法 在配置文件中为各服务分别定义访问控制规则实现控制访问: /etc/hosts.allow /etc/hosts.deny 定义文件检查次序 1、先检查 hosts.allow 文件,如果有定义,则放行; 2、如果 hosts.allow 没有定义,再检查 hosts.deny 文件,如果有定义,则拒绝,如果hosts.deny 也没有有定义,则默认允许; 3、可以在 hosts.deny 中定义拒绝所有服务,然后在 hosts.allow 中以白名单的形式开放服务; 注意:一旦有规则匹配,则直接生效,不在继续检查匹配。 4、配置文件语法 daemon_list[@LocalHostIP]: client_list [EXCEPT] [:option] daemon_list@LocalHostIP: 应用[程序的文件名称],不是服务名称;可以有多个应用程序名称,用逗号隔开。ALL 表示所有服务,表示对本机的 某个IP地址进行限制。 client_lsit: IP地址 主机名 网络地址,必须使用完成格式的掩码,例如 192.168.1.150/255.255.255.0 。CentOS7 支持 CRDR 表示法:network/prefixlen 基于网络组(NIS域) 内置的 ACL ALL,所有主机 UNKNOWN:所有无法解析的主机 KNOWN:所有可以解析的主机 PARANOID:正解和反解不匹配 EXCEPT: 后跟某个网段内特定允许或拒绝的 IP 例如: # 允许 192.168.1.0 网段 IP 访问,但不包括 192.168.1.120 vstfpd: 192.168.1.0/255.255.255.0 EXCEPT 192.168.1.120 # 允许 192.168.0.0 网段访问,不包括 192.168.100.0 网段,但允许 192.168.100.0 内的 192.168.100.1 访问 vstfpd: 192.168.0.0/255.255.0.0 EXCEPT 192.168.100.0/255.255.255.0 EXCEPT 192.168.100.1 option: deny # 在 hosts.allow 文件中实现拒绝的功能 allow # 在 hosts.deny 文件中实现允许的功能 spawn # 启动额外的应用程序 例如: spawn (/some/where/safe_finger -l @%h | /usr/ucb/mail -s %d-%h root) & spawn /bin/echo `date` login attempt from %c To %s,%d >> /var/log/vsftpd.deny.log spawn 中可以使用宏: %c # 客户端IP地址信息 %s # 服务器端IP地址信息 %d # 服务进程信息 注:spawn 后面跟着的 bash 的命令中有百分号时,需要转义,例如/bin/echo date '+%%F %%T' twist # 例如:sshd:All twist echo "Don not allow access ssh." 实际动作是拒绝访问,使用指定的操作替 换当前服务,标准I/O和ERROR发送到客户端,默认至/dev/null 5、测试当前目录下的hosts.allow和hosts.deny tcpdmatch [-d] daemon[@host] client -d 6、示例 1、限制 172.18.26.3 访问 vsftpd 服务 vim /etc/hosts.deny vsftpd: 172.18.26.3 ========================================================================================================================================= sudo 1、su:Switch User 格式:su [options] [-] [USER [arg]...] 选项: -l UserName # 指定用户名,和使用 '-' 的效果一样 - UserName # 完全切换,切换时读取指定用户的环境配置文件,如果不使用 '-' 则表示使用当前的环境配置文件 -c 'COMD' # 指定切换身份后执行的指令 -m UserName # 使用目前用户的环境配置文件 2、sudo 可以达到让普通用户不输入密码即可执行只有管理员才有权限执行的命令。 时间戳文件:sudo 的数据库文件 /var/db/sudo ,使用时间戳文件来完成戳文件来完成类似"检票"的系统,默认存活期为5分钟的"入场券", 在5分钟之内不需要输入密码执行命令。 日志文件: /var/log/secue 选项: -u UserName # 指定用户名,默认是 root 用户 -l # 列出当前用户可以执行的 sudo 命令,默认为 root -k # 清除使用的命令历史,下次执行时需要密码验证 -K # 和 -k 的效果一样,但 -K 会删除时间戳记录文件 -b # 将要执行的命令方在后台执行 -p # 更改询问密码的提示语。示例:-p "password on %h for user %p:" -v # 再延长密码有效期限5分钟,更新时间戳 -V # 显示配置信息版本信息 3、visudo 和 /etc/sudoers 1. 除了 root 用户,其他账户若想执行属于 root 的权限,则需要 root 先使用 visudo 修改 /etc/sudoers 文件;或者直接使用 vim 修改 /etc/sudoers 文件 2. 单一用户可进行 root 所有指令 3、visudo -f FileName # 打开指定配置文件 4、visudo -c # 检查授权文件的语法 4、配置文件 /etc/sudoers root ALL=(ALL) ALL root # 表示用户的名称。%GroupName 表示用户组名称,#UID 表示用户,%#GroupName 表示组 ALL= # 表示允许用户通过哪一个网络主机连接时,才可以执行root指令。IP 地址,或者 HostName 或者 Network/NetMask 多个用逗号隔开 (ALL) # 此账号可以切换成那些用户执行此指令,多个用户用逗号隔开 ALL # 表示这个用户可以执行什么指令。sudoedit 表示授权其他用户有权限修改sudoers文件,其他用户执行时直接执行 sudoedit命令即可,不需要sudo。命令可以是一个目录,表示目录下的所有文件 注意:当给某个用户设置的 sudo 权限,以某个用户的身份执行命令时仍然需要使用 sudo COMD 使用 sudo 用户执行命令时,需要输入当前用户的密码。 5、别名 (每个项用逗号隔开,可以使用 ! * 符号) User_Alias # 定义用户名列表。可以是:uid|User_Alias|%group_name|%gid Cmnd_Alias # 定义命令的列表。可以是:命令|目录|Cmnd_Alias|sudoedit Runas_Alias # 定义可以切换为那个身份的用户列表 Host_Alias # 定义可以使用那个主机切换的列表。可以是:IP 地址|网络地址 IP/netmask|主机名|Host_Alias 示例: # 使得xuekaixin1用户可以使用管理员命令 xuekaixin1 ALL=(ALL) ALL # 使得群组内的用户都可以使用root所有指令,并且没有密码 %sheel ALL=(ALL) NOPASSWD: ALL # 有限制的指令操作,某一个用户可以执行的 passwd 指令,但不可以修改root命令 xuekaixin1 ALL=(ALL) /usr/bin/passwd [A-Za-z]*,! /usr/bin/passwd root 限制登录IP:test 172.13.27.0/16=/usr/bin/passwd [A-Za-z]*,! /usr/bin/passwd root # 透过别名一次让更多的用户拥有利用 root 身份执行某个命令(注:定义别名的名字必须是全大写) User_Alias GROUP = test1,test2,test3 Cmnd_Alias COMD = mount,dd GROUP All=(ALL) NOPASSWD: COMD # 用户直接输入sudo su - 就可以直接切换为root身份,又不用泄露root密码 test1 ALL=(ALL) /bin/su - root 6、切换身份指定默认用户 Defaults:wang runas_default=tom wang ALL=(tom,jerry) ALL 含义:wang 用户可以使用 sudo -l UserName 命令指定要切换的身份。当定义的 Defalts:wang runas_default=tom 后, 表示 wang 用户执行 sudo COMD 命令,就默认切换的身份为 tom。 7、授权某个普通用户查看 /var/log/messages 文件 xuekaixin ALL=(ALL) /bin/cat /var/log/messages*,! /bin/cat /var/log/messages* * =========================================================================================================================================