2019-07-15

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019-07-15相关的知识,希望对你有一定的参考价值。

参考技术A 检测到远端XFS服务正在运行中漏洞

临时关闭fs.auto服务:

可以通过编辑/etc/inetd.conf文件,重新启动Inetd进程来关闭fs.auto服务:

1. 注释/etc/inetd.conf文件中的如下一行:

#fs              stream  tcp    wait nobody /usr/openwin/lib/fs.auto    fs

2. 重新启动inetd进程:

# ps -elf |grep inetd

    root  138    1  0  Oct 15 ?        0:00 /usr/sbin/inetd

# kill -1 138

solaris 查找文件 find命令

1. find命令格式

 find: [-H | -L] 路径列表 谓词列表

 可以使用:man find 查看命令选项。

2. 通过文件名查找法:

 如果你把这个文件放在单个的文件夹里面,只要使用常见的“ls"命令就能方便的查找出来,如果知道了某个文件的文件名,而不知道这个文件放到哪个文件夹,甚至是层层套嵌的文件夹里。举例说明,假设你忘记了sshd_config(ssh 服务器 的配置文件)这个文件在系统的哪个目录下,甚至在系统的某个地方也不知道,则这是可以使用如下命令

find / -name sshd_config 

 这个命令语法看起来很容易就明白了,就是直接在find后面写上 -name,表明要求系统按照文件名查找,最后写上httpd.conf这个目标文件名即可。稍等一会系统会在计算机 屏幕 上显示出查找结果列表:

 #find / -name sshd_config

 /var/sadm/pkg/SUNWsshdr/save/pspool/SUNWsshdr/reloc/etc/ssh/sshd_config 

  /etc/ssh/sshd_config 

 如果输入以上查找命令后系统并没有显示出结果,那么不要以为系统没有执行find/ -name sshd_config 命令,而可能是你的系统中没有安装ssh 服务器 ,这时只要你安装了ssh服务器,然后再使用find / -name sshd_config 就能找到这个配置文件了。 

服务器支持 TLS Client-initiated 重协商攻击 (CVE-2011-1473)

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。

重协商就是大部分TLS连接都以handshake为开始,经过应用数据的交换,最后关闭会话。如果在第一次handshake之后(可能经历了应用数据的交换也可能没有)请求重新协商,就会发起一次新的handshake,对新的安全参数达成一致

关闭命令:ssl renegotiation disable

远端rsh 服务允许部分用户登录。需要禁止rsh 服务 。

方法:

cat /.rhosts 查看是否有 + 号,意思是允许所有其他机器访问。 我们主要VI编辑将+去掉即可。(该配置文件,其做用就是控制访问IP)

因为RSH服务不能控制入访因此我们需要禁用内网所有主机的出访服务

禁用RSH出访服务 svcadm disable svc:/network/shell:default

禁用rlogin服务 svcadm disable svc:/network/login:rlogin

检测到远端rsh 服务正在运行中。禁用RSH 服务,改用SSH 代替 。

方法:

1、vi /.rhosts 去掉其中的+号

2、vi /etc/default/login

CONSOLE=/dev/console 将这一行#注释掉。

因为RSH服务不能控制入访因此我们需要禁用内网所有主机的出访服务

3、禁用RSH出访服务 svcadm disable svc:/network/shell:default

4、禁用rlogin服务 svcadm disable svc:/network/login:rlogin

SSL 3.0 POODLE攻击信息泄露漏洞(CVE-2014-3566)

现场次漏洞只存在于服务器,后又发现此漏洞依赖于服务器的5989端口,可以在防火墙禁用此端口或杀掉此进程

方法一 编辑: vi /etc/sysconfig/iptables

添加:-A INPUT -p tcp --dport 5989 -j DROP

-A INPUT -p tcp --sport 5989 -j DROP

重启网络服务:service iptables restart

方法二 根据netstat –tunlp|grep 5989 查找PID ,pwdxPID查看程序路径,如没问题则可以杀死此进程。

POODLE = Padding Oracle On Downgraded Legacy Encryption.是最新安全漏洞(CVE-2014-3566)的代号,俗称“贵宾犬”漏洞。 此漏洞是针对 SSL 3.0中CBC模式加密算法的一种padding oracle攻击,可以让攻击者获取 SSL 通信中的部分信息明文,如果将明文中的重要部分获取了,比如cookie,session,则信息的安全出现了隐患。

