centos hosts 权限(centos用户权限设置)
大家好,关于centos hosts 权限很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于centos用户权限设置的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
/etc/hosts.allow 与 /etc/hosts.deny的关系
在centos中可以通过配置hosts.allow和hosts.deny这两个文件共同来控制外部对本机的访问权限。
/etc/hosts.allow控制可以允许访问本机的IP地址,/etc/hosts.deny控制禁止访问本机的IP。如果两个文件的配置有冲突,以/etc/hosts.allow为准(实际情况可能有误,建议搭环境进行测试)
linux系统会先检查/etc/hosts.deny规则,再检查/etc/hosts.allow规则,如果有冲突按/etc/hosts.allow规则处理
下图是我搭建的实验环境,左边部分是在虚拟机centos中配置的/etc/hosts.allow,/etc/hosts.deny,右边是我用物理机远程链接虚拟机的实验结果。
1. 只允许 140.116.44.0/255.255.255.0 与 140.116.79.0/255.255.255.0 这两个网段,及 140.116.141.99 这个主机可以进入我们的 telnet 服务器;此外,其它的 IP 全部都挡掉!
这样则首先可以设定 /etc/hosts.allow 这个档案成为:
[root @test root]# vi /etc/hosts.allow
telnetd: 140.116.44.0/255.255.255.0 : allow
telnetd: 140.116.79.0/255.255.255.0 : allow
telnetd: 140.116.141.99 : allow
再来,设定 /etc/hosts.deny 成为『全部都挡掉』的状态:
[root @test root]# vi /etc/hosts.deny
telnetd: ALL : deny
service network restart(centos6)
systemctl restart network(centos7)
重启网络服务才能让刚才的更改生效
在centos中怎么安装telnet
一.查看本机是否有安装telnet(centOS5默认有安装telnet)#rpm-qa|greptelnet如果显示结果为:telnet-0.17-39.el5telnet-server-0.17-39.el5那恭喜你,机器上已经安装了telnet。如果没有安装,请看下一步。特别说明:telnet分为telnet-client(简称为telnet)和telnet-server。telnet-client系统(CentOs5.5)一般默认已经安装。telnet-server需要单独安装。二、安装telnet第一种方法(在线安装):可使用命令:#yuminstallxinetd(注意在root下安装)#yuminstalltelnet-server(注意在root下安装)第二种方法(光盘安装法):cd/光盘/CentOSrpm-ivhxinetd-2.3.14-10.el5.i386.rpmrpm-ivhtelnet-server-0.17-39.el5.i386.rpm特别说明:1、telnet服务要依靠xinetd服务启动,所以要先安装xinetd服务。所以我们要先安装xinetd,再安装telnet-server。CentOS5.5默认没有安装telnet和xinetd服务。2、CentOS-5.5-i386-bin-DVD里面有xinetd和telnet-server和安装包!!不需要上网下载!!三.配置telnet方法一:使用ntsysv,在出现的窗口之中,将telnet勾选起来,然后按下OK即可!方法二:使用chkconfig命令直接开启#chkconfigtelneton方法三:直接修改配置文件vi/etc/xinetd.d/telnet一般是这样子的:#default:yes#description:Thetelnetserverservestelnetsessions;ituses\#unencryptedusername/passwordpairsforauthentication.servicetelnet{flags=REUSEsocket_type=streamwait=nouser=rootserver=/usr/sbin/in.telnetdlog_on_failure+=USERIDdisable=yes}只需要将”disable=yes”改成”disable=no”四、激活服务telnet是挂在xinetd底下的,所以自然只要重新激活xinetd就能够将xinetd里头的设定重新读进来,所以刚刚设定的telnet自然也就可以被激活。#servicexinetdrestart或者#/etc/rc.d/init.d/xinetdrestart五.iptables防火墙会阻止telnet,所以需要在iptables允许,用如下命令当你启动telnet服务后,你可以用netstat–tunlp命令来查看telnet服务所使用的端口,可以发现有23。使用下面命令开启这些端口:iptables-IINPUT-ptcp--dport23-jACCEPTiptables-IINPUT-pudp--dport23-jACCEPTserviceiptablessave//保存serviceiptablesrestart//重启防火墙或者来点狠的!!关闭防火墙!serviceiptablesstop六、可能的问题:下面我们来看一下二种错误:第一种:[root@linuxchao~]#telnet192.168.1.87Trying192.168.1.87telnet:connecttoaddress192.168.1.87:Noroutetohosttelnet:Unabletoconnecttoremotehost:Noroutetohost解决方法:这种问题防火墙没有允许telnet服务,连接被阻止,默认CentOS只允许SSH,所以进入其自定义选项,在telnet前打个勾!第二种[root@testxinetd.d]#telnet172.25.1.3Trying172.25.1.3Connectedto172.25.1.3(172.25.1.3).Escapecharacteris'^]'.getnameinfo:localhost:SuccessTemporaryfailureinnameresolution:IllegalseekConnectionclosedbyforeignhost.这一个就是/etc/hosts文件配置问题解决方法:我在里面加两个IP地址,内容如下:[linux@localhost~]$more/etc/hosts#Donotremovethefollowingline,orvariousprograms#thatrequirenetworkfunctionalitywillfail.127.0.0.1localhost.localdomainlocalhost::1localhost6.localdomain6localhost6192.168.1.88192.168.1.86说明:因为客户机的名字不好记就没写进去,内容格式应为127.0.0.1pcname
一次/etc/hosts权限错误导致的es集群错误
先说一下环境:系统使用的CentOS7.5,elasticsearch版本是5.4.0。一套产品集群包括三个elasticsearch节点构成的集群。
部署了两套测试集群,配置基本类似,elasticsearch配置文件中使用主机名。在某一次测试后,一套集群里的elasticsearch就开始报错,无法提供服务。查看日志发现,elasticsearch一直抛出UnknownHostException异常,所以无法和另外两个节点通信连成集群。根据堆栈信息,这个异常是在解析其它elasticsearch节点域名的时候调用InetAddress.getAllByName()抛出的。
而另外一套集群里类似的配置,它的elasticsearch服务却是很正常的。唯一的不同是,出问题的集群临时配置了DNS服务。
按正常的情况来说,elasticsearch解析域名的方式应该是先从/etc/hosts中获取,获取不到了再查询DNS。elasticsearch服务节点的主机名、IP都有在配置在/etc/hosts中。所以,即使一套集群配置了DNS,另外一套没有,也不应该出现elasticsearch无法解析域名的问题。
为了找到域名解析错误的原因,我决定跟踪一下elasticsearch解析域名的过程,使用的工具是strace。strace命令可以追踪进程的系统调用。
安装过程很简单。
接着是修改elasticsearch的执行脚本,一般路径是/usr/share/elasticsearch/bin/elasticsearch。在这个脚本的最后几行,在exec后添加strace命令 strace-o/tmp/es.strace.log-f,如下所示。
-o参数将strace的输出保存到文件/tmp/es.strace.log,-f参数表明追踪进程的所有子进程的系统调用。
两个集群的elasticsearch节点都修改了这个脚本,重启服务后对比查看。对比这个输出文件,终于发现一些端倪。首先,elasticsearch调用的getAllByName()确实首先查看了/etc/hosts文件,但是权限不足无法访问这个文件。
这是有问题的,首先是这个文件应该是可读的,不应该出现权限不足的问题,第二是两个集群都无法访问这个文件,但是为什么一个能解析域名而另外一个不能。
接着往下对比,出问题的elasticsearch进程这时候检查到/etc/resovl.conf文件已经配置,于是向DNS服务器发出了查询。DNS无法解析,于是抛出了UnknownHostException异常。另外一边,没有问题的elasticsearch进程检查到/etc/resovl.conf未配置,这时候做了一个特别的操作,它创建了一个地址族是AF_NETLINK的原始套接字,通过这个套接字查询得到了域名对应的IP地址。我猜测,这可能是访问系统的ARP信息。
既然是DNS的问题,那么把出问题的/etc/resolv.conf中的DNS配置删除呢?重启服务之后,elasticsearch服务依然抛出异常,查看日志发现进程虽然跳过了/etc/resolv.conf,但是它却开始访问了本地的DNS端口53(UDP),可能这是java最后的解析尝试了。恰好,这个节点上部署了rpcbind服务,这个服务恰好就监听了53端口,结果就是依然无法通过DNS解析,java华丽丽的抛出了异常。
问题的根本原因还是/etc/hosts文件不可读,查看这个文件的权限,结果是600,意思就是只能root用户读写了,其它用户没有任何权限,包括读。elasticsearch服务使用的elasticsearch用户,所以当然就会被禁止读取。
经过其它的查找,发现是有一个服务进程会一直更新这个hosts文件,更新的方式是先创建一个临时文件,然后rename成hosts文件,由于临时文件的默认权限是600,所以导致hosts文件的权限最后也是600了。
至此,整个的问题的原因已经清楚。hosts权限的错误,导致elasticsearch通过DNS解析域名,又刚好DNS解析报错,没有通过ARP解析域名。
另外从这个事情中也可以看到java解析域名的套路,先/etc/hosts文件,接着是DNS,先远程的DNS后本地的DNS,最后尝试从本地ARP缓存解析,中间有一个过程抛出异常的时候,解析就会失败。