tcp_wrapper作为tcp协议的一种封装机制,主要适用于允许或拒绝某个或某段IP地址对本机访问,之前讲过的关于用户控件的防火墙应用工具iptables也可以实现这一功能,iptables可以针对所有的应用程序服务进行限制,而txp_wrapper这类的封装器只能针对于sshd以及vsftpd服务;
判断一个应用程序是否受tcp_wrapper管制,只需要查看他是否具有libwrap.so这个库即可;
tcp_wrapper的相关配置文件有/etc/hosts.allow,/etc/hosts.deny
/etc/hosts.allow:针对于允许访问的IP地址,但也可以写入拒绝访问的IP地址;优先级高;
/etc/hosts.deny:针对于拒绝访问的IP地址,但也可以写入允许访问的IP地址;优先级低;
配置文件格式:
daemon_list:client_list [option]
daemon_list:应用程序文件列表,如ssh服务,其文件名称为sshd;
client_list:允许或拒绝的IP或IP段;不能使用前缀格式的IP地址,如172.16.72.1/16,如果有掩码则必须写成172.16.72.1/255.255.255.0的形式;也可以写成IP段的形式,如172.16.,表示172.16这个网段的所有IP地址;
option:allow,允许访问;
deny,拒绝访问;
spawn:生成,发起,执行;
在/etc/hosts.allow中允许172.16.72.2主机访问172.16.72.6主机的ssh服务
在/etc/hosts.allow中允许172.16.72.2的主机访问,在/etc/hosts.deny中拒绝所有主机访问sshd,vsftpd服务;
172.16.72.1想要访问172.16.72.6的ssh服务
172.16.72.1想要访问172.16.72.6的vsftpd服务
172.16.72.2想要访问172.16.72.6的ssh服务
172.16.72.2想要访问172.16.72.6的vsftpd服务
使用EXCEPT关键字,在/etc/hosts.allow中排除172.16.72.2以外的IP地址的访问;
172.16.72.1访问:
sudo:
在生产环境中,使用root用户作为常用用户是非成危险的操作,容易被别人利用root用户进行某种破环性的操作,所以在工作当中,使用普通用户进行管理,在需要使用root用户时,使用su或者sudo命令临时切换root权限就是一个较为安全的操作;
su切换用户,完全切换以及非完全切换;
完全切换:su - username
非完全切换:su username
暂时获取root权限,当执行完命令后返回bash界面:su -c 'COMMAND'
虽然su命令可以帮助我们切换到root用户下执行,但是这样也不利于系统的安全性操作,假如一名运维人员被分配到的工作是管理网络方面的配置,但是如果他使用的是su -c这样的操作模式,他就不仅仅能对网络配置文件进行操作了,权限几乎可以进行任何操作,所以在真正的生产环境中,使用的几乎都是配置指定命令的sudo;
sudo命令,可以根据/etc/sudoers配置文件中的配置信息,指定哪个用户可以借用sudo命令使用在root权限下能够使用的那些命令;
在/etc/sudoers配置文件中,一行只能有一个授权
其格式为:
who where=(whom) what
user client=(runas) COMMANDS
sudo命令:
sudo [option]... command
-u user:以指定的用户身份运行命令;
-l [command]:列表显示当前用户能以sudo的方式运行
的所有命令;
-k:清空缓存,再一次使用sudo就需要输入密码;
sudo -k
(第一次执行sudo输入密码后,会有缓存保存300秒,这样300秒内执行sudo就不需要输入密码)
/etc/sudoers编写格式:
who:
user:用户名;
#uid:指定用户的uid;
%group:指定组;
%#gid:指定组的gid;
user_alias:事先定义好的用户别名;
在配置文件中定义别名:
Alias_Type:
User_Alias:设置用户别名;
Host_Alias:设置sudo范围别名;
Cmnd_Alias:设置命令别名;
Runas_Alias:一般为root;
设置别名:
Alias_Type NAME=item1,item2....
NAME必须都为大写;
where:
ALL:表示所有主机皆可用;
ip/hostname:单个主机;
Network Address:网络地址;
host_alias事先定义过的主机的别名;
whom:授权用户后续命令的运行着的真实身份,通常是root;
what:此次授权能够执行的命令;
command:单个命令授权;
directory:指定目录下所有的命令;
sudoedit:特殊命令,授权其他用户可以执行sudo命令,并且可以编辑/etc/sudoers文件;
cmnd_alias:事先定义过的命令别名;
示例:设置wjq用户管理整个系统中的用户密码
上图中,wjq用户可以修改root密码,这种操作在现实环境中是不被允许的;
在配置文件中应设置为passwd后不允许跟随参数root,passwd命令后必须跟随参数;
如:
类似于passwd这类的可以对root用户进行修改的特殊命令还有su,sudo等,这两个命令一旦授权就必须考虑好怎样排除root登录的情况,避免普通用户使用其进行root登录操作;需要注意的是sudoedit,可以使普通用户修改/etc/sudoers配置文件;
如:su命令限制
nsswitch与pam:
nsswitch:名称服务开关,进行名称解析,将数字符号转化为计算机能够识别的语言;
名称解析,根据特定的信息查找某个已经设置好的存储库,查看存储库中是否有符合该关键字的信 息;如passwd存储库,查看用户相关信息,host存储库,查看指定域名或指定IP地址的关联信息等;
存储库的类型有很多种,如文件,关联型数据库,非关联型数据库,LDAP;
nsswitch的通用框架为上层应用程序提供统一的接口,将数据转换,从而才能访问下层不同文件系 统的存储库,若是没有中间层的作用,上层应用程序想要访问下层不同的文件系统则需要编写对应文 件系统的程序,而这样的工作量太大,并不适应于当前环境;
Linux中实现名称解析的通用框架是通过库来实现的:
/lib64/libnss*<-->/usr/lib64/libnss*
解析库的配置是由/etc/nsswitch.conf配置文件进行配置的
格式为:
db: store_format1 store_format2...
如
对passwd,shadow,group,host等进行设置;
查找对应库中的关键字的信息,使用命令getent
passwd库中的关键字只用用户名以及uid
pam:
pluggable authentication modules 插入式认证模块
通用的认证框架;
pam认证的功能模块亦是通过库来实现,pam的库都存储在/lib64/security(CentOS7)
配置文件:
全局认证配置文件:/etc/pam.conf
格式:
application type control module-path module-options
为每一种应用所提供的专用的配置文件:/etc/pam.d/*
格式:
type control module-path module-options
如:
type:
auth:账户的认证授权配置有关;
account:表示账户类接口,主要负责账户合法性检查,确认帐号是否过期,是否有权限登 录系统等;
session:服务开始前,服务结束后需要进行的附加操作;
password:修改密码后,根据密码复杂度进行的相应操作;
control:
require:隐性的一票否决,若有条目未被满足,不立刻中断认证而是继续查看条目,直到 条目结束才中断认证;
requisite:显性的一票否决,若有条目未被满足则立刻中断认证;
sufficient:当本条目满足时,若该条目之前的所有条目都被满足了,则整个栈立即终止并 立即返回认证成功的信号;如果本条目的验证失败,还需要继续参考其他的条目规 则;一票通过;没有一票否决;会当做optional对待
optional:无足轻重,不管成功还是失败都不影响全局;
include:将其他的配置文件中的流程栈包含在当前位置,就好像把其他的配置文件的配置 内容复制到当前文件
substack:运行其他配置文件的流程,但与include不同的是其在子栈中运行,其运行结果 不影响主栈;
status:
user_unknown:用户未知,无法查找到;
success:成功后返回什么结果,通常为ok;
default:默认情况下返回什么结果;
action:返回的动作;ok,N,bad,ignore,die(一票否决),done(一票成功)
如:
module-path:相对路径,绝对路径,/lib64/security/*
module-arguments:默认的模块参数;