从本质上说,这是 SSL 设计上的缺陷, SSL 先认证再加密是不安全的。

修复措施:

禁用sslv3协议

不同的web server不尽相同。这边列举主流的服务器的禁用方式

nginx服务器:

注意:nginx和openssl套件版本过低可能会导致无法启用新型加密套件和算法,请升级最新版本。

(openssl1.0.1+版本支持TLS1.1和TLS1.2协议)

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 

ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL;

ssl_prefer_server_ciphers  on;

apache服务器:

注意:apache和openssl套件版本过低可能会导致无法启用新型加密套件和算法,请升级最新版本。

(openssl1.0.1+版本支持TLS1.1和TLS1.2协议)

apache2.X版本:

SSLProtocol  all -SSLv2 -SSLv3

SSLCipherSuite ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL

SSLHonorCipherOrder on

Tomcat服务器:

JDK版本过低也会带来不安全漏洞,请升级JDK为最新版本。升级JDK风险请安按照系统升级风险酌情考虑。

(先备份再配置,低版本的配置后有启动不了的风险,请升级tomcat和jdk版本,JDK1.7及以上支持TLS1.2协议)

maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

keystoreFile="keystore/domain.jks"  keystorePass="证书密码"

clientAuth="false" sslProtocol="TLS"

ciphers="TLS_RSA_WITH_AES_128_GCM_SHA256,

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,

TLS_RSA_WITH_AES_128_CBC_SHA,

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,

TLS_RSA_WITH_AES_128_CBC_SHA256,

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,

SSL_RSA_WITH_3DES_EDE_CBC_SHA,

                        TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" />

使用apr的tomcat(windows环境路径请使用“\”,证书文件是for apache压缩包中的三个文件)

maxThreads="150"

protocol="org.apache.coyote.http11.Http11AprProtocol"

enableLookups="false" disableUploadTimeout="true"

acceptCount="100" scheme="https" secure="true"

SSLEnabled="true"

SSLProtocol="all -SSLv2 -SSLv3"

SSLCertificateFile="conf/domian.com.crt"

SSLCertificateKeyFile="conf/domian.com.key"

SSLCertificateChainFile="conf/root_bundle.crt"

               SSLCipherSuite="ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL" />

Guava文档翻译之 Service

概览

Guava的接口代表了一个有运行状态的对象,有启动和停止的方法。比如网络服务器,RPC服务器,以及计时器等,都可以实现Service接口。掌管像这样的服务的状态,需要正确地管理启动和关闭,因此会是繁琐的,特别是牵扯到多线程和调度。Guava提供了一个基本的骨架,可以帮你管理状态逻辑,以及同步的细节

一个Service的通常的生命周期是

 

一个已经停止的Service是不能被重启的。如果这个服务在启动或者运行、停止时失败,那么它会转入Service.State.FAILED状态。

一个服务可以被使用 startAsync()来异步地启动,这个方法会返回‘this‘引用,以方便地使用方法链。只有这个服务是NEW状态的时候才能调用。所以,你的程序应该有个唯一的地方来启动每一个服务。

停止服务是类似的,使用异步的stopAsync()方法。但是不像startAsync()方法,它可以安全地调用多次。这使得可以它可以应对在关闭服务器可能遇到的竞争问题。

服务也提供了几种方法来等待服务状态转换的完成。

  • 异步地使用addListener()。addListener()允许你添加一个Service.Listener,它会在服务的服务状态转换时被调用。需要注意的是,如果在这个listener被添加时,服务器已经不是NEW的状态。,那么已经发生过的状态转换是不会在这个listener上重放。
  • 异步地使用awaitRunning()。它是不可中断的(uniterruptible),不会抛出受检异常,会在服务启动完毕时返回。如果服务启动失败,会抛出一个IllegalStateException。类似的是 awaitTerminated(),调用它等待服务到达终止状态(TERMINATED or FAILED)。这两个方法都有重载的方法,允许指定超时时间。

 Service接口是微妙的。我们不建议直接实现它。你可以使用我们在guava提供几个虚类中的一个作为你的实现的基础。每个基类提供了一个特定的线程模型。

实现

AbstractIdleService

 AbstractIdleService骨架实现了一个Service,这个服务不需要在“running”状态执行任何动作,因此它在运行时也不需要一个线程,但是它仍然需要执行启动和停止的动作。实现这样的服务只需要继承AbstractIdleService,并且实现 startUp()以及shutDown()方法,

