TCP_Wrapper&sudo
一、tcp_wrapper
访问控制
1.tcp协议之上的服务
2.仅一部分基于tcp传输的应用层服务可接受其控制
用户空间:库
libwrap.so
链接至此库的应用才会受tcp_wrapper管理
ldd `which sshd` //查看是否链接至此库
1.动态链接:
ldd命令对其应用执行结果中包含了libwrap.so即可
ldd $(which COMMAND)
ldd `which vsftpd` |grep wrap
2.静态链接
strings命令对其应用程序的执行结果包含了
/etc/hosts.allow
/etc/hosts.deny
strings $(which COMMAND)
yum -y install telnet-server
rpm -ql telnet-server
ldd `which in.telnetd` //没有链接,但是in.telnetd受xinetd超级守护进程管理,而xinetd链接到了libwrap
ldd `which xinetd` |grep -i libwrap 验证
注意:在CentOS6系统上的超级守护进程xinetd链接到了libwrap.so
在CentOS7上没有连接到
服务基于libwrap完成访问控制的流程;
匹配顺序:
/etc/host.allow---->/etc/host.deny
假如都没有匹配,就是用默认策略,默认allow
先检查hosts.allow文件,如果有显式的授权规则,则允许,否则,则检查hosts.deny文件,如果有显式的拒绝规则,则拒绝访问,否则,默认策略
格式:
daemon_list:client_list[:options]
daemon_list:
1.单个应用程序文件的文件名,而非服务名;例如vstpd
2.以逗号分隔的应用程序文件名列表;
vsftpd,sshd,in.telnetd
3.ALL,所有受tcp wrapper控制的服务程序
client_list:
1.单个主机:IP地址或主机名
2.网络地址:使用完整的掩码格式,或使用简短地址网络地址表示法,不能使用前缀
172.16.1.0/255.255.0.0
172.16.1. //后面的 . 是不可省略的
3.ALL所有主机
4.KNOWN,UNKNOWN,PARANOID
KNOWN:主机名的正反向解析都是ok的
UNKNOWN:地址无法反解的
PARANOID:麻痹的,正反向解析不对应的
EXCEPT:除了
vsftpd: 172.16. EXECPT 172.16.1.0/255.255.255.0
vsftpd: 172.16. EXECPT 172.16.1.0/255.255.255.0 EXECPT 172.16.1.1
//172.16.1.1是可以访问的,双重否定即是肯定
[:options]
deny:拒绝,主要用于/etc/hosts.allow中使用
vsftpd: 172.16.1.1 :deny
allow:允许,主要用在/etc/hosts.deny中使用
sshd: 172.16.1. :allow
spawn:启动一个外部程序完成执行的操作
sshd: ALL :spawn /bin/echo $(date) login attemp from %c to %s,%d >> /var/log/sshd.log
hosts.allow/hosts.deny的宏:
%c: 客户端信息,user@host或者user@ip
%s:服务信息,例如sshd,守护进程名
%d:守护进程信息
%p:daemon precess id
%u:clinet user name
假如需要记录并拒绝所有人访问sshd
1.在hosts.allow中记录日志
2.在hosts.deny中拒绝所有
或者: 只把下面这一句,写入到/etc/hosts.deny中
sshd: ALL :spawn /bin/echo $(date) login attemp from %c to %s,%d >> /var/log/sshd.log
注:如果sshd:这一行,写在hosts.allow中,记录日志并允许
二、su:switch user
用户切换
1.su - user,su -l user //登录式切换
2.su user //非登录式切换
-c "COMMAND" //使用该用户身份执行该命令
su wolf -c 'rm aa'
sudo:以另外一个用户的身份执行命令
授权知己:sudo文件,/etc/sudoers //多项记录,最后一条为默认
两类内容:
1.别名的定义,即为变量
2.授权项,可使用别名进行授权
visudo:有固定语法格式,检查
注:用户通过sudo获得的授权,只能通过sudo命令获取
授权项(每一行一个)
who where(runas) commands
who:
username:单个用户,
#uid:单个用户的id号
%group:组内的所有用户
%#gid:组内的所有用户
user_alias:用户别名,例如把多个用户定义为一个别名,然后直接授权该别名即可
where:主机地址
ip或hostname:单个ip
NetAddr:网络地址,掩码,prefix都支持
host_alias:主机别名
runas:
username
#uid
runas_alias
commands
command;单个命令
directory;指定目录内的所有应用程序
sudoedit:特殊权限,可用于向其他用户授予sudo权限,默认是sudo命令只能自己使用
cmnd_alias:命令别名,可以把多个命令起一个名字
定义别名:
ALIAS_TYPE NAME=item1,item2,...
ALIAS_TYPE:
User_Alias
Host_Alias
Runas_Alias
Cmnd_Alias
NAME:别名的名称字符,必须使用全大写字母
注意:$sudo su - //假如拥有su的权限,可以直接切换到root身份
//或者该用户拥有wheel组,也可以使用自己的密码切换到root
less /etc/sudoers
%wheel //该组可以拥有任何权限,假如想要用户拥有该权限,只需要让用户加入该组
常用标签:
NOPASSWD
PASSWD
wheel组:
usermod -aG wheel wolf //让wolf加入wheel组
su - wheel
sudo -l //自己能够运行所有命令,以及能够切换到root身份
sudo用法
sudo [options] command
-u 指定用户身份
-l 列出用户能以sudo的方式执行的所有命令
-k:清除此前用户认证成功的记录,再次使用sudo仍然需要使用密码
sudo -u admin ls /root //会提示deny
实验1:授权wolf能够useradd,usermod
visudo
wolf ALL=(root) /usr/sbin/useradd, /usr/sbin/usermod
谁 在何地(runas) 命令
sudo useradd tt
实验2:别名使用
User_Alias USERADMINS=
wolf,centos
Cmnd_Alias COMMANDS=/usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd
visudo
USERADMINS ALL=(root) COMMANDS
sudo useraddd user1
//注此时可以修改root密码: passwd root //直接修改root密码
实验3:禁止修改root用户密码
Cmnd_Alias COMMANDS=/usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd [a-z]*,!/usr/bin/passwd root,/usr/sbin/userdel
实验4:sudo不需要输入密码
wolf ALL=(root) NOPASSWD: /usr/sbin/useradd,/usr/sbin/usermod
wolf ALL=(root) NOPASSWD: /usr/sbin/useradd,/usr/sbin/usermod,PASSWD: /usr/sbin/userdel //执行userdel的时候需要密码
实验5:伪管理员
wolf ALL=(root) /usr/sbin/su //此时wolf就相当于root了
wolf $: sudo su - //就能直接切换到root,使用自己的密码
转载于:https://blog.51cto.com/hmtk520/2046953