protected void startUp() {
  servlets.add(new GcStatsServlet());
}
protected void shutDown() {}

需要指出的是,任何对GcStatsServlet的查询已经运行于一个线程中了。因此,在这个服务运行时,我们不需要它执行任务操作。

AbstractExecutionThreadService

一个AbstractExecutionThreadService在同一个线程中执行启动,动行和关闭操作。你必须重写run() 方法,而且这个方法必须对关闭请求作为响应。比如,你或许会在一个工作循环中执行这些动作:

public void run() {
  while (isRunning()) {
    // perform a unit of work
  }
}

或者,你可以覆盖 triggerShutdown()方法,只要它能够使得run()方法返回。覆盖startUp()shutdown()方法是可选的,但是服务的状态会由这个骨架替你管理。

protected void startUp() {
  dispatcher.listenForConnections(port, queue);
}
protected void run() {
  Connection connection;
  while ((connection = queue.take() != POISON)) {
    process(connection);
  }
}
protected void triggerShutdown() {
  dispatcher.stopListeningForConnections(queue);
  queue.put(POISON);
}

需要注意的是start()调用了你的startUp()方法,为你创建了一个线程,并且在这个线程中调用run()方法。stop()方法调用了triggerShutdown()方法,并且等待线程停止。(译注:重点是run()方法不是在调用start()的线程中执行的)

AbstractScheduledService

一个AbstractScheduledService在它动行时执行一些周期性的任务。它的子类覆盖runOneIteration()来指定每个周期的任务,同时也需要覆盖我们熟悉的startUpshutDown() 方法

为了描述怎么调度执行,你需要实现scheduler()方法。通常而言,你会使用已经AbstractScheduledService.Scheduler提供的几个调度器中的一个,newFixedRateSchedule(initialDelay, delay, TimeUnit)或者newFixedDelaySchedule(initialDelay, delay, TimeUnit),与我们熟知的ScheduledExecutorService中的方法相类。自定义的调度器可以用来实现,请参见Javadoc.

AbstractService

如果你需要自己管理线程,就需要直接覆盖AbstractService。通常来说,以上提到的几种实现就够用了,但是,有些情况下是建议实现AbstractService的,比如,你对有自己的线程语义的东西进行建模,把它做成一个Service,你就会有自己特殊的线程相关的需求。

为了实现AbstractService,你需要实现这两个方法

  • doStart():doStart()在第一次调用startAsync()时被直接调用,你的doStart()方法应该完成所有初始化工作,并且在启动成功时调用,或者启动失败时调用。
  • doStop():doStop()在第一次调用stopAsync()时被调用,你的doStop()方法应该关闭你的服务,并且如果关闭成功,最终调用notifyStopped(),或者关闭失败,就调用notifyFailed()

你的doStartdoStop方法应该执行得很快。如果你需要进行昂贵的初始化工作,比如读取文件,开启网络连接,或者进行任何可能会阻塞的工作,你需要移动这些工作到另一个线程去做。

使用SerivceManager

Service的骨架实现之外,Guava还提供了一个ServiceManager类,它使得一些跟多个Service的实现相关操作操作更简单一些。使用Service的集合创建一个新的ServiceManager。然后你就可以管理它们了:

或者检查这些服务:

  • isHealthy() 在所有服务都在状态时返回true
  • 将会返回一个所有服务的一致的snapshot,以它们的状态作为索引。
  • startupTimes()将会返回从受管理的Service到它花了多少毫秒启动的map.Guava保证这个返回的map将按照启动时间(startup time)排序。

别然我们建议服务的生命周期通过ServiceManager来管理,但是通过其它机制进行的状态转换不会影响它的方法的正确性。比如,如果一些服务不是通过startAsync()启动的,监听器仍然会在合适的时机被调用,并且 awaitHealthy()也会照常工作。ServiceManager的唯一要求是在ServiceManager构造时,所有的Serivce都在NEW状态。

以上是关于2019-07-15的主要内容,如果未能解决你的问题,请参考以下文章

服务监控报警

scrapy 基本操作

我们可以在 Switch 上创建索引吗?MongoDB 中的案例

Scrapy项目实战

JavaSE字符编码和存储编码

Forcepoint One Endpoint Diagnostics Tool.lnk