数据专栏

智能大数据搬运工,你想要的我们都有

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

「深度学习福利」大神带你进阶工程师,立即查看>>>
Unit文件编写参考链接:
https://www.freedesktop.org/software/systemd/man/systemd.service.html Unit基础介绍
Unit文件可以从多个位置加载,常见位置如下(优先级 低—>高 ):
/usr/local/lib/systemd/system/ :软件包安装后的unit
/etc/systemd/system/ :系统管理员安装的unit
备注:
·systemd 单元名仅能包含 ASCII 字符,下划线和点号和有特殊意义的字符('@', '-')。其它字符需要用 C-style "-" 替换。
·当 systemd 运行在用户模式下时,使用的加载路径是完全不同的。
· 以 # 开头的注释可能也能用在 unit-files 中,但是只能在新行中使用,在systemd的参数后面使用行末注释,则 unit 将会启动失败。
查看加载的位置
# systemctl show --property=UnitPath
Unit中的依赖关系处理
使用 systemd 时,可通过正确编写单元配置文件来解决其依赖关系。典型的情况是,单元 A 要求单元 B 在 A 启动之前运行。在此情况下,向单元 A 配置文件中的 [Unit] 段添加 Requires=B 和 After=B 即可。若此依赖关系是可选的,可添加 Wants=B 和 After=B 。请注意 Wants= 和 Requires= 并不意味着 After= ,即如果 After= 选项没有制定,这两个单元将被并行启动。
依赖关系通常被用在服务(service)而不是目标(target)上。例如, network.target 一般会被某个配置网络接口的服务引入,所以,将自定义的单元排在该服务之后即可,因为 network.target 已经启动。 组成部分
1.Unit部分
Unit 部分
参数 参数说明
Description 使用 systemctl list-units 时,会输出给管理员看的简易说明!当然,使用 systemctl status 输出的此服务的说明,也是这个项目!
Documentation 提供给管理员查看的文档,多为帮助文档。
After 说明此 unit 是在哪个 daemon 启动之后才启动,基本上仅是说明服务启动的顺序而已,并没有强制要求配置的服务一定要启动后此 unit 才能启动。与 Requires 的设置是有差异。
Before 与 After 的意义相反,是在什么服务启动前最好启动这个服务的意思。不过这仅是规范服务启动的顺序,并非强制要求的意思。
Requires 明确的定义此 unit 需要在哪个 daemon 启动后才能够启动!就是设置相依服务,如果在此项设置的前导服务没有启动,那么此 unit 就不会被启动。
Wants
Conflicts
与 Requires 刚好相反,配置启动unit 之后最好还要启动什么服务比较好,不过,并没有明确的规定,主要的目的是希望创建让使用者比较好操作的环境。 因此,这个 Wants 后面接的服务如果没有启动,不会影响到这个 unit 本身。
用于冲突性检查。如果此处配置的服务已经启动,那该unit就不能启动。该unit启动,此处配置的服务则不能启动。
备注:以mysqld服务为例:
# systemctl list-units | grep "MySQL Server"
2.Install部分
Install 部分
参数 参数说明
WantedBy 这个设置后面接的大部分是 *.target unit !意思是,这个 unit 本身是附挂在哪一个 target unit 下面的!一般来说,大多的服务性质的 unit 都是附挂在 multi-user.target 下面!
Also
Alias
当目前这个 unit 本身被 enable 时,Also 后面接的 unit 也请 enable 的意思!也就是具有相依性的服务可以写在这里呢!
进行一个链接的别名的意思!当 systemctl enable 相关的服务时,则此服务会进行链接文件的创建!以 multi-user.target 为例,这个家伙是用来作为默认操作环境 default.target 的规划, 因此当你设置用成 default.target 时,这个 /etc/systemd/system/default.target 就会链接到 /usr/lib/systemd/system/multi-user.target !
备注:对于总线可激活服务,不要在systemd服务文件中包含“[Install]”部分,而是在相应的DBus服务文件中使用SystemdService=选项,例如:
3.Service部分
Service 部分
参数 参数说明
User 启动该服务的用户
Group 启动该服务的组
Type 说明这个 daemon 启动的方式,会影响到 ExecStart !一般来说,有下面几种类型 :
simple:默认值,这个 daemon 主要由 ExecStart 接的指令串来启动,启动后常驻于内存中。【systemd认为该服务将立即启动。服务进程不会 fork 。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket 激活型。】
forking:由 ExecStart 启动的程序通过 spawns 延伸出其他子程序来作为此 daemon 的主要服务。原生的父程序在启动结束后就会终止运行。 传统的 unit 服务大多属于这种项目,例如 httpd 这个 WWW 服务,当 httpd 的程序因为运行过久因此即将终结了,则 systemd 会再重新生出另一个子程序持续运行后, 再将父程序删除。据说这样的性能比较好!【systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便 systemd 能够跟踪服务的主进程。】
oneshot:与 simple 类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中。【这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。】
notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
dbus:与 simple 类似,但这个 daemon 必须要在取得一个 D-Bus 的名称后,才会继续运行!因此设置这个项目时,通常也要设置 BusName= 才行!【若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪】
idle:与 simple 类似,意思是,要执行这个 daemon 必须要所有的工作都顺利执行完毕后才会执行。这类的 daemon 通常是开机到最后才执行即可的服务!【systemd会等待所有任务处理完成后,才开始执行 idle 类型的单元。其他行为与 Type=simple 类似。】
说明:比较重要的项目大概是 simple, forking 与 oneshot 了!毕竟很多服务需要子程序 (forking),而有更多的动作只需要在开机的时候执行一次(oneshot),例如文件系统的检查与挂载啊等等的。
更多解释: systemd.service(5)
PIDFile 获取指向服务的PID文件的路径。对于Type=forking的服务,建议使用此选项。指定的路径通常指向/run/下面的文件。需要制定一个绝对路径。
TimeoutSec 若这个服务在启动或者是关闭时,因为某些缘故导致无法顺利“正常启动或正常结束”的情况下,则需要等多久才进入“强制结束”的状态!
PermissionsStartOnly 仅能符合权限的进行启动。
ExecStartPre=, ExecStartPost= 分别在ExecStart=中的命令之前或之后执行的其他命令。语法与ExecStart=相同,不同之处是允许多个命令行,并且命令是一个接一个地连续执行的。
ExecStart 就是实际执行此 daemon 的指令或脚本程序。也可以使用 ExecStartPre (之前) 以及 ExecStartPost (之后) 两个设置项目来在实际启动服务前,进行额外的指令行为。 但是要特别注意的是,指令串仅接受“指令 参数 参数...”的格式,不能接受 <, >, >>, |, & 等特殊字符,很多的 bash 语法也不支持喔! 所以,要使用这些特殊的字符时,最好直接写入到指令脚本里面去!不过,上述的语法也不是完全不能用,亦即,若要支持比较完整的 bash 语法,要使用 Type=oneshot 才行! 其它的 Type 不能支持这些字符。
ExecStop 与 systemctl stop unit 的执行有关,关闭此服务时所进行的指令。
ExecReload 与 systemctl reload unit 有关的指令行为
RemainAfterExit 当设置为 RemainAfterExit=1 时,则当这个 daemon 所属的所有程序都终止之后,此服务会再尝试启动。这对于 Type=oneshot 的服务很有帮助!
EnvironmentFile 可以指定启动脚本的环境配置文件!例如 sshd.service 的配置文件写入到 /etc/sysconfig/sshd 当中!也可以使用 Environment= 后面接多个不同的 Shell 变量来给予设置!
LimitNOFILE
Restart 当设置 Restart=1 时,则当此 daemon 服务终止后,会再次的启动此服务。
举例来说:如果在 tty2 使用文字界面登陆,操作完毕后登出,基本上,这个时候 tty2 就已经结束服务了。 但是你会看到屏幕又立刻产生一个新的 tty2 的登陆画面等待用户的登陆!那就是 Restart 的功能!除非使用 systemctl 强制将此服务关闭,否则这个服务会源源不绝的一直重复产生!
RestartPreventExitStatus 如果在RestartPreventExitStatus= 中指定了退出代码或信号,或者使用systemctl stop或等效操作停止服务,则服务将不会重新启动。此外,如果在RestartForceExitStatus= 中指定了退出代码或信号,服务将始终重新启动。
PrivateTmp
KillMode 可以是 process, control-group, none 的其中一种,如果是 process 则 daemon 终止时,只会终止主要的程序 (ExecStart 接的后面那串指令),如果是 control-group 时, 则由此 daemon 所产生的其他 control-group 的程序,也都会被关闭。如果是 none 的话,则没有程序会被关闭!
RestartSec
BusName
与 Restart 有点相关性,如果这个服务被关闭,然后需要重新启动时,大概要 sleep 多少时间再重新启动的意思。默认是 100ms (毫秒)。
常用:5000ms或5s
接受此服务可访问的D-Bus总线名称。对于Type=dbus的服务,此选项是必需的。
系统运维
2019-12-06 14:38:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
https://www.infoq.cn/article/2yNg1oimAzePYHYRumYf
系统运维
2019-12-06 11:34:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
随着京东云业务的飞速发展,其需要管理的物理机、虚机以及各类容器已经达到了数十万之巨,在如此数量如此庞大资源机如何管理的课题面前,京东云意识到必须开发自己的高效、安全、稳定的资源机管理系统,为京东云乃至整个京东集团各项业务的发展提供坚实可靠的后盾,“门神”系统在这种情况下应运而生,并在经过多次京东618、11.11等诸多重大活动的检验后,变得愈发成熟稳定。
“门神”顾名思义,就是守护整个京东资源机云安全的守护神,是京东云平台自主研发的一套基于服务树角色授权的线上机器运维平台,该平台支持认证登录、系统运维和安全审计,可以对京东云平台所有的主机进行统一的访问控制、操作历史记录等,是符合4A的专业运维审计系统,构建统一、高效、安全运维通道,保障云端运维工作遵循法律法规要求、降低人为安全风险,提高运维效率。
设计目标
为了适应京东云业务快速发展、所需管理的物理机、虚机和容器数量指数级增加的现状,满足公司安全认证、高效运维、操作审计、职权管控的要求,门神设计初期就制定了如下目标: 安全认证
支持双因子认证机制,通过二维码、动态令牌等技术,控制账号密码泄露风险,防止运维人员身份冒用和复用。 高效运维
自研SSH交互界面,简洁易用,方便管理大量主机,简化运维和安全操作,提升运维效率;门神登录成功后支持资源机之间的无密码穿梭。 操作审计
全程记录运维人员的操作行为,操作内容支持各种维度信息查询,支持操作记录回放,将全程审计运维操作作为事件追溯的保障和事故分析的依据。 职权管控
将京东云服务树作为账号和资源机授权信息的来源,统一运维入口,统一自然人与主机帐号间的权限关系,统一运维操作审计管控点。 高可用
门神各模块实现分布式设计和部署,单节点问题不会影响整个系统正常提供服务;支持上万级别的并发会话运维能力。
设计细节
1、核心技术点
门神系统涉及诸多技术,其中核心技术点包括: 多因子认证
用户登录relay采用密码+验证码方式,其中验证码可以选择基于云翼的6位数字验证码或者基于京东内部工作客户端(京me)的二维码扫描验证。 kerberos认证
门神用户身份认证是基于kerberos协议,保证在非安全网络环境下的安全认证登录,并且实现一次登录relay后,在授权资源机之间可以免密穿梭。 nsswitch扩展
使用nsswitch替代/etc/passwd实现用户信息的获取,该扩展部署到每台资源机,从doorgod-api模块获取登录账号的uid、gid信息。 sudoers
基于sudoers实现基于角色的用户权限控制,运维角色可以sudo到root账号下操作,开发角色只能使用自己的账号操作,无法sudo。 安全性
内部模块交互白名单机制,密码只签名、不传输;非对称加密保存密码;自动加黑机制防止被爆破;定时过期机制。
2、设计详情
从门神总体架构图可以看出,门神的数据源是京东云自研的核心数据模块(服务树模块),所有用户和资源机信息都是从服务树模块获取并保存到数据库和kerberos中的,并通过脚本实时同步服务树中变化的数据,从而保证数据会实时的同步到门神系统。门神主要模块包括relay、kerberos、relay-server、doorgod-api和需要安装到资源机的客户端dg-client,下文介绍结合核心模块的设计和实现。
relay模块
该模块是用户登录门神的“前端”,以独立容器方式启动,其sshd开启kerberos认证。用户使用ssh协议登录时需要输入用户名和密码,kerberos验证通过后登录容器;login-shell二次验证还需要用户输入从云翼获取的验证码,或者使用京me扫码验证,二次校验无误方可进入用户操作界面。
门神用户操作界面经过开发团队反复打磨,简单易用,人机交互自然流畅,主界面为授权给用户的资源机信息,右边部分展示快捷键信息和登录历史信息,下方是用户输入区,用户可以通过如下方式登录资源机:
a、 输入主界面index number选择资源机登录;
b、 直接输入ip登录;
c、 输入应用名称或者ip进行模糊匹配,选择具体资源机登录;
d、 输入右侧历史记录的index number登录(以“!”开始)。
recorder进行tty劫持,从而实现录屏功能,用户所有的操作都会被记录下来,通过syslog发送到kafka集群,最终被ES集群消费和存储,作为用户提供操作审计查询的数据源。 kerberos模块
作为门神系统的安全认证模块,是保证京东云数十万线上机器安全运维的关键。
该模块通过脚本实现从服务树获取资源机信息和从门神数据库(MySQL)获取用户信息,注册到其kerberos自己的数据库中,并且每分钟同步一次数据,保证数据的时效性。 dg-client客户端
dg-client是c语言实现的so文件,所有门神管控的资源机都需要安装该文件,并对资源机的nsswitch.conf文件追加该so文件的扩展信息,使得所有门神用户信息都通过该so文件获取。另外,kerberos配置文件也需要下载到资源机的etc目录下。
日志存储
门神日志是由syslog服务来进行监控和发送到kafka集群的,日志解析服务会消费kafka中的数据,并进行解析,解析后数据发送到ES集群;
解析前的数据转存到京东云OSS中。
通过云翼可以按照目的ip、操作类型、关键字(支持精确匹配和模糊匹配)、时间进行查询操作日志,从而实现用户操作全程审计;门神还支持用户操作回放功能,能更加清楚的对用户操作进行审计。
门神系统为京东云软件开发、测试、运维人员提供了统一的运维入口,只需要记住一个密码就能登录所有授权主机,并自由的在授权主机之间穿梭,这极大的减轻了软件工程师们的工作负担,提升了工作效率。同时,又为运维安全提供了技术实现方面的保障,将审计工作贯彻到整个运维流程全过程中,切实保证了线上机器的运维安全。 当前,门神已经成为京东云线上机器运维的主要平台,成功为京东618、11.11等诸多重大活动提供运维支持保障,成为助力京东云快速、高质量发展的重要力量之一。门神团队正在开发门神系统的控制台产品-堡垒机,该产品将以开源版本和商业版本两种方式发布,请各位读者朋友多提宝贵意见。
点击“ 阅读 ”了解京东云翼产品!
欢迎点击“ 京东云 ”了解更多精彩内容
系统运维
2019-12-06 10:44:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
引用:
https://www.cnblogs.com/hsz-csy/p/9488469.html
Intellij IDEA快速实现Docker镜像部署
idea2018 如何将springboot项目打包成只有一个jar包!(应该也适用于其它的maven创建的项目)
Centos 系统安装 Docker 软件教程在这里暂且忽略;
需要先做的是开放我们Centos 中 Docker的远程连接功能,操作过程如下 方法一: #编辑Docker配置文件 vim /usr/lib/systemd/system/docker.service #注释ExecStart这行 #加上新行 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock #重新加载配置文件 systemctl daemon-reload #重启服务 systemctl restart docker.service #查看端口是否开启 netstat -nlpt #直接curl看是否生效 curl http://127.0.0.1:2375/info 方法二: vim /etc/sysconfig/docker #重新加载配置文件,重启docker systemctl daemon-reload systemctl start docker #自己只用过方法一!!! #查看进程 netstat -tulp #PS:Centos7没有netstat,所以要先下载。 yum install net-tools #防火墙开放2375端口号 firewall-cmd --zone=public --add-port=2375/tcp --permanent #重启防火墙 firewall-cmd --reload
接下来操作Idea这边,为了方便易懂,直接截图操作~
File-->Setting-->Plugins-->Browse Repositories--> 搜索Docker-->安装重启
然后连接我们在Centos 中安装的Docker ,File-->Setting-->按下图操作
操作成功后会在下面的窗口栏中出现Docker的窗口,到此远程连接Docker成功,如下图:
接下来我们开始部署项目:
首先在项目根目录(与src||target同级,)创建DockerFile 文件,简单如下: FROM java #指定作者信息 MAINTAINER chyf #数据卷信息 VOLUME /tmp #添加jar包到镜像中,Copy Add 指令采用的是相对路径,也是将DockerFile建立在根路径的原因 出现问题: #Error: ResponseItem.ErrorDetail[code=,message=COPY failed: stat /var/lib/docker/tmp/docker-builder022003770/target/litemall-all-0.1.0-exec.jar: no such file or directory] Failed to deploy 'mall-api Dockerfile: litemall-all/DockerFile': COPY failed: stat /var/lib/docker/tmp/docker-builder022003770/target/litemall-all-0.1.0-exec.jar: no such file or directory COPY ./target/litemall-all-0.1.0.jar mall-all.jar 启动jar RUN sh -c 'touch mall-all.jar' ENV JAVA_OPTS="" #暴露容器端口 EXPOSE 8080 #ENTRYPOINT 为容器启动后执行的命令 ENTRYPOINT ["java","-jar","mall-all.jar"]
配置Idea 启动配置

启动:
镜像生成完毕、容器也启动了,但是点击控制台的Log,发现【no main manifest attribute, in mall-all.jar】的异常,将 COPY ./target/litemall-all-0.1.0.jar mall-all.jar 换成 COPY ./target/litemall-all-0.1.0-exec.jar mall-all.jar
也会报错,信息大概是找不到主入口启动类,分析错误原因,找了许多的blog看,大概是因为在pom文件中配置做了如下配置: org.springframework.boot spring-boot-maven-plugin org.linlinjava.litemall.Application ZIP repackage
在写blog的过程中,已经不报错了,所以现在认为这种配置没有问题,有问题的根本症结可能是配置了maven打包将xxx.jar 和 xxx-exec.jar 分开打包的原因吧!现在我把如上代码在pom中去掉依然可以运行,那就直接去掉吧!咱也不知道干嘛用的。
问题:
在自己操作过程中,通过maven install 操作打成的jar包,包含 xxx.jar 和 xxx.exec.jar,经过测试发现这两个jar都不能启动,百思不得其解,maven自己玩的也不深,自己觉得可以通过maven-compile-plugin 来解决,来配置打包过程中文件的输出路径!这个暂且放在这里,后面在研究!
这里通过另一种方法,且行得通!如图操作!



以上操作之后会在src/main/java 文件夹中生成一个文件,如下图:


到这里Idea 远程连接Docker就结束了,下一章进行 运用持续集成工具 Jenkins 部署项目到 Docker 容器中。
系统运维
2019-12-06 09:59:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的 命令 行的监控,包括了对Heap size和垃圾回收状况的监控。
jstat的用法: jstat [ generalOption, outputOptions vmid, [ interva,count ]
参数: generalOption: 一般使用-gcutil查看GC情况 vmid: 虚拟机进程号,即当前运行的java进程号 interval: 间隔时间,单位为秒或毫秒 count: 打印次数,如果缺省则打印无数次
1、查询GC总体使用情况 jstat -gcutil 23484 1000 5
结果说明: S0: 新生代中Survivor space 0区已使用空间的百分比 S1: 新生代中Survivor space 1区已使用空间的百分比 E: 新生代已使用空间的百分比 O: 老年代已使用空间的百分比 M:元数据区使用比例 CCS:压缩使用比例 YGC: 从应用程序启动到当前,发生Yang GC 的次数 YGCT: 从应用程序启动到当前,Yang GC所用的时间【单位秒】 FGC: 从应用程序启动到当前,发生Full GC的次数 FGCT: 从应用程序启动到当前,Full GC所用的时间 GCT: 从应用程序启动到当前,用于垃圾回收的总时间【单位秒】
2、垃圾总体回收统计 jstat -gc 18528 1000 5
S0C:第一个幸存区的大小 S1C:第二个幸存区的大小 S0U:第一个幸存区的使用大小 S1U:第二个幸存区的使用大小 EC:伊甸园区的大小 EU:伊甸园区的使用大小 OC:老年代大小 OU:老年代使用大小 MC:方法区大小 MU:方法区使用大小 CCSC:压缩类空间大小 CCSU:压缩类空间使用大小 YGC:年轻代垃圾回收次数 YGCT:年轻代垃圾回收消耗时间 FGC:老年代垃圾回收次数 FGCT:老年代垃圾回收消耗时间 GCT:垃圾回收消耗总时间
3、新生代垃圾回收统计 jstat -gcnew 18528 1000 5
S0C:第一个幸存区大小 S1C:第二个幸存区的大小 S0U:第一个幸存区的使用大小 S1U:第二个幸存区的使用大小 TT:对象在新生代存活的次数 MTT:对象在新生代存活的最大次数 DSS:期望的幸存区大小 EC:伊甸园区的大小 EU:伊甸园区的使用大小 YGC:年轻代垃圾回收次数 YGCT:年轻代垃圾回收消耗时间
4、堆内存统计 jstat -gccapacity 18528 1000 5 //整体统计 jstat -gcnewcapacity 18528 1000 5 //新生代统计 jstat -gcoldcapacity 18528 1000 5 //老年代统计
NGCMN:新生代最小容量 NGCMX:新生代最大容量 NGC:当前新生代容量 S0C:第一个幸存区大小 S1C:第二个幸存区的大小 EC:伊甸园区的大小 OGCMN:老年代最小容量 OGCMX:老年代最大容量 OGC:当前老年代大小 OC:当前老年代大小 MCMN:最小元数据容量 MCMX:最大元数据容量 MC:当前元数据空间大小 CCSMN:最小压缩类空间大小 CCSMX:最大压缩类空间大小 CCSC:当前压缩类空间大小 YGC:年轻代gc次数 FGC:老年代GC次数 本文地址: https://www.linuxprobe.com/detailed-jstat-command.html
系统运维
2019-12-06 09:46:00
「深度学习福利」大神带你进阶工程师,立即查看>>> #!/bin/sh # kubeadm config images list 查看当前容器版本 images=( kube-apiserver:v1.14.0 kube-controller-manager:v1.14.0 kube-scheduler:v1.14.0 kube-proxy:v1.14.0 pause:3.1 etcd:3.3.10 coredns:1.3.1 kubernetes-dashboard-amd64:v1.10.1 heapster-grafana-amd64:v5.0.4 heapster-amd64:v1.5.4 heapster-influxdb-amd64:v1.5.2 ) for imageName in ${images[@]} ; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName} docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName} k8s.gcr.io/${imageName} docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName} done
系统运维
2019-12-06 09:45:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
下载 wget http://download.redis.io/releases/redis-5.0.3.tar.gz tar -zxvf redis-5.0.3.tar.gz cd redis-5.0.3
安装 yum install -y gcc make #如果报错使用命令:make MALLOC=libc make install PREFIX=/opt/redis cp redis.conf /opt/redis/ vim redis.conf daemonize no 改为 daemonize yes 注释掉 bind 127.0.0.1 这一行 或者改成 0.0.0.0 requirepass MyNewPass4! #设置密码 /opt/redis/bin/redis-server /opt/redis/redis.conf #启动
配置系统开机启动
vi /etc/systemd/system/redis.service [Unit] Description=redis-server After=network.target [Service] Type=forking ExecStart=/opt/redis/bin/redis-server /opt/redis/redis.conf PrivateTmp=true [Install] WantedBy=multi-user.target systemctl daemon-reload systemctl start redis.service systemctl enable redis.service
系统运维
2019-12-06 09:40:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
前言
最近有个项目需要对外提供一个接口,提供公网域名进行访问,而且接口和交易订单有关,所以安全性很重要;这里整理了一下常用的一些安全措施以及具体如何去实现。
安全措施
个人觉得安全措施大体来看主要在两个方面,一方面就是如何保证数据在传输过程中的安全性,另一个方面是数据已经到达服务器端,服务器端如何识别数据,如何不被攻击;下面具体看看都有哪些安全措施。
1.数据加密
我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过http协议,那么用户传输的数据可以被任何人获取;所以必须对数据加密,常见的做法对关键字段加密比如用户密码直接通过md5加密;现在主流的做法是使用https协议,在http和tcp之间添加一层加密层(SSL层),这一层负责数据的加密和解密;
2.数据加签
数据加签就是由发送者产生一段无法伪造的一段数字串,来保证数据在传输过程中不被篡改;你可能会问数据如果已经通过https加密了,还有必要进行加签吗?数据在传输过程中经过加密,理论上就算被抓包,也无法对数据进行篡改;但是我们要知道加密的部分其实只是在外网,现在很多服务在内网中都需要经过很多服务跳转,所以这里的加签可以防止内网中数据被篡改;
3.时间戳机制
数据是很容易被抓包的,但是经过如上的加密,加签处理,就算拿到数据也不能看到真实的数据;但是有不法者不关心真实的数据,而是直接拿到抓取的数据包进行恶意请求;这时候可以使用时间戳机制,在每次请求中加入当前的时间,服务器端会拿到当前时间和消息中的时间相减,看看是否在一个固定的时间范围内比如5分钟内;这样恶意请求的数据包是无法更改里面时间的,所以5分钟后就视为非法请求了;
4.AppId机制
大部分网站基本都需要用户名和密码才能登录,并不是谁来能使用我的网站,这其实也是一种安全机制;对应的对外提供的接口其实也需要这么一种机制,并不是谁都可以调用,需要使用接口的用户需要在后台开通appid,提供给用户相关的密钥;在调用的接口中需要提供appid+密钥,服务器端会进行相关的验证;
5.限流机制
本来就是真实的用户,并且开通了appid,但是出现频繁调用接口的情况;这种情况需要给相关appid限流处理,常用的限流算法有令牌桶和漏桶算法;
6.黑名单机制
如果此appid进行过很多非法操作,或者说专门有一个中黑系统,经过分析之后直接将此appid列入黑名单,所有请求直接返回错误码;
7.数据合法性校验
这个可以说是每个系统都会有的处理机制,只有在数据是合法的情况下才会进行数据处理;每个系统都有自己的验证规则,当然也可能有一些常规性的规则,比如身份证长度和组成,电话号码长度和组成等等;
如何实现
以上大体介绍了一下常用的一些接口安全措施,当然可能还有其他我不知道的方式,希望大家补充,下面看看以上这些方法措施,具体如何实现;
1.数据加密
现在主流的加密方式有对称加密和非对称加密;
对称加密 :对称密钥在加密和解密的过程中使用的密钥是相同的,常见的对称加密算法有DES,AES;优点是计算速度快,缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥,如果一方的秘钥被泄露,那么加密信息也就不安全了;
非对称加密 :服务端会生成一对密钥,私钥存放在服务器端,公钥可以发布给任何人使用;优点就是比起对称加密更加安全,但是加解密的速度比对称加密慢太多了;广泛使用的是RSA算法;
两种方式各有优缺点,而https的实现方式正好是结合了两种加密方式,整合了双方的优点,在安全和性能方面都比较好;
对称加密和非对称加密代码实现,jdk提供了相关的工具类可以直接使用,此处不过多介绍;
关于https如何配置使用相对来说复杂一些,可以参考本人的之前的文章 HTTPS分析与实战
2.数据加签
数据签名使用比较多的是md5算法,将需要提交的数据通过某种方式组合和一个字符串,然后通过md5生成一段加密字符串,这段加密字符串就是数据包的签名,可以看一个简单的例子: str:参数1={参数1}&参数2={参数2}&……&参数n={参数n}$key={用户密钥}; MD5.encrypt(str);
注意最后的用户密钥,客户端和服务端都有一份,这样会更加安全;
3.时间戳机制
解密后的数据,经过签名认证后,我们拿到数据包中的客户端时间戳字段,然后用服务器当前时间去减客户端时间,看结果是否在一个区间内,伪代码如下: long interval=5*60*1000;//超时时间 long clientTime=request.getparameter("clientTime"); long serverTime=System.currentTimeMillis(); if(serverTime-clientTime>interval){ return new Response("超过处理时长") }
4.AppId机制
生成一个唯一的AppId即可,密钥使用字母、数字等特殊字符随机生成即可;生成唯一AppId根据实际情况看是否需要全局唯一;但是不管是否全局唯一最好让生成的Id有如下属性:
趋势递增 :这样在保存数据库的时候,使用索引性能更好;
信息安全 :尽量不要连续的,容易发现规律;
关于全局唯一Id生成的方式常见的有类snowflake方式等;
5.限流机制
常用的限流算法包括:令牌桶限流,漏桶限流,计数器限流;
1.令牌桶限流
令牌桶算法的原理是系统以一定速率向桶中放入令牌,填满了就丢弃令牌;请求来时会先从桶中取出令牌,如果能取到令牌,则可以继续完成请求,否则等待或者拒绝服务;令牌桶允许一定程度突发流量,只要有令牌就可以处理,支持一次拿多个令牌;
2.漏桶限流
漏桶算法的原理是按照固定常量速率流出请求,流入请求速率任意,当请求数超过桶的容量时,新的请求等待或者拒绝服务;可以看出漏桶算法可以强制限制数据的传输速度;
3.计数器限流
计数器是一种比较简单粗暴的算法,主要用来限制总并发数,比如数据库连接池、线程池、秒杀的并发数;计数器限流只要一定时间内的总请求数超过设定的阀值则进行限流;
具体基于以上算法如何实现,Guava提供了RateLimiter工具类基于基于令牌桶算法: RateLimiter rateLimiter = RateLimiter.create(5);
以上代码表示一秒钟只允许处理五个并发请求,以上方式只能用在单应用的请求限流,不能进行全局限流;这个时候就需要分布式限流,可以基于redis+lua来实现;
6.黑名单机制
如何为什么中黑我们这边不讨论,我们可以给每个用户设置一个状态比如包括:初始化状态,正常状态,中黑状态,关闭状态等等;或者我们直接通过分布式配置中心,直接保存黑名单列表,每次检查是否在列表中即可;
7.数据合法性校验
合法性校验包括:常规性校验以及业务校验;
常规性校验:包括签名校验,必填校验,长度校验,类型校验,格式校验等;
业务校验:根据实际业务而定,比如订单金额不能小于0等;
总结
本文大致列举了几种常见的安全措施机制包括:数据加密、数据加签、时间戳机制、AppId机制、限流机制、黑名单机制以及数据合法性校验;当然肯定有其他方式,欢迎补充。
Buy me a cup of coffee :)
系统运维
2019-12-06 09:37:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
如何做好一个合格的运工程师,运维工程师前景怎么样呢?就这些问题,与大家交流一下。首先对于 运维工程师 的要求是十分严苛的了,运维 工程师不但 要针对不同的问题做出响应,而且需要不断的补充自己的知识面,并不继提高自己的。与时俱进,不断学习新的技术。
在 运维工程师 初级阶段,合格优秀运维人员 要 休现出积极的主动性 与 责任心,在面对陌生的业务时,要主动快速的学习业务对认识,并拓展相应的知识范畴,以便能够足够胜任并 做 支独立维护。在这个阶段基础知识 要 十分炸实,并不断充实自己的。形成自己的知识体系。
在 运维 逐步的发展阶段中, 运维工程师 要注重总结反省, 并 逐渐成长为高阶运维 工程 师,高级运维工程师,他们都会有自己比较体系化的运维理解。这也是也有一部分运维工程师,由于出色的项目管理方方面面的能力,逐渐成长为项目经理的原因。
随着再进一步的发展,高阶的运维工作 工程师 ,对于产品的方方面面理解将会十分的透彻,因此在这种情况下,高阶运维 工程 师,甚至可以成为优秀的产品的产品经理 , 并在产品功能的设计、开发中起到 十分 重要的角色。
合格的运维工程师,要负责维护并确保整个服务系统的高可用性,同时要不断优化系统架构,并不断提升部署效率、优化资源利用率、进面提高整体系统的 ROI 。 说起来很容易,这需要很多的知识积累。 随着技术的日新月异, 运维工程师面临的最大挑战,越来越多。大规模集群的管理问题就是其中最棘手之一 。 如何能够管理好几万台,甚至几十万台以上服务器的服务,同时还要保障服务的高可用性,是目前运维 人 员面临的最大挑战之一。
运维工程师的工作,在大型互联网公司变的越来越重要。互联网规模越来越大、服务的架构越来越复杂多样, 对 运维工程师的需求也是会越来越急迫,对人正在从事或者即将从事运维行业的人们来说,是一个很好的消息。特别是对有经验的运维工程师需求会很大,而且是 随 着经验的积累,越来越值钱。 一个优秀的运维工程师,有 强烈的责任心 和 主动性,对自己的所负责工作有 owner 意识,并且能自我驱动不断学习与成长。 而且 能够承担较大工作压力,有独立较强的分析解决问题的能力。 在 工作当中胆大心细,并且还要具备探索创新的精神。目前所有岗位要求,都要会精通shell/Python/Perl等 至 少其中 1种语言,并且精通 Linux命令。还得要掌握常用的各种数据库,并能灵的运用。还有最基本的络基础知识,也是不可少的。 对类 Linux 操作系统,必须深入理解。你知道 的,目前大多数服务器都是基于linux操作系统,Linux命令大全: https://www.linuxcool.com/这里 再 推荐给大家一本基本的教材《 Linux就该这么学》 。
对于运 维工程师, 风险识别能力是当前的重中之重。 风险识别是指在风险事故发生之前,或者在操作一些动作时,做为 运 维工程师, 要 运用各种方法系统的、连续的认识所面临的各种风险 , 并分析风险事故发生的潜在原因。及时拟定风险处理方案,进行风险管理 决策 服务。规避风险或者把风险降到最低。 做事情前,脑子先预想一遍。各种情况,最坏的结果想出来。分析评估。风险应对的措施,是否可把握,把控不了,不要操作。
现在devops已经进入越来越多的企业。什么是devops呢?devops 不是自动化运维
DevOps(英文Development和Operations的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合,并通过高度自动化工具与流程,使得软件构建、测试、发布更加快捷、频繁和可靠。这对运维工程师提出最高的要求。在软件开发的过程中,频繁将代码持续集成到主干上,并自动测试。(重点自动化测试) 。 在持续集成的基础上,将集成后的代码部署到测试环境(真实运行环境,灰度环境),连库环境更多测试,ok, 手动部署到生产。在持续交付的基础上,把部署到生产环境的过程自动化。区别就是最终部署到生产环境是自动化的。这对运维工程师提出更高的要求。
即将从事运维工作或者正在从事运维工作的童鞋们。一起共勉。
系统运维
2019-12-06 09:34:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
基于TLS实现ElasticSearch集群加密通讯
作者: “发颠的小狼” ,欢迎转载
目录
▪ 用途
▪ ES节点信息
▪ Step1. 关闭服务
▪ Step2. 创建CA证书
▪ Step3. 创建CERT证书
▪ Step4. 创建密钥库
▪ Step5. 删除CA证书
▪ Step6. 修改elasticsearch.yml配置
▪ Step7. 启动服务
▪ 附. 参考文档
用途
前情提要:
▷ 在第一篇《EFK教程 - 快速入门指南》中,阐述了EFK的安装部署,其中ElasticSearch的架构为三节点,即master、ingest、data角色同时部署在三台服务器上。
▷ 在第二篇《EFK教程 - ElasticSearch高性能高可用架构》中,阐述了EFK的data/ingest/master角色的用途及分别部署三节点,在实现性能最大化的同时保障高可用。
▷ 在第三篇《EFK教程(3) - ElasticSearch冷热数据分离》中,阐述了ES多实例部署,将不同热度的数据存在不同的磁盘上,实现了数据冷热分离、资源合理分配。
前三篇文章,ES集群之间数据交互都是明文交互,而在本文中,为ES集群创建CA、CERT证书,实现ElasticSearch集群之间数据通过TLS进行双向加密交互。
ES节点信息
由于本文是基于上一篇文章《EFK教程(3) - ElasticSearch冷热数据分离》为环境进行阐述,因此节点信息和上一篇一致:
Step1. 关闭服务
首先,需要停止所有ElasticSearch、kibana、filebeat服务,待证书配置完成后再启动
Step2. 创建CA证书
1️⃣ 找任一一台ElasticSearch节点服务器操作即可 cd /opt/elasticsearch/ # --days: 表示有效期多久 sudo -u elasticsearch ./bin/elasticsearch-certutil ca --days 3660
2️⃣ 务必将生成的CA证书,传到安全地方永久存储,因为后期若需要新增ES节点,还会用到该证书

3️⃣ 请将elastic-stack-ca.p12证书传到所有ES实例服务器上
Step3. 创建CERT证书
按上面表格进入相对应的目录创建CERT证书 # 在ES目录中建立证书目录及给予elasticsearch权限 mkdir -p config/certs;chown elasticsearch.elasticsearch config/certs -R # 每一个实例一个证书 # --ca CA证书的文件名,必选参数 # --dns 服务器名,多服务器名用逗号隔开,可选参数 # --ip 服务器IP,多IP用逗号隔开,可选参数 # --out 输出到哪里,可选参数 # --days 有效期多久,可选参数 sudo -u elasticsearch ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --ip ${本机IP},127.0.0.1 --out config/certs/cert.p12 --days 3660 # 例如elasticsearch-master-1(192.168.1.31)执行命令:sudo -u elasticsearch ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --ip 192.168.1.31,127.0.0.1 --out config/certs/cert.p12 --days 3660

如果想批量生成CERT证书,请自行查阅附录链接,不过批量生成有时会碰到生成的证书不可用,因此建议一台一台生成
Step4. 创建密钥库
按上面表格进入相对应的目录创建密钥库 # 每一个实例都要操作 # 创建密钥库 sudo -u elasticsearch ./bin/elasticsearch-keystore create # PKCS#12文件的密码 sudo -u elasticsearch ./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password # 信任库的密码 sudo -u elasticsearch ./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

确认keystore、truststore已录入至密钥库 sudo -u elasticsearch ./bin/elasticsearch-keystore list
Step5. 删除CA证书
由于上面创建的elastic-stack-ca.p12含有私钥,因此为了安全,建议将该文件删除(请务必提前备份好,因为后期增加节点还会用到)
按上面表格进入相对应的目录删除CA证书 rm -f elastic-stack-ca.p12
Step6. 修改elasticsearch.yml配置
按上面表格对应的实例配置conf目录下elasticsearch.yml # 在所有实例上加上以下配置 # 开启transport.ssl认证 xpack.security.transport.ssl.enabled: true # xpack认证方式 full为主机或IP认证及证书认证,certificates为证书认证,不对主机和IP认证,默认为full xpack.security.transport.ssl.verification_mode: full # xpack包含私钥和证书的PKCS#12文件的路径 xpack.security.transport.ssl.keystore.path: certs/cert.p12 # xpack包含要信任的证书的PKCS#12文件的路径 xpack.security.transport.ssl.truststore.path: certs/cert.p12
Step7. 启动服务 # 开启所有ES实例 sudo -u elasticsearch ./bin/elasticsearch # 开启filebeat /opt/filebeat/filebeat -e -c /opt/filebeat/filebeat.yml -d "publish" # 开启kibana sudo -u kibana /opt/kibana/bin/kibana -c /opt/kibana/config/kibana.yml
附. 参考文档 https://www.elastic.co/guide/en/elasticsearch/reference/current/configuring-tls.html https://www.elastic.co/guide/en/elasticsearch/reference/7.3/certutil.html
系统运维
2019-12-05 22:08:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
管理远程主机的服务 $ systemctl status mysqld -H <用户名>@
备注:该功能使用 SSH 方式连接。 系统状态分析
系统状态查看 # systemctl status
查看激活的单元 # systemctl
备注:或使用命令:# systemctl list-units
查看运行失败的单元 # systemctl --failed
查看已安装的服务及其状态 # systemctl list-unit-files
备注:
·STATE=static // 该服务与其它服务相关联,不能单独地配置该服务的启动状态。
·STATE=disabled //禁止该服务开机自启动
·STATE=enabled // 允许该服务开机自启动
·所有服务单元存放位置:
/usr/lib/systemd/system
/etc/systemd/system (优先级更高)
显示 cgroup slice, 内存和父 PID: # systemctl status pid​​​​​​​ 控制unit
一个单元配置文件可以描述如下内容之一:系统服务(.service)、挂载点(.mount)、sockets(.sockets) 、系统设备(.device)、交换分区(.swap)、文件路径(.path)、启动目标(.target)、由 systemd 管理的计时器(.timer)。详情参阅 systemd.unit(5) 。

使用 systemctl 控制单元时,通常需要使用单元文件的全名,包括扩展名(例如 sshd.service )。但是有些单元可以在 systemctl 中使用简写方式。
如果无扩展名,systemctl 默认把扩展名当作 .service 。例如 netcfg 和 netcfg.service 是等价的。
挂载点会自动转化为相应的 .mount 单元。例如 /home 等价于 home.mount 。
设备会自动转化为相应的 .device 单元,所以 /dev/sda2 等价于 dev-sda2.device
重新加载配置(服务的配置) # systemctl reload
设置unit为自启动并立即启动该unit # systemctl enable --now
禁用unit(禁用后,也不能间接启动) # systemctl mask
取消禁用unit # systemctl unmask
重新加载systemd系统配置,扫描unit文件的变动,并不重新加载服务的配置,对比“reload” # systemctl daemon-reload
电源管理
安装了 polkit 后才能以普通用户身份使用电源管理。这里不建议安装polkit。
重启 # systemctl reboot
退出系统并关闭电源 # systemctl poweroff
待机 # systemctl suspend
休眠 # systemctl hibernate
混合休眠(休眠到硬盘并待机) # systemctl hybrid-sleep
系统运维
2019-12-05 18:06:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
最近做安全扫描,老是报 Cleartext submission of password 错误,让安装https,还要买证书,所以采用另外一种方式
先分析一下原因
是因为form 里有 input type password,这样的化就回提交出去,所有报的这个错。
后来就找了一个js rsa加密工具,加密后,发现这个问题还是爆漏。有点晕了。
经过反复测试,发现 只要password 有name属性就报错,豁然开郎。
首先是这样的,我们做过加密之后,检测工具是不知道我们加过密了,所以还报错。那他检测的依据是什么,就是不允许把input type password 给传输过去,当把name属性去掉后,form提交就不传输这个属性了,所以检测工具就ok了。那么怎么办呢?
1、在html里把name属性去掉。
2、在js提交之前,通过js 给password上name属性。
3、当然别忘了,密码该加密还是要加密的。(其实不加密也是能骗过检测工具的)
最后问题解决。
给各例子: function add(){ var d= document.getElementById('password123') d.setAttribute('name','password') form.submit(); }
系统运维
2019-12-05 17:17:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
顾名思义,索引上对于同一个Primary key, 可以建立多个二级索引项,实际上已经对array类型的基础功能做了支持,并基于array来构建二级索引。
这意味着该二级索引的记录数可以是多于聚集索引记录数的,因而该索引不可以用于通常意义的查询,只能通过特定的接口函数来使用,下面的例子里会说明。 关注公众号“阿里数据库技术”,回复“MySQL”获取相关文档。
范例
摘录自官方文档
*请左右滑动阅览 root@test 04:08:50>show create table customers\G `id` bigint(20) NOT NULL AUTO_INCREMENT, `modified` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `custinfo` json DEFAULT NULL, PRIMARY KEY (`id`), KEY `zips` ((cast(json_extract(`custinfo`,_latin1'$.zip') as unsigned array))) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 1 row in set (0.00 sec) root@test 04:08:53>select * from customers; +----+---------------------+-------------------------------------------------------------------+ | id | modified | custinfo | +----+---------------------+-------------------------------------------------------------------+ | 1 | 2019-08-14 16:08:50 | {"user": "Jack", "user_id": 37, "zipcode": [94582, 94536]} | | 2 | 2019-08-14 16:08:50 | {"user": "Jill", "user_id": 22, "zipcode": [94568, 94507, 94582]} | | 3 | 2019-08-14 16:08:50 | {"user": "Bob", "user_id": 31, "zipcode": [94477, 94536]} | | 4 | 2019-08-14 16:08:50 | {"user": "Mary", "user_id": 72, "zipcode": [94536]} | | 5 | 2019-08-14 16:08:50 | {"user": "Ted", "user_id": 56, "zipcode": [94507, 94582]} | +----+---------------------+-------------------------------------------------------------------+ 5 rows in set (0.00 sec)
通过如下三个函数member of, json_contains, json_overlaps可以使用到该索引
*请左右滑动阅览 root@test 04:09:00>SELECT * FROM customers WHERE 94507 MEMBER OF(custinfo->'$.zipcode'); +----+---------------------+-------------------------------------------------------------------+ | id | modified | custinfo | +----+---------------------+-------------------------------------------------------------------+ | 2 | 2019-08-14 16:08:50 | {"user": "Jill", "user_id": 22, "zipcode": [94568, 94507, 94582]} | | 5 | 2019-08-14 16:08:50 | {"user": "Ted", "user_id": 56, "zipcode": [94507, 94582]} | +----+---------------------+-------------------------------------------------------------------+ 2 rows in set (0.00 sec) root@test 04:09:41>SELECT * FROM customers WHERE JSON_CONTAINS(custinfo->'$.zipcode', CAST('[94507,94582]' AS JSON)); +----+---------------------+-------------------------------------------------------------------+ | id | modified | custinfo | +----+---------------------+-------------------------------------------------------------------+ | 2 | 2019-08-14 16:08:50 | {"user": "Jill", "user_id": 22, "zipcode": [94568, 94507, 94582]} | | 5 | 2019-08-14 16:08:50 | {"user": "Ted", "user_id": 56, "zipcode": [94507, 94582]} | +----+---------------------+-------------------------------------------------------------------+ 2 rows in set (0.00 sec) root@test 04:09:54>SELECT * FROM customers WHERE JSON_OVERLAPS(custinfo->'$.zipcode', CAST('[94507,94582]' AS JSON)); +----+---------------------+-------------------------------------------------------------------+ | id | modified | custinfo | +----+---------------------+-------------------------------------------------------------------+ | 1 | 2019-08-14 16:08:50 | {"user": "Jack", "user_id": 37, "zipcode": [94582, 94536]} | | 2 | 2019-08-14 16:08:50 | {"user": "Jill", "user_id": 22, "zipcode": [94568, 94507, 94582]} | | 5 | 2019-08-14 16:08:50 | {"user": "Ted", "user_id": 56, "zipcode": [94507, 94582]} | +----+---------------------+-------------------------------------------------------------------+ 3 rows in set (0.00 sec)
接口函数
multi-value index是functional index的一种实现,列的定义是一个虚拟列,值是从json column上取出来的数组。
数组上存在相同值的话,会只存储一个到索引上。支持的类型:DECIMAL, INTEGER, DATETIME,VARCHAR/CHAR。另外index上只能有一个multi-value column。
下面简单介绍下相关的接口函数
数组最大容量:
入口函数:
ha_innobase::mv_key_capacity
插入记录:
入口函数:
row_ins_sec_index_multi_value_entry
通过类Multi_value_entry_builder_insert来构建tuple, 然后调用正常的接口函数row_ins_sec_index_entry插入到二级索引中。
已经解析好,排序并去重的数据存储在结构struct multi_value_data , 指针在dfield_t::data中. multi_value_data结构也是multi-value具体值的内存表现
删除记录:
入口函数:
row_upd_del_multi_sec_index_entry
基于类Multi_value_entry_builder_normal构建tuple, 并依次从索引中删除
更新记录
入口函数:
row_upd_multi_sec_index_entry
由于可能不是所有的二级索引记录都需要更新,需要计算出diff,找出要更新的记录calc_row_difference --> innobase_get_multi_value_and_diff, 设置一个需要更新的bitmap
事务回滚
相关函数: row_undo_ins_remove_multi_sec row_undo_mod_upd_del_multi_sec row_undo_mod_del_mark_multi_sec
回滚的时候通过trx_undo_rec_get_multi_value从undo log中获取multi-value column的值,通过接口Multi_value_logger::read来构建并存储到field data中
记录undo log
函数: trx_undo_store_multi_value
通过Multi_value_logger::log将multi-value的信息存储到Undo log中. 'Multi_value_logger'是一个辅助类,用于记录multi-value column的值以及如何读出来
purge 二级索引记录
入口函数:
*请左右滑动阅览 row_purge_del_mark row_purge_upd_exist_or_extern_func |--> row_purge_remove_multi_sec_if_poss
系统运维
2019-12-05 17:05:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
说到跨域访问,必须先解释一个名词:同源策略。所谓同源策略就是在浏览器端出于安全考量,向服务端发起请求必须满足:协议相同、Host(ip)相同、端口相同的条件,否则访问将被禁止,该访问也就被称为跨域访问。
一、什么是跨域访问
说到跨域访问,必须先解释一个名词:同源策略。所谓同源策略就是在浏览器端出于安全考量,向服务端发起请求必须满足:协议相同、Host(ip)相同、端口相同的条件,否则访问将被禁止,该访问也就被称为跨域访问。
虽然跨域访问被禁止之后,可以在一定程度上提高了应用的安全性,但也为开发带来了一定的麻烦。比如:我们开发一个前后端分离的易用,页面及js部署在一个主机的nginx服务中,后端接口部署在一个tomcat应用容器中,当前端向后端发起请求的时候一定是不符合同源策略的,也就无法访问。那么我们如何解决这个问题?就是本文需要向大家说明的内容。
二、跨域访问的解决方案有哪些?
2.1.第一类方案:前端解决方案
虽然浏览器对于不符合同源策略的访问是禁止的,但是仍然存在例外的情况,如以下资源引用的标签不受同源策略的限制: html的script标签
html的link标签
html的img标签
html的iframe标签:对于使用jsp、freemarker开发的项目,这是实现跨域访问最常见的方法,
除了基于HTML本身的特性实现跨域访问,我们还可以使用jsonp、window的postMessage实现跨域访问。这些都是前端实现跨域访问的方式。
2.2.第二类方案:使用代理
实际上对跨域访问的支持在服务端实现起来更加容易,最常用的方法就是通过代理的方式,如: nginx或haproxy代理跨域
nodejs中间件代理跨域
其实实现代理跨域的逻辑非常简单:就是在不同的资源服务:js资源、html资源、css资源、接口数据资源服务的前端搭建一个中间层,所有的浏览器及客户端访问都通过代理转发。所以在浏览器、客户端看来,它们访问的都是同一个ip、同一个端口的资源,从而符合同源策略实现跨域访问。
2.3 第三类方案:CORS
跨域资源共享(CORS):通过修改Http协议header的方式,实现跨域。说的简单点就是,通过设置HTTP的响应头信息,告知浏览器哪些情况在不符合同源策略的条件下也可以跨域访问,浏览器通过解析Http协议中的Header执行具体判断。具体的Header如下:
CROS跨域常用header Access-Control-Allow-Origin: 允许哪些ip或域名可以跨域访问 Access-Control-Max-Age: 表示在多少秒之内不需要重复校验该请求的跨域访问权限 Access-Control-Allow-Methods: 表示允许跨域请求的HTTP方法,如:GET,POST,PUT,DELETE Access-Control-Allow-Headers: 表示访问请求中允许携带哪些Header信息,如: Accept 、 Accept-Language 、 Content-Language 、 Content-Type
三、SpringBoot下实现CORS的四种方式
为大家介绍四种实现CORS的方法,两种是全局配置,两种是局部接口生效的配置。一般来说,SpringBoot项目采用其中一种方式实现CORS即可。
3.1.使用CorsFilter进行全局跨域配置 @Configuration public class GlobalCorsConfig { @Bean public CorsFilter corsFilter() { CorsConfiguration config = new CorsConfiguration(); //开放哪些ip、端口、域名的访问权限,星号表示开放所有域 config.addAllowedOrigin("*"); //是否允许发送Cookie信息 config.setAllowCredentials(true); //开放哪些Http方法,允许跨域访问 config.addAllowedMethod("GET","POST", "PUT", "DELETE"); //允许HTTP请求中的携带哪些Header信息 config.addAllowedHeader("*"); //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息) config.addExposedHeader("*"); //添加映射路径,“/**”表示对所有的路径实行全局跨域访问权限的设置 UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); configSource.registerCorsConfiguration("/**", config); return new CorsFilter(configSource); } }
3.2. 重写WebMvcConfigurer的addCorsMappings方法(全局跨域配置) @Configuration public class GlobalCorsConfig { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") //添加映射路径,“/**”表示对所有的路径实行全局跨域访问权限的设置 .allowedOrigins("*") //开放哪些ip、端口、域名的访问权限 .allowCredentials(true) //是否允许发送Cookie信息 .allowedMethods("GET","POST", "PUT", "DELETE") //开放哪些Http方法,允许跨域访问 .allowedHeaders("*") //允许HTTP请求中的携带哪些Header信息 .exposedHeaders("*"); //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息) } }; } }
3.3.使用CrossOrigin注解(局部跨域配置) 将CrossOrigin注解加在Controller层的方法上,该方法定义的RequestMapping端点将支持跨域访问 将CrossOrigin注解加在Controller层的类定义处,整个类所有的方法对应的RequestMapping端点都将支持跨域访问 @RequestMapping("/cors") @ResponseBody @CrossOrigin(origins = "http://localhost:8080", maxAge = 3600) public String cors( ){ return "cors"; }
3.4 使用HttpServletResponse设置响应头(局部跨域配置)
这种方式略显麻烦,不建议在SpringBoot项目中使用。 @RequestMapping("/cors") @ResponseBody public String cors(HttpServletResponse response){ //使用HttpServletResponse定义HTTP请求头,最原始的方法也是最通用的方法 response.addHeader("Access-Control-Allow-Origin", "http://localhost:8080"); return "cors"; }
四、实现与测试
在SpringBoot 项目外 随便定义一个HTML,并写代码触发如下的ajax代码。(触发过程我就不写了,定义一个按钮加一个监听函数即可)。以下是跨域AJAX请求验证的核心代码: $.ajax({ url: 'http://localhost:8090/cors', type: "POST", xhrFields: { withCredentials: true //允许发送Cookie信息 }, success: function (data) { alert("跨域请求配置成功") }, error: function (data) { alert("跨域请求配置失败") } }) 跨域请求配置成功表示:我们的跨域配置生效,ajax请求可以正确访问服务端接口。 跨域请求配置失败表示:我们的跨域配置未生效,请参照检查第三节检查各项配置是否正确。 本文地址: https://www.linuxprobe.com/spring-cross-domain-problem.html
系统运维
2019-12-05 13:27:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
Python运算符优先级,是描述在计算机运算计算表达式时执行运算的先后顺序。 先执行具有较高优先级的运算,然后执行较低优先级的运算。

以下表格列出了从最高到最低优先级的所有运算符:
运算符 描述
** 指数 (最高优先级)
~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法减法
>> << 右移,左移运算符
& 位 'AND'
^ | 位运算符
<= < > >= 比较运算符
== != 等于运算符
= %= /= //= -= += *= **= 赋值运算符
is is not 身份运算符
in not in
not and or
成员运算符
逻辑运算符
以下实例演示了Python所有运算符优先级的操作: 实例(Python 3.0+) #!/usr/bin/python3 a = 20 b = 10 c = 15 d = 5 e = 0 e = (a + b) * c / d #( 30 * 15 ) / 5 print ("(a + b) * c / d 运算结果为:", e) e = ((a + b) * c) / d # (30 * 15 ) / 5 print ("((a + b) * c) / d 运算结果为:", e) e = (a + b) * (c / d); # (30) * (15/5) print ("(a + b) * (c / d) 运算结果为:", e) e = a + (b * c) / d; # 20 + (150/5) print ("a + (b * c) / d 运算结果为:", e)
以上实例输出结果: (a + b) * c / d 运算结果为: 90.0 ((a + b) * c) / d 运算结果为: 90.0 (a + b) * (c / d) 运算结果为: 90.0 a + (b * c) / d 运算结果为: 50.0
注意:Pyhton3 已不支持 <> 运算符,可以使用 != 代替,如果你一定要使用这种比较运算符,可以使用以下的方式: >>> from __future__ import barry_as_FLUFL >>> 1 <> 2 True
本文原创地址: https://www.linuxprobe.com/python-operator-precedence.html
系统运维
2019-12-05 13:27:00
「深度学习福利」大神带你进阶工程师,立即查看>>> 【美团技术沙龙】由美团技术团队和美团科协主办,每期沙龙邀请美团及其他互联网公司的技术专家分享来自一线的实践经验,覆盖各主要技术领域。
活动时间:2019年12月21日 13:30-17:30 活动地址:北京市朝阳区望京东路4号科创大厦A座1层 · 美团点评综合指挥中心
报名链接: 点我报名
出品人:方建平 | 美团高级技术总监
2014年加入美团,目前负责美团到家交易系统平台建设与团队管理工作。在美团期间,从无到有,设计并主导构建了到家业务交易系统技术架构体系,支撑了美团外卖、闪购、跑腿等业务背后每天几千万订单规模的交易请求。在加入美团之前,任职于百度,主要参与负责百度开放平台、移动云平台等后端服务技术架构与团队管理工作。
活动简介
在交易系统平台中,我们围绕零售的本质,以连接商家与用户的交易链路为核心,在用户侧围绕用户选择商品、购物交易的场景,满足用户的消费需求;在商家侧围绕商家的商品管理、营销等需求场景,辅助以平台结算服务、数据服务、商家管理等服务,帮助提升商家的管理效率。时至今日,平台有效地支撑了外卖餐饮、闪购零售、以及配送跑腿等不同的业务形态。交易系统平台希望通过零售业务核心业务系统的复用,减少重复资源投入,快速连接业务与产品,帮助高效的推进业务的发展与创新。
本次技术沙龙,主要从商品、营销、订单、Set化等几个方面给大家呈现平台化建设实践,希望与业界技术同学一起交流学习。
日程安排
分享介绍
主题一:到家商品体系建设实践
邵晓明 | 美团高级技术专家
目前是到家事业群交易系统平台部商品中心负责人,主要负责外卖、闪购等业务线的商品、库存、评价相关模块的技术支撑以及平台化建设相关工作。2014年1月加入原美团外卖技术团队,先后负责美团外卖的商家、商品、活动、CRM、客服、品控审核等核心业务模块的研发,经历了美团外卖业务的从0到1以及后续不断演进的过程。有丰富的后台系统架构、稳定性建设、性能优化、基础组件与中间件、底层存储优化、平台化建设相关的经验。
内容简介
介绍在到家(外卖、配送、闪购)业务背景下,商品体系在应对多业务、多品类、多形态、多模式下的业务快速迭代挑战方面,核心的建设思路和心得,以及取得的成绩和后续规划,分享大纲如下: 到家(外卖、配送、闪购)平台化架构简介 到家商品体系的建设背景以及核心思路(通用性、易用性-提升研发效率、开放性、稳定性) 到家商品体系的未来规划
主题二:外卖单元化实践
李明 | 美团高级架构师
2009年毕业于清华大学,先后就职于TeleNav、Yahoo,2014年加入美团,高级技术专家,目前服务于交易系统平台业务架构组,专注于电商后台系统的架构优化。
内容简介
介绍外卖单元化的设计思路和整体架构,以及此过程中遇到的问题和解决方法,分享大纲如下: 单元化的背景和目的 单元化的整体架构 单元化实践中遇到的问题 回顾和展望
主题三:订单交易平台建设实践
何轼 | 美团高级技术专家
2013年初加入美团外卖,专注于高并发、高性能、高可用的后台服务建设。
内容简介
介绍在到家多业务、多品类场景下,订单交易平台如何实现多业务的订单交易流程及功能复用、差异功能支持扩展等,以及在实践过程中遇到的问题、挑战及解决方案,分享大纲如下: 订单平台化建设背景 订单平台化整体方案 挑战及解决方案
主题四:到家营销系统建设实践
方瑞 | 美团高级技术专家
北邮硕士毕业,先后就职于百度、小米,2015年加入美团,到家交易系统平台部营销中心负责人,经历外卖业务的演进过程,从0到1搭建了外卖营销系统,当前专注于外卖产品形态下的营销系统体系建设。
内容简介
介绍结合美团到家平台多业务特点,营销系统建设的核心思路,包括强LBS营销能力的建设、营销体系化架构设计等,分享大纲如下: 到家营销业务特点介绍 营销系统整体架构 挑战及解决方案 回顾和展望
你不知道的到家交易系统平台团队
往期活动PPT及视频干货看这里
美团技术沙龙目前已在北京、上海、厦门、成都等城市成功举办了49场,吸引了2W+工程师报名参会,覆盖前端、后台、系统、算法、测试、运维等技术领域,往期PPT及视频资料已整理,我们愿意帮助更多的同学在技术成长的路上不断狂奔!
往期活动PPT及视频干货: https://tech.meituan.com/salon/#/ (请在微信中查看 )
感谢
活动主办方 :美团技术团队 美团科学技术协会
宣传合作方 :活动行
地址
地址 :北京市朝阳区望京东路4号科创大厦A座1层 · 美团点评综合指挥中心
地铁线路 :望京东地铁站B口出,步行600米左右到达
具体线路请看下图:
系统运维
2019-12-05 11:38:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
以下都是在centos命令行输入
查看有无 yum安装包 ,有的话卸载:
查看:rpm -qa |grep yum
卸载:rpm -aq|grep yum|xargs rpm -e --nodeps

第一步: 到这个网站去下载如下RPM包 : http://mirrors.163.com/centos/6/os/x86_64/Packages/
下载安装以下4个包,由于更新问题,可能包名版本不一样,可以查找开头,
比如:python-urlgrabber-3.9.1-11.el6.noarch.rpm,就搜索python-urlgrabber,这样
wget http://mirrors.163.com/centos/6/os/x86_64/Packages/ python-urlgrabber-3.9.1-11.el6.noarch.rpm
wget http://mirrors.163.com/centos/6/os/x86_64/Packages/ yum-3.2.29-81.el6.centos.noarch.rpm
wget http://mirrors.163.com/centos/6/os/x86_64/Packages/ yum-cron-3.2.29-81.el6.centos.noarch.rpm
wget http://mirrors.163.com/centos/6/os/x86_64/Packages/ yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
wget http://mirrors.163.com/centos/6/os/x86_64/Packages/ yum-plugin-fastestmirror-1.1.30-40.el6.noarch.rpm

第二步:下载完成后安装: python-iniparse-0.3.1-2.1.el6.noarch.rpm 名称要和上面下载的一致
rpm -ivh --force --nodeps python-iniparse-0.3.1-2.1.el6.noarch.rpm
rpm -ivh --force --nodeps yum-metadata-parser-1.1.2-14.1.el6.x86_64.rpm
rpm -ivh --force --nodeps yum-3.2.27-14.el6.centos.noarch.rpm um-plugin-fastestmirror-1.1.26-11.el6.noarch.rpm
注意:注意最后两个包必需同时安装,否则会相互依赖
第三步:下载阿里云的yum源:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
下载以后生成缓存,命令:
yum makecache
如果有提示错误,运行下面的命令:[Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"
sed -i 's/\$releasever/6/' CentOS-Base.repo 备注:把文件里的$releasever替换为6(我是没遇到)
最后:重新生成缓存,数字不为0,就OK了:
yum clean all
yum makecache
刚刚我已经测试了 可以,结合网上的,然后修改了一下,大家可以参考
Buy me a cup of coffee :)
系统运维
2019-12-05 11:32:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
越来越多的网站和app的上线,导致安全问题日益增加,漏洞问题也非常多,大公司急需组建专业的渗透测试团队来保障新项目的安全稳定,防止被入侵被黑,对此我们Sinesafe给大家讲解下组建安全团队的重要几点,来达到各个项目的安全渗透工作的分工执行能力。
渗透测试安全团队建设
红蓝军简介
在队伍的对抗演习中,蓝军通常是指在部队模拟对抗演习专门扮演假想敌的部队,与红军(代表我方正面部队)进行针对性的训练。
网络安全红蓝对抗的概念就源自于此。红军作为企业防守方,通过安全加固、攻击监测、应急处置等手段来保障企业安全。而蓝军作为攻击方,以发现安全漏洞,获取业务权限或数据为目标,利用各种攻击手段,试图绕过红军层层防护,达成既定目标。可能会造成混淆的是,在欧美一般采用红队代表攻击方,蓝队代表防守方,颜色代表正好相反。
企业网络蓝军工作内容主要包括渗透测试和红蓝对抗(Red Teaming),这两种方式所使用的技术基本相同,但是侧重点不同。
渗透测试侧重用较短的时间去挖掘更多的安全漏洞,一般不太关注攻击行为是否被监测发现,目的是帮助业务系统暴露和收敛更多风险。
红蓝对抗更接近真实场景,侧重绕过防御体系,毫无声息达成获取业务权限或数据的目标,不求发现全部风险点,因为攻击动作越多被发现的概率越大,一旦被发现,红军就会把蓝军踢出战场。红蓝对抗的目的是检验在真实攻击中纵深防御能力、告警运营质量、应急处置能力。
人员分工 部门负责人 负责组织整体的信息安全规划 负责向高层沟通申请资源 负责与组织其他部门的协调沟通 共同推进信息安全工作 负责信息安全团队建设 负责安全事件应急工作处置 负责推动组织安全规划的落实 合规管理员 负责安全相关管理制度、管理流程的制定,监督实施情况,修改和改进相关的制度和流程 负责合规性迎检准备工作,包括联络、迎检工作推动,迎检结果汇报等所有相关工作 负责与外部安全相关单位联络 负责安全意识培训、宣传和推广 安全技术负责人 业务安全防护整体技术规划和计划 了解组织安全技术缺陷,并能找到方法进行防御 安全设备运维 服务器与网络基础设备的安全加固推进工作 安全事件排查与分析,配合定期编写安全分析报告 关注注业内安全事件, 跟踪最新漏洞信息,进行业务产品的安全检查 负责漏洞修复工作推进,跟踪解决情况,问题收集 了解最新安全技术趋势 渗透/代码审计人员 对组织业务网站、业务系统进行安全评估测试 对漏洞结果提供解决方案和修复建议 安全设备运维人员 负责设备配置和策略的修改 负责协助其他部门的变更导致的安全策略修改的实现 安全开发 根据组织安全的需要开发安全辅助工具或平台 参与安全系统的需求分析、设计、编码等开发工作 维护公司现有的安全程序与系统
5.5. 内网渗透补充操作
5.5.1. 端口转发 windows lcx netsh linux portmap iptables socket代理 Win: xsocks Linux: proxychains 基于http的转发与socket代理(低权限下的渗透) 端口转发: tunna socks代理: reGeorg ssh通道 端口转发 socks
5.5.2. 获取shell 常规shell反弹 突破防火墙的imcp_shell反弹 正向shell nc -e /bin/sh -lp 1234 nc.exe -e cmd.exe -lp 1234
5.5.3. 内网文件传输 windows下文件传输 powershell vbs脚本文件 bitsadmin 文件共享 使用telnet接收数据 hta linux下文件传输 python wget tar + ssh 利用dns传输数据 文件编译 powershell将exe转为txt,再txt转为exe
5.5.4. 远程连接 && 执行程序 at&schtasks psexec wmic wmiexec.vbs smbexec powershell remoting SC创建服务执行 schtasks SMB+MOF || DLL Hijacks PTH + compmgmt.msc
Windows系统持久化
6.1. 总体思路
5.2. 持久化 – Windows
Web应用需要限制用户对应用程序的数据和功能的访问,以防止用户未经授权访问。访问控制的过程可以分为验证、会话管理和访问控制三个地方。
6.1.1.1. 验证机制
验证机制在一个应用程序的用户访问处理中是一个最基本的部分,验证就是确定该用户的有效性。大多数的web应用都采用使用的验证模型,即用户提交一个用户名和密码,应用检查它的有效性。在银行等安全性很重要的应用程序中,基本的验证模型通常需要增加额外的证书和多级登录过程,比如客户端证书、硬件等。
6.1.1.2. 会话管理
为了实施有效的访问控制,应用程序需要一个方法来识别和处理这一系列来自每个不同用户的请求。大部分程序会为每个会话创建一个唯一性的token来识别。
对攻击者来说,会话管理机制高度地依赖于token的安全性。在部分情况下,一个攻击者可以伪装成受害的授权用户来使用Web应用程序。这种情况可能有几种原因,其一是token生成的算法的缺陷,使得攻击者能够猜测到其他用户的token;其二是token后续处理的方法的缺陷,使得攻击者能够获得其他用户的token。
6.1.1.3. 访问控制
处理用户访问的最后一步是正确决定对于每个独立的请求是允许还是拒绝。如果前面的机制都工作正常,那么应用程序就知道每个被接受到的请求所来自的用户的id,并据此决定用户对所请求要执行的动作或要访问的数据是否得到了授权。
由于访问控制本身的复杂性,这使得它成为攻击者的常用目标。开发者经常对用户会如何与应用程序交互作出有缺陷的假设,也经常省略了对某些应用程序功能的访问控制检查。
6.1.2. 输入处理
很多对Web应用的攻击都涉及到提交未预期的输入,它导致了该应用程序设计者没有料到的行为。因此,对于应用程序安全性防护的一个关键的要求是它必须以一个安全的方式处理用户的输入。
基于输入的漏洞可能出现在一个应用程序的功能的任何地方,并与其使用的技术类型相关。对于这种攻击,输入验证是 常用的必要防护。不存在通用的单一的防护机制。常用的防护机制有如下几种:
6.1.2.1. 黑名单
黑名单包含已知的被用在攻击方面的一套字面上的字符串或模式,验证机制阻挡任何匹配黑名单的数据。
一般来说,这种方式是被认为是输入效果较差的一种方式。主要有两个原因,其一Web应用中的一个典型的漏洞可以使用很多种不同的输入来被利用,输入可以是被加密的或以各种不同的方法表示。
其二,漏洞利用的技术是在不断地改进的,有关利用已存在的漏洞类型的新的方法不可能被当前黑名单阻挡。
6.1.2.2. 白名单
白名单包含一系列的字符串、模式或一套标准来匹配符合要求的输入。这种检查机制允许匹配白名单的数据,阻止之外的任何数据。这种方式相对比较有效,但需要比较好的设计。
6.1.2.3. 过滤
过滤会删除潜在的恶意字符并留下安全的字符,基于数据过滤的方式通常是有效的,并且在许多情形中,可作为处理恶意输入的通用解决方案。
6.1.2.4. 安全地处理数据
非常多的web应用程序漏洞的出现是因为用户提供的数据是以不安全的方法被处理的。在一些情况下,存在安全的编程方法能够避免通常的问题。例如,SQL注入攻击能够通过预编译的方式组织,XSS在大部分情况下能够被转义所防御,如果对以上渗透测试团队建设或新项目有安全测试的需求想要了解更详细的话可以咨询专业的网站安全公司来测试并处理解决,过内做的比较全面的网站安全维护公司推荐Sine安全,启明星辰,绿盟等等都是比较不错的。
系统运维
2019-12-05 10:35:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
安装jira
wget https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-7.13.0-x64.bin chmod +x atlassian-jira-software-7.13.0-x64.bin root@jenkins:/data/jira# ./atlassian-jira-software-7.13.0-x64.bin Unpacking JRE ... Starting Installer ... Dec 04, 2019 3:44:32 PM java.util.prefs.FileSystemPreferences$1 run INFO: Created user preferences directory. Dec 04, 2019 3:44:32 PM java.util.prefs.FileSystemPreferences$2 run INFO: Created system preferences directory in java.home. This will install JIRA Software 7.13.0 on your computer. OK [o, Enter], Cancel [c] o Choose the appropriate installation or upgrade option. Please choose one of the following: Express Install (use default settings) [1], Custom Install (recommended for advanced users) [2, Enter], Upgrade an existing JIRA installation [3] 2 Where should JIRA Software be installed? [/opt/atlassian/jira] /data/jira Default location for JIRA Software data [/var/atlassian/application-data/jira] /data/jira/jira_data The home directory cannot be a sub-directory of the installation directory. Please use another location. Default location for JIRA Software data [/data/jira/jira_data] /data/jira_data Configure which ports JIRA Software will use. JIRA requires two TCP ports that are not being used by any other applications on this machine. The HTTP port is where you will access JIRA through your browser. The Control port is used to startup and shutdown JIRA. Use default ports (HTTP: 8080, Control: 8005) - Recommended [1, Enter], Set custom value for HTTP and Control ports [2] 2 HTTP Port Number [8080] 8050 Control Port Number [8005] 8040 JIRA can be run in the background. You may choose to run JIRA as a service, which means it will start automatically whenever the computer restarts. Install JIRA as Service? Yes [y, Enter], No [n] y Details on where JIRA Software will be installed and the settings that will be used. Installation Directory: /data/jira Home Directory: /data/jira_data HTTP Port: 8050 RMI Port: 8040 Install as service: Yes Install [i, Enter], Exit [e] i Extracting files ... Please wait a few moments while JIRA Software is configured. Installation of JIRA Software 7.13.0 is complete Start JIRA Software 7.13.0 now? Yes [y, Enter], No [n] y Please wait a few moments while JIRA Software starts up. Launching JIRA Software ... Installation of JIRA Software 7.13.0 is complete Your installation of JIRA Software 7.13.0 is now ready and can be accessed via your browser. JIRA Software 7.13.0 can be accessed at http://localhost:8050 Finishing installation ...
mysql授权 mysql> create database jira_new; Query OK, 1 row affected (0.04 sec) mysql> grant all privileges on *.* to jira@'192.168.83.50' identified by 'jira'; Query OK, 0 rows affected (0.03 sec) mysql> flush privileges; Query OK, 0 rows affected (0.02 sec)
下载连接驱动,不然报错 wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.zip -O /data/jira/atlassian-jira/WEB-INF/lib /etc/init.d/jira stop && /etc/init.d/jira start
需要认证密钥
https://id.atlassian.com/signup?application=mac&continue=https://my.atlassian.com 登陆账号后,选择New Evaluation License
延期密钥
找该包下载 atlassian-extras-3.2.jar https://www.cnblogs.com/kevingrace/p/7608813.html
系统运维
2019-12-04 20:08:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
前言
本文要说的是基于 keepalived 实现两台服务器之间的 主备切换 ,从而实现 Java 服务的高可用。 keepalived 的原理不多做介绍,自行搜索了解, keepalived 的安装部署请参考 keepalived 的安装及使用 。
个人建议
不要沉迷于 死扣 和 理解 原理,网上关于原理的文章大同小异,关键词就是 虚拟ip ,了解个大概,动手实践下,结合 keepalived 的配置文件会更好。
项目描述
我所做的项目是不是一个 web 程序,主要功能是定时从文件服务器下载文件,然后做一些处理,放到本地。
需求
当一台服务器部署的 系统出现故障 时,能够有 备用机器 继续提供服务,尽量避免人工介入去恢复系统。注意跟 负载均衡 的区别!初步方案只提供一台备用机。
方案
1. 实现原理
keepalived 的配置文件中有 权重 和 STATE 两个配置项, 两台机器 上的 keepalived 通过 虚拟IP 绑定之后,它们之间就可以通过上述的配置项来进行 ”选举“ ,区分 MASTER 和 BACKUP 。
然后配合 keepalived 中另外的两个功能, 检测脚本 和 通知脚本 实现我们的主备切换的需求。 到底如何决定 MASTER 和 BACKUP ?
STATE 的值可以是 MASTER 和 BACKUP ,当 两台机器配置的 STATE 的值相同,并且权重相同时,谁先启动谁是 MASTER ,当两台机器的配置的 权重 相同时,state 为 MASTER 的那台机器最终会成为 MASTER (哪怕这台机器启动的时间比另一台晚) 检测脚本的作用
对我们的使用场景来说,检测脚本的作用有两个, 一是检测我们的 java 进程是否存在,二是对 keepalived 的权重进行加减 。比如: 检测到我们的 java 进程关闭了,我们就可以降低这台机器的权重。 权重改变是永久生效的吗?
否, 权重的增加或者降低 只对当前一轮的检测 有效!下次检测开始还会恢复到配置的默认值。 通知脚本的作用
通知脚本有两种,分别根据 keepalived 的状态去触发。对我们的使用场景来说,这两种分别是: **一个是当这台机器是 MASTER 时需要触发的脚本,二是当这台机器是 BACKUP 的时候需要触发的脚本。**比如: 当我们的机器变成 MASTER 时,去启动我们的 java 进程。
2. 具体配置 keepalived 的配置文件 ! Configuration File for keepalived # 全局配置 global_defs { router_id LVS_MS vrrp_skip_check_adv_addr vrrp_garp_interval 0 vrrp_gna_interval 0 } # 配置检测脚本,脚本名称随意 vrrp_script chk { script "/etc/keepalived/chk.sh" # 检测脚本的位置 interval 3 # 每隔 3 秒执行一次 weight -20 # 权重 -20 ,根据检测脚本的返回值去判断是否要减掉 } # vrrp 实例 vrrp_instance VI_1 { state BACKUP # 主备配置一样,并且权重也一样,这样谁先启动谁就是 MASTER interface eth0 virtual_router_id 90 priority 100 # 默认权重 advert_int 1 authentication { auth_type PASS auth_pass keepalived_ms } virtual_ipaddress { 172.16.10.90 # 虚拟 ip } # 引用检测脚本,因为可以配置多个 vrrp 实例,每个实例都可以使用同一个检测脚本 track_script { chk } # 配置通知脚本的路径,脚本名称随意 # 1. 当 keepalived 的状态为 MASTER 时,会触发这个通知脚本 notify_master "/etc/keepalived/notify.sh master" # 2. 与 1 相反 notify_backup "/etc/keepalived/notify.sh backup" } 检测脚本 #!/bin/bash # 查找java服务进程个数 count=`ps aux | grep -v grep | grep 进程名称 | wc -l` # master.flag 就是一个标记文件,如果文件存在,表示为 master # 如果 MASTER 上的服务down 掉,降低权重 # 如果 MASTER 上的服务没有问题,权重不变 # 如果是BACKUP ,权重保持不变 if [ -f master.flag ] && [ $count -eq 0 ]; then exit 1 # 结合 keepalived.conf 配置文件,这里返回 1 表示当前机器权重 -20 else exit 0 # 返回 0 ,什么也不做 fi
检测脚本什么时候执行?
检测脚本时定时执行的,时间可以配置,而且主备两台机器都会同时执行。 通知脚本 #!/bin/bash # 接收参数, master 或者 backup 或者 "" function=$1 # 如果触发的是 master 的通知脚本 if [ "x"$function = "xmaster" ] ; then # 1. 新建标记文件,标志本机为 MASTER touch master.flag # 2. 启动 java 进程 # TODO # 3. 启动文件同步服务 # TODO 这里是因为我的项目需要,所以要开启这样一个服务 else # 1. 删除 MASTER 标记,标记为 BACKUP rm -f master.flag # 2. 关闭 java 进程 # TODO 为了保险一点,再关闭一次 # 3. 关闭文件同步服务 # TODO fi
通知脚本什么时候执行?
只有当状态发生切换时(包括 keepalived 启动时),才会触发对应的通知脚本。
执行流程 首先是准备两台机器比如 Server A 和 Server B,分别部署我们的 java 应用 和 keepalived ,甚至其他可能用到的服务,比如我们项目中用的文件同步。 分别启动两台机器的 keepalived 进程, 顺序无所谓,配置文件都一样 ,谁先启动谁就是 master。 比如 Server A 是 MASTER ,keepalived 就会去触发我们的通知脚本( notify_master ),通知脚本就会创建一个文件标记这台机器是 master,同时启动我们的 java 进程。 Server B 的 keepalived 启动后,触发 notify_slave , 结合脚本所做的事情,我们发现,第一次触发并不会造成什么影响,甚至后续我们可以优化一下,减少这些无用功。 当我们 关闭 Server A 的 java进程,检测脚本检测到 java 进程关闭了,并且当前主机是 MASTER (因为检测到 master.flag 文件存在),检测脚本就会返回 1,致使 Server A 的权重降低 20,也就是比 Server B 低20,此时会在此进行 “选举” ,Server A 就变成了 backup,同时去触发 notify_slave 脚本,Server B 就变成了 master, 同时触发 notify_master 脚本。 根据两个脚本做的事情,我们最终发现,两台机器不仅发生了身份切换,并且做的事情也对换了一下。
几个问题 keepalived 的日志存放位置 : /var/log/messages 如果发现两边都能检测到虚拟ip,请检查下 防火墙是否没有关闭! 检测脚本和通知脚本的执行顺序: 同时执行! 这也是我为什么加了 master.flag 的原因。 请仔细体会!
总结
上述仅仅是一个 demo 方案,并未经过生产环境的考验,需要打磨的地方很多。另外就是网上做此类方案的案例很少,可能是应用不到吧,其他大多方案都是, kill 掉 keepalived 从而完成主备切换。写这篇文章的主要原因是自己在做的过程中,有很多疑惑,网上没直接给出答案,其实正常操作的话不会有我这些疑惑,我是因为脚本写错了,在我坚定脚本没问题的时候,去怀疑一些问题,比如 权重改变后就永久生效了,通知脚本是根据你的状态一直在执行的!
​ --- 有点儿` 菜!
最后欢迎大家指出其中的问题,或者做一些补充!! 谢谢
系统运维
2019-12-04 19:21:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
准备工作:
记录两个node的当前信息:
ifconfig -a
如果db和ap的启动顺序有固定要求,需要检查相应的启动脚本(/sysadmin/hacmp下)
lsvg -o
df -k
测试:
1.网卡故障:
a.拔掉service网卡网线:
IP地址由standby网卡接管,应用无影响
ifconfig -a(standby网卡IP改变)
b.插回service网卡网线:
不自动发生接管
c.拔掉standby网卡网线:
IP地址由原service网卡接管,应用无影响
ifconfig -a(原service网卡IP恢复)
d.插回standby网卡网线:
不自动发生接管
e.将service,standby网卡网线同时拔掉:
node2接管node1的服务及IP
在node2上:
tail -f /tmp/hacmp.out (可查看hacmp服务日志)
ifconfig -a (查看node1的serviceIP是否已切换)
lsvg -o (查看node1的VG是否都已varyon)
df -k (查看node1的文件系统是否都已mount上)
ps -ef |grep * (检查node1的服务进程是否都已启动)
在node1上:
启动hacmp
smit clstart
f.对node2执行相同操作.
2.主机故障:
(应为非正常关机,但为保护server硬件,采用takeover进行测试)
a.在node1上:
smit clstop (选择takeover)
b.在node2上:
tail -f /tmp/hacmp.out (可查看hacmp服务日志)
ifconfig -a (standby网卡为node1IP)
lsvg -o (查看原node1的VG是否全部varyon了)
df -k (查看原node1上的VG是否全部mount上了)
ps -ef |grep * (检查原node1上的进程)
c.在node1上:
smit clstart (启动node1的hacmp,原node1的资源将全部切换回node1)
d.在node2上:
执行相同步骤.
重庆思庄红帽RHCE周末班火热报名中,更多详情请访问思庄网站咨询在线客服!
系统运维
2019-12-04 17:28:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
> JWT 是什么?
JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案。它是有三部分组成,示例如下,具体的讲解如下(jwt 是不会有空行的,下面只是为了显示,便使用了换行看着比较方便)。 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjMfQ. SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
它是由一个"."号隔开、三部分组成。 第一部分是 header 信息, { "alg": "HS256",// 加密的算法 "typ": "JWT"// 加密的方式,填写JWT }
第二部分是 Payload,有固定的六个部分和自定义数据组成,自定义数据看自己的情况需要来定义,是可以省去的。 'iss' => 'https://www.qqdeveloper.com',// 签发人 'exp' => time() + 86400,// 过期时间(这里的有效期时间为1天) 'sub' => '主题内容',// 主题 'aud' => '受众内容',// 受众 'nbf' => $time,// 生效时间 'iat' => $time,// 签发时间 'jti' => 123,// 编号
第三部分是 Signature(是对前两部分加密得来的)。由于前两部分是公开透明的数据,因此防止数据的篡改和泄露,我们需要加密处理。首先,需要指定一个密钥(secret)。这个密钥只有服务器才知道,不能泄露给用户。然后,使用 Header 里面指定的签名算法(默认是 HMAC SHA256),按照下面的公式产生签名。 第一部分的加密方式( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
最终生成的就是上面很长的一段字符串了。
> 为什么会使用 JWT
这就需要从我们传统的认证模式来说了,传统的认证模式是基于 session 和 cookie 来实现用户的认证和鉴权。具体的流程模式如下图。
(图一)Session与Cookie认证与鉴权
1.客户端向服务端发送一个http请求。
2.服务端在收到客户端的请求时,生成一个唯一的 sessionid,这里需要将该生成的 session 存储在服务端,这个 sessionid 存储具体的 session 内容,默认的是文件存储,当然我们可以修改具体的存储方式,例如数据库存储。 3.客户端在接受到这个 sessionid 时,存在 cookie 里面,每次请求时携带该 sessionid。 4.服务端在接收到客户端的请求之后,根据客户端发送的 sessionid 来进行认证与授权。 这里也推荐一下自己之前分享的一篇有关 session 于 cookie 的知识点。 session 与 cookie 详解
(图二)传统的token授权
1.客户端向服务端发送一个http请求。
2.服务端在收到客户端的请求之后,生成一个唯一 token,这里需要将该生成的 token 存储在服务端,至于怎么存,可以和上面 session 与 cookie 的方式一致。也可以存在缓存数据库中,如 redis,memcached。 3.服务端将该 token 返回给客户端,客户端存在本地,可以存请求头 header 中,也可以存在 cookie 中,同时也可以存在 localstorage 中。 4.向服务端发送请求时,携带该 token,服务端进行认证或者授权。
(图三)JWT认证模式
1.客户端向服务端发送一个http请求。
2.服务端根据 jwt 的生成规则,生成一个 token,并返回给客户端,这里服务端是不需要存储的。 3.客户端在接受到该 token 时,存在客户端。 4.客户端向服务端发送请求时,服务端对请求的 token 进行解析,如果发现解析出来的数据和生成的数据是一致的代表是一个合法的 token,则进行相应的操作。
> 基于 session 和 cookie 的认证和鉴权模式有什么好与不好的地方呢?总结如下几点:
通过上面几张图,我们也大致可以看得出来,基于 session 都是需要服务端存储的,而 JWT 是不需要服务端来存储的。针对以上几点,总结如下: 一、缺点 1.容易遇到跨域问题。不同域名下是无法通过 session 直接来做到认证和鉴权的。 2.分布式部署的系统,需要使用共享 session 机制 3.容易出现 csrf 问题。
二、优点 1.方便灵活,服务器端直接创建一个 sessionid,下发给客户端,客户端请求携带 sessionid 即可。 2.session 存储在服务端,更加安全。 3.便于服务端清除 session,让用户重新授权一次。
> JWT 与 session 有什么区别呢?
JWT 是基于客户端存储的一种认证方式,然而 session 是基于服务端存储的一种认证方式。JWT 虽然不用服务端存储了,也可以避免跨域、csrf 等情况。但也存在如下几个不太好的地方。 1.无法清除认证 token。由于 JWT 生成的 token 都是存储在客户端的,不能有服务端去主动清除,只有直到失效时间到了才能清除。除非服务端的逻辑做了改变。 2.存储在客户端,相对服务端,安全性更低一些。当 JWT 生成的 token 被破解,我们不便于清除该 token。
> 如何使用 JWT
这里推荐使用 GitHub 上面人家封装好的包,这里我使用的是 firebase/php-jwt,在项目中直接使用即可安装成功。 composer require firebase/php-jwt
接下来创建一个控制器,我这里使用的 ThinkPHP5.1 的框架 use think\Controller; use Firebase\JWT\JWT; class Test extends Controller { private $key = 'jwtKey'; // 生成JWT public function createJwt() { $time = time(); $key = $this->key; $token = [ 'iss' => 'https://www.qqdeveloper.com',// 签发人 'exp' => $time + 86400,// 过期时间(这里的有效期时间为1天) 'sub' => '主题内容',// 主题 'aud' => '受众内容',// 受众 'nbf' => $time,// 生效时间 'iat' => $time,// 签发时间 'jti' => 123,// 编号 // 额外自定义的数据 'data' => [ 'userName' => '编程浪子走四方' ]]; // 调用生成加密方法('Payloadn内容','加密的键',['加密算法'],['加密的可以'],['JWT的header头']) $jwt = JWT::encode($token, $key); return json(['data' => $jwt]); } // 解析JWT public function analysisJwt() { try { $key = $this->key; $jwt = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9leGFtcGxlLm9yZyIsImV4cCI6MTU2ODA5NjE4MCwic3ViIjoiXHU0ZTNiXHU5ODk4XHU1MTg1XHU1YmI5IiwiYXVkIjoiXHU1M2Q3XHU0ZjE3XHU1MTg1XHU1YmI5IiwibmJmIjoxNTY4MDA5NzgwLCJpYXQiOjE1NjgwMDk3ODAsImp0aSI6MTIzLCJkYXRhIjp7InVzZXJOYW1lIjoiXHU3ZjE2XHU3YTBiXHU2ZDZhXHU1YjUwXHU4ZDcwXHU1NmRiXHU2NWI5In19.kHb_9Np0zjE25YE9czUEGvmFPYtqMJT9tuZzJTuMZl0'; // 调用解密方法('JWT内容','解密的键,和加密时的加密键一直','加密算法') $decoded = JWT::decode($jwt, $key, array('HS256')); return json(['message' => $decoded]); } catch (\Exception $exception) { return json(['message' => $exception->getMessage()]); } } }
通过访问第一个方法,可以生成下图一段字符串 我们将上图中的字符串复制到第二图中的$jwt 变量,访问第二个方法即可解析出具体的数据。
Buy me a cup of coffee :)
系统运维
2019-12-04 16:44:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
Bistoury 部署日记
1. Bistoury 介绍
Bistoury 是去哪儿网开源的一个对应用透明,无侵入的 Java 应用诊断工具。让开发人员无需登录机器或修改系统,就可以从日志、内存、线程、类信息、调试、机器和系统属性等各个方面对应用进行诊断,提升开发人员诊断效率和诊断能力。 其一大特点就是可以在线debug。
2. 资源获取
Bistoury的github地址是: https://github.com/qunarcorp/bistoury
3.注意事项 目标VM上必须安装JDK1.8+,并设置的JAVA_HOME环境变量 本机9090,9091,9880,9881端口未被占用 本机的/etc/hosts中第一个IP地址为默认IP地址,请把要使用的IP地址放在第一位 本机必须安装ifconfig命令,安装命令: sudo yum install net-tools 本机已经启动了待诊断的java应用
4. 小结
系统运维
2019-12-04 16:27:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
目录树可以分为小的部分,每个部分可以在自己的磁盘或分区上。主要部分是根、/usr 、/var 和 /home 文件系统。每个部分有不同的目的。 每台机器都有根文件系统,它包含系统引导和使其他文件系统得以mount所必要的文件,根文件系统应该有单用户状态所必须的足够的内容。还应该包括修复损坏 系统、恢复备份等的工具。
目录树可以分为小的部分,每个部分可以在自己的磁盘或分区上。主要部分是根、/usr 、/var 和 /home 文件系统。每个部分有不同的目的。 每台机器都有根文件系统,它包含系统引导和使其他文件系统得以mount所必要的文件,根文件系统应该有单用户状态所必须的足够的内容。还应该包括修复损坏 系统、恢复备份等的工具。
/usr 文件系统包含所有 命令 、库、man页和其他一般操作中所需的不改变的文件。
/usr 不应该有 一般使用中要修改的文件。这样允许此文件系统中的文件通过网络共享,这样可以更有效,因为这样节省了磁盘空间(/usr 很容易是数百兆),且易于管理 (当升级应用时,只有主/usr 需要改变,而无须改变每台机器) 即使此文件系统在本地盘上,也可以只读mount,以减少系统崩溃时文件系统的损 坏。
/var 文件系统包含会改变的文件,比如spool目录(mail、news、打印机等用的), log文件、 formatted manual pages和暂存文件。传统上/var 的所有东西曾在 /usr 下的某个地方,但这样/usr 就不可能只读安装了。
/home 文件系统包含用户家目录,即系统上的所有实际数据。一个大的/home 可能要分为若干文件系统,需要在 /home 下加一级名字,如/home/students 、/home/staff 等。
/Etc文件系统
/etc目录包含各种系统配置文件,下面说明其中的一些。其他的你应该知道它们属于哪个程序, 并阅读该程序的man页。许多网络配置文件也在/etc中。
1、/etc/rc或/etc/rc.d或/etc/rc?.d:启动、或改变运行级时运 行的 脚本 或 脚本 的目录。
2、/etc/passwd:用户数据库,其中的域给出了用户名、真实姓名、用户起始目 录、加密口令和用户的其他信息。
3、/etc/fdprm:软盘参数表,用以说明不同的软盘格式。可用setfdprm进 行设置。更多的信息见setfdprm的帮助页。
4、/etc/fstab:指定启动时需要自动安装的文件系统列表。也包括用swapon -a启用的swap区的信息。
5、/etc/group:类似/etc/passwd ,但说明的不是用户信息而是组的信息。包括组的各种数据。
6、/etc/inittab:init 的配置文件。
7、/etc/issue:包括用户在登录提示符前的输出信息。通常包括系统的一段短说明 或欢迎信息。具体内容由系统管理员确定。
8、/etc/magic:“file”的配置文件。包含不同文件格式的说 明,“file”基于它猜测文件类型。
9、/etc/motd:motd是message of the day的缩写,用户成功登录后自动输出。内容由系统管理员确定。
常用于通告信息,如计划关机时间的警告等。
10、/etc/mtab:当前安装的文件系统列表。由脚本(scritp)初始化,并由 mount 命令 自动更新。当需要一个当前安装的文件系统的列表时使用(例如df命令)。
11、/etc/shadow:在安装了影子(shadow)口令软件的系统上的影子口令 文件。影子口令文件将/etc/passwd文件中的加密口令移动到/etc/shadow中,而后者只对超级用户(root)可读。这使破译口令更困 难,以此增加系统的安全性。
12、/etc/login.defs:login命令的配置文件。
13、/etc/printcap:类似/etc/termcap ,但针对打印机。语法不同。
14、/etc/profile 、/etc/csh.login、/etc/csh.cshrc:登 录或启动时bourne或c shell s执行的文件。这允许系统管理员为所有用户建立全局缺省环境。
15、/etc/securetty:确认安全终端,即哪个终端允许超级用户(root) 登录。一般只列出虚拟控制台,这样就不可能(至少很困难)通过调制解调器(modem)或网络闯入系统并得到超级用户特权。
16、/etc/shells:列出可以使用的shell。chsh命令允许用户在本文件 指定范围内改变登录的shell。提供一
台机器ftp服务的服务进程ftpd检查用户shell是否列在/etc/shells文件 中,如果不是,将不允许该用户登录。
17、/etc/termcap:终端性能数据库。说明不同的终端用什么“转义序列”控 制。写程序时不直接输出转义
序列(这样只能工作于特定品牌的终端),而是从/etc/termcap中查找要做的工作的 正确序列。这样,多数的程序可以在多数终端上运行。
/Dev文件系统
/dev目录包括所有设备的设备文件。设备文件用特定的约定命名,这在设备列表中说明。设备文件在安装时由系 统产生,以后可以用/dev/makedev描述。/dev/makedev.local 是系统管理员为本地设备文件(或连接)写的描述文稿(即如一些非标准设备驱动不是标准makedev 的一部分)。下面简要介绍/dev下 一些常用文件。
1、/dev/console:系统控制台,也就是直接和系统连接的监视器。
2、/dev/hd:ide硬盘驱动程序接口。如:/dev/hda指的是第一个硬 盘,had1则是指/dev/hda的第一个分区。如系统中有其他的硬盘,则依次为/dev /hdb、/dev/hdc、… …;如有多个分区则依次为hda1、hda2 … …
3、/dev/sd:scsi磁盘驱动程序接口。如系统有scsi硬盘,就不会访问/dev/had, 而会访问/dev/sda。
4、/dev/fd:软驱设备驱动程序。如:/dev/fd0指 系统的第一个软盘,也就是通常所说的a盘,/dev/fd1指第二个软盘,… …而/dev/fd1 h1440则表示访问驱动器1中的4.5高密盘。
5、/dev/st:scsi磁带驱动器驱动程序。
6、/dev/tty:提供虚拟控制台支持。如:/dev/tty1指 的是系统的第一个虚拟控制台,/dev/tty2则是系统
的第二个虚拟控制台。
7、/dev/pty:提供远程登陆伪终端支持。在进行telnet登录时就要用到/dev/pty设 备。
8、/dev/ttys:计算机串行接口,对于dos来说就是“com1”口。
9、/dev/cua:计算机串行接口,与调制解调器一起使用的设备。
10、/dev/null:“黑洞”,所有写入该设备的信息都将消失。例如:当想要将屏幕 上的输出信息隐藏起来
时,只要将输出信息输入到/dev/null中即可。
/Usr文件系统
/usr是个很重要的目录,通常这一文件系统很大,因为所有程序安装在这里。/usr里 的所有文件一般来自 linux 发行版;本地安装的程序和其他东西在/usr/local下,因为这样可以在升级新版系 统或新发行版时无须重新安装全部程序。/usr目录下的许多内容是可选的,但这些功能会使用户使用系统更加有效。/usr可容纳许多大型的软件包和它们的 配置文件。下面列出一些重要的目录(一些不太重要的目录被省略了)。
1、/usr/x11r6:包含x window系统的所有可执行程序、配置文件和支持文件。为简化x的开发和安装,x的文件没有集成到系统中。x window系统是一个功能强大的图形环境,提供了大量的图形工具程序。用户如果对microsoft windows比较熟悉的话,就不会对x window系统感到束手无策了。
2、/usr/x386:类似/usr/x11r6 ,但是是专门给x 11 release 5的。
3、/usr/bin:集中了几乎所有用户命令,是系统的软件库。另有些命令在/bin或/usr/local/bin中。
4、/usr/sbin:包括了根文件系统不必要的系统管理命令,例如多数服务程序。
5、/usr/man、/usr/info、/usr/doc:这些目录包含所有手册页、 gnu信息文档和各种其他文档文件。每个联机手册的“节”都有两个子目录。例如:/usr/man/man1中包含联机手册第一节的源码(没有格式化的原 始文件),/usr/man/cat1包含第一节已格式化的内容。联机手册分为以下九节:内部命令、系统调用、库函数、设备、文件格式、游戏、宏软件包、 系统管理和核心程序。
6、/usr/include:包含了c语言的头文件,这些文件多以.h结尾,用来描述c 语言程序中用到的数据结构、
子过程和常量。为了保持一致性,这实际上应该放在/usr/lib下,但习惯上一直沿用了这 个名字。
7、/usr/lib:包含了程序或子系统的不变的数据文件,包括一些site - wide配置文件。名字lib来源于库(library); 编程的原始库也存在/usr/lib 里。当编译程序时,程序便会和其中的库进行连接。也有许多程序把配置文件存入其中。
8、/usr/local:本地安装的软件和其他文件放在这里。这与/usr很相似。用户 可能会在这发现一些比较大 的软件包,如tex、emacs等。
/Var文件系统
/var包含系统一般运行时要改变的数据。通常这些数据所在的目录的大小是要经常变化或扩充 的。原来/var目录中有些内容是在/usr中的,但为了保持/usr目录的相对稳定,就把那些需要经常改变的目录放到/var中了。每个系统是特定的, 即不通过网络与其他计算机共享。下面列出一些重要的目录(一些不太重要的目录省略了)。
1、/var/catman:包括了格式化过的帮助(man)页。帮助页的源文件一般存在 /usr/man/catman中;有些man页可能有预格式化的版本,存在/usr/man/cat中。而其他的man页在第一次看时都需要格式化,格 式化完的版本存在/var/man中,这样其他人再看相同的页时就无须等待格式化了。(/var/catman经常被 清除,就像清除临时目录一样。)
2、/var/lib:存放系统正常运行时要改变的文件。
3、/var/local:存放/usr/local中 安装的程序的可变数据(即系统管理员安装的程序)。注意,如果必要,
即使本地安装的程序也会使用其他/var目录,例如/var/lock 。
4、/var/lock:锁定文件。许多程序遵循在/var/lock中 产生一个锁定文件的约定,以用来支持他们正在
使用某个特定的设备或文件。其他程序注意到这个锁定文件时,就不会再使用这个设备或文件。
5、/var/log:各种程序的日志(log)文件,尤其是login (/var/log/wtmplog纪 录所有到系统的登录和注销) 和syslog (/var/log/messages 纪录存储所有核心和系统程序信息)。/var/log 里的文件经常不确定地增长,应该定期清除。
6、/var/run:保存在下一次系统引导前有效的关于系统的信息文件。例如,/var/run/utmp包 含当前登录的用户的信息。
7、/var/spool:放置“假脱机(spool)”程序的目录,如mail、 news、打印队列和其他队列工作的目录。每
个不同的spool在/var/spool下有自己的子目录,例如,用户的邮箱就存放在/var/spool/mail 中。
8、/var/tmp:比/tmp允许更大的或需要存在较长时间的临时文件。注意系统管理 员可能不允许/var/tmp有很旧的文件。
/Proc文件系统
/proc文件系统是一个伪的文件系统,就是说它是一个实际上不存在的目录,因而这是一个非 常特殊的目录。它并不存在于某个磁盘上,而是由核心在内存中产生。这个目录用于提供关于系统的信息。下面说明一些最重要的文件和目录(/proc文件系统 在proc man页中有更详细的说明)。
1、/proc/x:关于进程x的信息目录,这x是这一进程的标识号。每个进程在 /proc下有一个名为自己进程号的目录。
2、/proc/cpuinfo:存放处理器(cpu)的信息,如cpu的类型、制造商、 型号和性能等。
3、/proc/devices:当前运行的核心配置的设备驱动的列表。
4、/proc/dma:显示当前使用的dma通道。
5、/proc/filesystems:核心配置的文件系统信息。
6、/proc/interrupts:显示被占用的中断信息和占用者的信息,以及被占用 的数量。
7、/proc/ioports:当前使用的i/o端口。
8、/proc/kcore:系统物理内存映像。与物理内存大小完全一样,然而实际上没有 占用这么多内存;它仅
仅是在程序访问它时才被创建。(注意:除非你把它拷贝到什么地方,否则/proc下没有任何东西占用任何磁盘空间。)
9、/proc/kmsg:核心输出的消息。也会被送到syslog。
10、/proc/ksyms:核心符号表。
11、/proc/loadavg:系统“平均负载”;3个没有意义的指示器指出系统当前 的工作量。
12、/proc/meminfo:各种存储器使用信息,包括物理内存和交换分区 (swap)。
13、/proc/modules:存放当前加载了哪些核心模块信息。
14、/proc/net:网络协议状态信息。
15、/proc/self:存放到查看/proc的 程序的进程目录的符号连接。当2个进程查看/proc时,这将会是不同
的连接。这主要便于程序得到它自己的进程目录。
16、/proc/stat:系统的不同状态,例如,系统启动后页面发生错误的次数。
17、/proc/uptime:系统启动的时间长度。
18、/proc/version:核心版本。
/usr/local下一般是你安装软件的目录,这个目录就相当于在windows下的programefiles这个目录
/opt这个目录是一些大型软件的安装目录,或者是一些服务程序的安装目录
举个例子:刚才装的测试版firefox,就可以装到/opt/firefox_beta目录下,/opt/firefox_beta目录下面就包含了运 行firefox所需要的所有文件、库、数据等等。要删除firefox的时候,你只需删除/opt/firefox_beta目录即可,非常简单。 本文地址: https://www.linuxprobe.com/linux-mjl.html
系统运维
2019-12-04 14:35:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
你可以通过多种方法来调整 Ubuntu,以自定义其外观和行为。我发现最简单的方法是使用 GNOME 优化工具。它也被称为 GNOME Tweak 或简单地称为 Tweak(优化)。
在过去的教程中,我已经多次介绍过它。在这里,我列出了你可以使用此工具执行的所有主要优化。
我在这里使用的是 Ubuntu,但是这些步骤应该适用于使用 GNOME 桌面环境的任何 Linux 发行版。
在 Ubuntu 18.04 或其它版本上安装 GNOME 优化工具
GNOME 优化工具可从 Ubuntu 中的 Universe 存储库中安装,因此请确保已在“软件和更新”工具中启用了该仓库:
在 Ubuntu 中启用 Universe 存储库
之后,你可以从软件中心安装 GNOME 优化工具。只需打开软件中心并搜索 “GNOME Tweaks” 并从那里安装它:
从软件中心安装 GNOME 优化工具
或者,你也可以使用 命令 行通过 apt 命令 安装此软件: sudo apt install gnome-tweaks
用优化工具定制 GNOME 桌面
GNOME 优化工具使你可以进行许多设置更改。其中的某些更改(例如墙纸更改、启动应用程序等)也可以在官方的“系统设置”工具中找到。我将重点介绍默认情况下“设置”中不可用的优化。
1、改变主题
你可以通过各种方式在 Ubuntu 中安装新主题。但是,如果要更改为新安装的主题,则必须安装GNOME 优化工具。
你可以在“外观Appearance”部分找到主题和图标设置。你可以浏览可用的主题和图标并设置你喜欢的主题和图标。更改将立即生效。
通过 GNOME 优化更改主题
2、禁用动画以提速你的桌面体验
应用程序窗口的打开、关闭、最大化等操作都有一些细微的动画。你可以禁用这些动画以稍微加快系统的速度,因为它会稍微使用一点资源。
禁用动画以获得稍快的桌面体验
3、控制桌面图标
至少在 Ubuntu 中,你会在桌面上看到“家目录Home”和“垃圾箱Trash”图标。如果你不喜欢,可以选择禁用它。你还可以选择要在桌面上显示的图标。
在 Ubuntu 中控制桌面图标
4、管理 GNOME 扩展
我想你可能知道 GNOME 扩展。这些是用于桌面的小型“插件”,可扩展 GNOME 桌面的功能。有大量的 GNOME 扩展,可用于在顶部面板中查看 CPU 消耗、获取剪贴板历史记录等等。
我已经写了一篇安装和使用 GNOME 扩展的详细文章。在这里,我假设你已经在使用它们,如果是这样,可以从 GNOME 优化工具中对其进行管理。
管理 GNOME 扩展
5、改变字体和缩放比例
你可以在 Ubuntu 中安装新字体,并使用这个优化工具在系统范围应用字体更改。如果你认为桌面上的图标和文本太小,也可以更改缩放比例。
更改字体和缩放比例
6、控制触摸板行为,例如在键入时禁用触摸板,使触摸板右键单击可以工作
GNOME 优化工具还允许你在键入时禁用触摸板。如果你在笔记本电脑上快速键入,这将很有用。手掌底部可能会触摸触摸板,并导致光标移至屏幕上不需要的位置。
在键入时自动禁用触摸板可解决此问题。
键入时禁用触摸板
你还会注意到当你按下触摸板的右下角以进行右键单击时,什么也没有发生。你的触摸板并没有问题。这是一项系统设置,可对没有实体右键按钮的任何触摸板(例如旧的 Thinkpad 笔记本电脑)禁用这种右键单击功能。两指点击可为你提供右键单击操作。
你也可以通过在“鼠标单击模拟Mouse Click Simulation”下设置为“区域Area”中而不是“手指Fingers”来找回这项功能。
修复右键单击问题
你可能必须重新启动 Ubuntu 来使这项更改生效。如果你是 Emacs 爱好者,还可以强制使用 Emacs 键盘绑定。
7、改变电源设置
电源这里只有一个设置。它可以让你在盖上盖子后将笔记本电脑置于挂起模式。
GNOME 优化工具中的电源设置
8、决定什么显示在顶部面板
桌面的顶部面板显示了一些重要的信息。在这里有日历、网络图标、系统设置和“活动Activities”选项。
你还可以显示电池百分比、添加日期及时间,并显示星期数。你还可以启用鼠标热角,以便将鼠标移至屏幕的左上角时可以获得所有正在运行的应用程序的活动视图。
如果将鼠标焦点放在应用程序窗口上,你会注意到其菜单显示在顶部面板中。如果你不喜欢这样,可以将其关闭,然后应用程序菜单将显示应用程序本身。
9、配置应用窗口
你可以决定是否在应用程序窗口中显示最大化和最小化选项(右上角的按钮)。你也可以改变它们的位置到左边或右边。
应用程序窗口配置
这里还有其他一些配置选项。我不使用它们,但你可以自行探索。
10、配置工作区
GNOME 优化工具还允许你围绕工作区配置一些内容。
在 Ubuntu 中配置工作区
内容总结
对于任何 GNOME 用户,GNOME 优化(Tweaks)工具都是必备工具。它可以帮助你配置桌面的外观和功能。 我感到惊讶的是,该工具甚至没有出现在 Ubuntu 的主存储库中。我认为应该默认安装它,要不,你就得在 Ubuntu 中手动安装 GNOME 优化工具。
如果你在 GNOME 优化工具中发现了一些此处没有讨论的隐藏技巧,为什么不与大家分享呢?
via: https://itsfoss.com/gnome-tweak-tool/
作者: Abhishek Prakash 选题: lujun9972 译者: wxy 校对: wxy
本文由 LCTT 原创编译, Linux中国 荣誉推出
本文地址: https://www.linuxprobe.com/ubuntu-gnome.html
系统运维
2019-12-04 14:35:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
0x00操作系统:
CentOS Linux release 7.5.1804 (Core)
step1:安装mysql客户端,后面执行初始化,sql用
#yum install mariadb
step2:安装git工具,后面拉取代码用
yum install git
step3:docker安装mysql镜像,洞察系统用
#docker pull mysql:5.7.13
启动数据库: docker run -d -p 127.0.0.1:6606:3306 \ --name open_source_mysqldb \ -e MYSQL_ROOT_PASSWORD=root \ mysql:5.7.13
step4:初始化数据库 mysql -h 127.0.0.1 -P 6606 -u root -p Enter password:root mysql> CREATE DATABASE IF NOT EXISTS vuldb DEFAULT CHARSET utf8 COLLATE utf8_general_ci; mysql> grant all on vuldb.* to vuluser@'%' identified by 'vulpassword'; mysql> flush privileges; mysql> quit
#mysql -h127.0.0.1 -P6606 -uroot -p vuldb < srcpm/vuldb_init.sql
step5:拉取镜像
# docker pull daocloud.io/liusheng/vulpm_docker:latest
step6:启动洞察服务
下载代码
#git clone https://github.com/creditease-sec/insight.git
启动服务
# docker run -d -p 9000:5000 \
--link open_source_mysqldb:db \
--name open_source_srcpm \
-v $PWD/srcpm:/usr/local/src/insight/srcpm \
-e DEV_DATABASE_URL='mysql://vuluser:vulpassword@db/vuldb' \
-e SrcPM_CONFIG=development \
-e MAIL_PASSWORD='xxxxxx' \
daocloud.io/liusheng/vulpm_docker:latest \
sh -c 'supervisord -c /usr/local/src/insight/srcpm/supervisor.conf && supervisorctl -c /usr/local/src/insight/srcpm/supervisor.conf start all && tail -f /usr/local/src/insight/srcpm/log/gunicorn.err && tail -f /usr/local/src/insight/srcpm/log/mail_sender.err'
step7:设置ip转发,如果已设置则忽略此步;
检查是否已经设置了ip转发
cat /proc/sys/net/ipv4/ip_forward
默认为0则不支持ip转发,设置为1才可以在其他ip访问此服务
本地服务已经正常启动,端口已经开启监听,但是无法通过ip访问
设置一下ip转发,默认系统是不开启的,操作如下命令即可:
# echo 1 > /proc/sys/net/ipv4/ip_forward
默认用户名、密码: admin@admin.com |11
ps:
官方文档需要要按照/opt/webapp创建项目目录
否则要改动配置文件supervisor.conf才可以正常启动
本例是修改了配置文件以后启动的。
【参考网址】
https://github.com/creditease-sec/insight
系统运维
2019-12-04 14:05:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
自动化测试体系不完善、缺少自助式的持续交付平台、系统间耦合度高服务拆分难度大、成熟的DevOps工程师稀缺,缺少敏捷文化……这些都是DevOps 在落地过程中,或多或少会碰到的问题,DevOps发展任重道远,不断学习前人经验完善自身是很好的选择。
11月23日,京东云开发者社区和英特尔联合举办的「京东云DevOps自动化运维技术实践」沙龙在上海落地,为开发者们分享京东云在DevOps上的经验。
DevOps 自动化运维技术实践
01京东云持续交付演化之路
京东云工具产品研发部副总监 井亮亮
在行业内,每年DevOps现状调查报告里,都会去衡量DevOps对于一个组织的生产活动的影响,定义出“高效的组织?”,会从4个方面去衡量,分别是:部署频率、软件交付周期、变更失败率、平均修复时长。持续交付目标是提升交付效率和确保交付质量,但交付是线上变更,那么有变更就意味着会有风险,那么,如何降低软件交付的失败率,控制风险,就变成了企业持续交付考核的一个重要目标。
“我统计了一下,京东云在今年的线上软件变更失败率控制在在 0.46%,但,我们仍然有4成的故障是由变更操作引起的,实施持续交付,对于确保整个软件交付质量来说是至关重要的。”井亮亮说。
很多公司在内部实施交付都曾或多或少产生过这样问题:开发说"我想更快的开发,但构建系统却频繁出问题!”,测试说“我需要更快测试,但没有环境!”、运维说“我有太多环境需要管理!”……京东云也不例外,那么持续交付如何解决跨团队合作的一些问题呢?yy京东云持续交付之路
2013 年之前 是”HumanOps“,通过脚本手工上线,无法做到自动化;
2014 年到 2016 年 是 Jone(京东持续交付平台) 时期,在 Jone1.0 交付采用Rsysnc的方式进行,上线过程经常会线上排队;16年启动了2.0的迭代,Jone采用了ansible作为发布的工具。
2017 年 京东云推出京东云翼,云翼是一整套的DevOps平台,不仅包含持续交付,还包含了智能监控、智能运维、门神等能力。
如何在企业内部实施持续交付 统一的部署规范 灵活的部署流水线 企业文化策略协助
在部署规范上,部署规范的统一,是企业实施持续交付的基础,在京东云内部会要求如下: 我们有统一的控制系统去操作线上,减少操作的渠道,减少风险,因为我们的控制系统可做到秒级回滚 会提供统一的基础镜像,这样不会因为操作系统不一致的问题造成的风险,服务都是用统一的账户去启动 会统一部署路径和日志路径,利于排查问题,以及查询日志 线上服务的启停命令,都是我们提供的统一的模板,防止不同人员自己编写导致的健壮性不够的故障 禁止手工,所有的构建都必须走系统去把控质量 系统会控制没有上预发的app是不允许上线的 另外会控制避免上线导致全流量丢失的上线操作
部署流水线可以帮助解决如何在企业内部推动各个团队用你的标准规范和平台,流水线是搭台子,各个业务可以在上面进行唱戏。
在做好规范和部署流水线的前提下,企业内部的落地推动,需要企业文化的支撑,持续交付不仅仅工具的支持,仍然需要文化的支撑。
云翼 DevOps 平台的设计及落地 首先第一步要构建了 CMDB 的建设,cmdb的建设,关键是cmdb模型的建设,并要确保 CMDB 数据的准确性。 利用容器技术提升持续交付的能力,容器要做扩缩容,可提高运维的效率,极大节约了资源的成本。 复杂业务场景,需支持编排部署,如一次几十个应用的发布,这时就需要编排能力的建设,编排主要分为3步:模版编写、设置策略、一健发布。

02数据驱动企业级监控系统设计与落地
京东云工具产品研发部总监 颜志杰
为了实现缩短 MTTR 的目标,监控系统应该具有这些能力: 数据采集能力,获取可观测的数据 数据能够方便加工,比如把相关的数据汇聚起来,得到我们需要关注的数据 对这些关注的数据,做异常检测,及时产生告警 收到告警后,通过 Dashbord 查图定位,专家诊断推荐平台,加速定位 定位问题后,通过预案平台进行快速止损 整个监控系统需要做到高可用,监控就是为了发现异常,如果由于异常导致自身不可用,肯定是减分的
从数据角度去理解监控系统设计
典型监控系统从功能模块分为采集、计算、存储、告警、算法、业务端等。从数据视角去理解,监控系统就是一个数据处理系统,便于我们简化系统设计以及更好理解监控系统。那么从数据视角分析监控系统,还需要优先考虑以下这几个部分: 数据模型先行,不同模型代表着不同的数据描述及处理能力,进而会对监控产品的形态产生影响 监控采集就是数据标准化的过程 监控数据存储具有读写正交、meta 的灵活查询、最新时间热点查询需求,京东云采用列式存储 + 倒排 +Gorilla 的方案选型 聚合计算就是对数据进行范围圈定,进行算子处理 报警通路做好“质检员”工作,同时完成通知用户这件事情
京东云的监控标准设计
监控需要覆盖基础 - 存活 - 性能 - 业务四个层面,从而保证采集数据的全面,进而避免监控遗漏。那么如何按照监控标准去指导监控产品的落地呢?看京东云如何从发现问题、定位问题和解决问题三个方面来减少 MTTR: 在发现问题阶段,分别面向管理者和运维人员设置监控系统的打分机制及推荐系统,给予管理者一个直观的总分和每个维度的细分得分,使得管理人员对整体监控有个量化的指标,另一方面,对于运维人员,则提供配置推荐、一键启用,可以快速地根据标准去完善监控,达到监控变‘全’。 在定位问题阶段京东云推进了变更可视化项目,将上线、配置更改、第三方的变更事件,都接入到变更事件中,用户可以根据时间去查询时间段的变更,跟报警做关联,京东云也会根据一些相关性的算法推荐,将变更推荐给用户,加速问题定位过程。 处理问题阶段京东云可提供预案平台,对预案进行标准化分类,指导用户管理预案。
京东云落地实践:以监控告警收敛项目为例
在监控告警上,运维人员往往在提升告警手段上做了很多工作,比如说通过发邮件的形式到短信、电话的形式等,京东云每月短信发送量上百万、电话告警每月上千条,但是运维人员并没有感受到有这么多问题,这就说明告警关注度是下降的,所以告警收敛势在必行,目标就是让告警关注度提升,那如何落地呢?
这就需要首先数据量化,先统计各个渠道的告警总数,然后分两步走,对于产品线负责人,需要让产品线的负责人知道自己部门的情况,另一路出分析数据,拆解产品线发送多的原因,给运维同学提供数据指导,分析各种有可能导致发送告警多的原因,如:一条短信平均接收人、哪些告警规则发送较多等。
基于这些统计数据,监控团队去成立告警收敛项目:在面对接收人过多的情况(一个短信原来需要 10 几个人接收),京东云推出值班表计划,在产品设计上保证告警规则设置的合理性,对于一些大规模触发情况,比如网络故障,京东云默认会按照规则、应用进行合并,同时为了在合并之后让用户能看的更清楚,京东云也推出了移动端程序。

03质量服务在京东云的实践
京东云平台质量部总监 丁超
“质量是一份事业,向做质量的同学致敬”
在京东云,质量部门关注什么?
京东云的形态包含公有云、专有云、混合云、多云形态,基于京东云产品的特性,质量服务应关注如下 4 个维度的内容: 标准化流程建设,及配套的 check 服务。
流程覆盖从需求、设计、编码、测试、发布、监控到工单。
以解决需求不明确、设计后期频繁变更、代码分支混乱、测试无准入准出标准、发布无标准、线上运行时数据无观测等问题。
丁超建议人工先把事情做起来,先有再深入,再自动化。 垂直方向上业务能力和场景的建设。
质量部门更关注产品的能力验证、能力评测。
以解决测试目标及内容不明确、无准入标准、准出标准、业务场景的模拟(用户是怎样使用产品的)、产品能力及局限性、对标评测等问题。 横向视角上的平台能力建设。
质量部门需要需要解决的问题是:
持续集成、效率问题、性能及安全评测能力、资源及环境快速获取能力。 作为云厂,或者作为企业,如何从云获得专业服务的能力。
需要解决的问题包括: 针对客户场景的质量解决方案; 让客户无需分神质量专业性的建设; 保证使用门槛低,效果好。
衡量质量的指标,一是看服务可用性 SLA,二是考核线上的故障数,三是要给用户交付功能清单,四是有性能测试指标 QPS,五是数据持久性,六是安全性,七是兼容性,根据以上指标,通过4个维度的质量建设,最终需要给用户交付极致的体验。
质量模型落地之从单点突破到持续交付
传统企业中的 CMM 标准,其对质量控制是非常细致的,如果既想实现互联网快速迭代,又想要传统企业中丰富的过程控制,该如何做呢?京东云用了现代和传统结合的方法,即持续交付的思想加入打点服务:1. 需求和设计上,采用“模板+人工”的方式,保证事情的发生和效果。2. 编码环节,提供 JDCCheck 服务, 代码仓管理、静态代码检查、安全检查、UT、代码评审等方面。提供打点服务,该环节通过,才可以进入测试环节。
在测试环节,京东云提供 JDCCase 测试管理平台,包含 Case 库、测试计划、测试执行、测试报告等,覆盖了测试任务的各个方面,保证了测试的准入和准出。同时与 DevOps 团队合作,发布 PipeLine 服务,保证测试规范,主要保证以下效果: 整体流程清晰 子服务做成 plugin,随需调用卡点 用户使用成本低,无感知接入 通过数据度量做改进,关注过程数据,和线上效果
丁超提到:“研发自测不足、推 UT 难、缺乏敏捷教练、流程落地难、人力不足、唯快不破(关注快,忽略质量),都使得持续交付在互联网的落地更难。所以,非常提倡“通用打点” 的方式,求同存异,统一流程和平台,又给团队最大的自由。在过程和结果上进行考核。”
京东云混沌工程实践
Netflix《混沌工程》书中说到:在接受“系统越复杂,越脆弱”的事实之后,让系统在每一次失败中获益,然后不断进化,这是混沌工程的核心思想。即通过模拟故障,来验证系统的可用性。
对于京东云来说,做混沌工程困难重重,机器规模大,地域范围广,涉及产品多,上下游依赖复杂,涉及人员多,而且担心线上出故障影响客户。但是从平台层面看问题,需要有人整体把控系统情况,保证故障的及时恢复,混沌工程又是必须要做的事情。
既然不能在线演练,京东云另辟蹊径,最终选择在隔离区重新搭建一套仿真环境。模拟多Region、多AZ。并在AZ1实现了与线上的 1:1 建设。同时,为保证该环境与线上版本的一致性,把该仿真环境作为“预发环境”使用,放在发布流程中,作为上线前的系统集成环境。只有通过该预发的集成,验证变更内容对云整体无影响,才可以继续后续的灰度流程。这样,还同时解决了日常运维问题。 1 、混沌工程第一次演练丁超介绍道:“第一次演练大约在 1 年半前,命名为“AZ故障”。目标是:测量 AZ1整体断电时,云服务全部恢复的时间(即全部迁移到 AZ2 恢复可用的耗时)。再重启AZ1,测量AZ1、AZ2同时恢复流量负载的耗时。之后,针对AZ2 重复如上的步骤。结果光AZ1断电的场景,就用了数个小时,这其中包括故障定位、执行预案、恢复验证等。非常直接客观地表明,在问题发现和定位、预案有效性、系统级验证方面,都亟待改进。不难得出结论:破坏性演练,是推动服务治理、架构升级的有效助力!“ 2 、混沌工程改进及发展第一次演练之后,京东云开始了不断的迭代改进,包括: 依赖治理:服务的 RING 级别梳理。将服务按照依赖顺序、部署顺序进行梳理,同一 RING 上的服务,不能有相互依赖。不同 RING 上的服务,有明确的监控项(KEY)状态呈现,有助于问题的逐层定位。 预案自动化:将所有预案收录到监控系统,实现自动化。触发方式定义为:检测到问题直接触发,和预警后人工确认触发。并对每个预案的生效时间进行严格的耗时检查,不断精进。 数据面要求对用户无损(即用户无感知),控制面可适当放宽。 服务治理:引入微服务架构和调用链治理。 触发及验证自动化:将故障的触发和云功能的验证,进行平台化。现已实现无成本的触发、秒级验证,这使破坏性演练可日常常态触发,不必大动干戈。
“时至一年半后的今天,我们已经从单场景故障恢复时间数个小时,降低到了分钟内,大部分故障场景用户无感知。微服务化、3AZ 建设等云的高可用性改造也在持续进行中。对于未来,京东云更有信心!”丁超老师对混沌工程的迭代有更强的信心。
BoCloud博云 售前总监 刘欣雨
多云管理平台的建设
开篇,刘欣雨分析了中国云市场现状提出:中国云市场规模在逐年增加,增幅领跑全球,呈现特点是越来越多用户愿意同时采用公有云和私有云这种多云管理模式。随着国内更多云服务商的参与,为云市场提供更好、更完善服务,我们相信中国的云市场规模将会更加庞大,那么多云管理的需求也将会越来越强烈,范围越来越广,这为多云管理服务商提供更大的市场机会。
博云多云平台总体建设思路围绕“七化”:管理统一化、资产精细化、业务流程化、服务自助化、运营计量化、响应自动化,管理智能化。刘欣雨主要分享了一体化运维管理方案,其中包含的多云管理方案、自动化运维和金融行业实践等内容。
关于其一体化运维管理方案,刘欣雨说:“一体化运维包含五个方面,统一纳管,统一运维,统一运营,统一服务门户和统一监控管理,实现异构资源集中纳管,统一资源按需分配;支持自动化运维,支持通过服务编排实现不同运维场景的自动化服务;提供统一服务门户,实现自助自主服务门户,让业务人员自助获取自己所需要的服务,我们的平台可以自动执行,为用户提供资源,同时提供集中监控管理,实现资源、应用和服务一站式管理”。
同时刘欣雨也提到,对自动化运维场景的支持主要体现资源自动化、应用自动化、网络自动化和业务场景自动化。包括资源交付、系统安装,应用上下线、应用变更、补丁管理、网络配置管理和业务场景管理(如灾备切换和跑批业务自动化处理)。刘欣雨提到云管平台还需要开放的集成模式,要匹配多服务管理方式,提供开放接口,方便对接客户现有系统(如多厂商云平台、ITSM、CMDB、监控等),这个也是对云管平台的要求。
最后刘欣雨分享了博云在某大型股份制银行多云管理平台项目建设内容,多云管理平台帮助该股份制银行实现了资源统一化、服务标准化、运维自动化和服务智能化的IT管理目标,提高了资源利用率,减轻了运维人员工作量,提升了运维工作效率,保障了运维工作质量,增强了IT服务体验,节约了IT建设和运营成本。
关注【京东云开发者社区】,后台回复【PPT1123】查看活动PPT
点击“ 阅读 ”,进入京东云开发者中心查看沙龙视频
欢迎点击“ 京东云 ”了解更多精彩
系统运维
2019-12-04 13:39:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
安装
需要统计一定时间内,所有组员的代码提交量,这样gitstats就能实现这个需求 首选在jenkins后台安装gitstat sudo apt-get install gitstats,如果出现error:“Unable to locate package git”,主要是因为source list没有相关对应的源文件,因此首选就需要apt-get update 进入jenkins页面,然后点击Manage Jenkins–》Manage Plugins,安装HTML Publisher plugin
新建项目
新建一个jenkins project,把需要统计的代码库填写在Source Code Management里,然后新建Execute shell,gitstats ${WORKSPACE} result,最后publish html reports,如下图所示:
系统运维
2019-12-04 11:40:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
问题描述
普通用户执行pm2 及npm用户无输出,root用户不影响
解决
yum remove npm 然后在安装nodejs 问题解决 sudo rpm -vih https://rpm.nodesource.com/pub_10.x/el/7/x86_64/nodejs-10.15.3-1nodesource.x86_64.rpm sudo npm install -g pm2 sudo pm2 -v
系统运维
2019-12-04 11:33:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
下插件
首先进入jenkins界面–》Manage jenkins–》Manage Plugins–》Available,选择Role-based Authorization Strategy安装
配置
安装完成之后进入Manage jenkins–》Configure Global Security,选中Role-Based Strategy进行配置 在系统管理页面点击Manage and Assign Roles进入角色管理页面
管理
选择该项可以创建全局角色、项目角色,并可以为角色分配权限。 Project角色 就是可以根据不任务前缀 进行隔离,以下创建了 app offline online Test 四个分组 每个分组创建了2个角色,管理员 (具有配置构建等权限) member角色(只有构建权限) 注意: Pattern 是任务前缀的匹配,例如任务名 App 开头的任务只会被 App 分组的用户看到
添加用户权限
用户前面的减号表示还没有创建该用户,这里只是添加用户的角色,创建了用户 就没有减号了 例如: test用户
创建用户
系统运维
2019-12-04 11:00:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
两点说明 本文不讲 keepalived 的工作机制及原理 个人实验采用的源码安装的方式进行的安装,比较麻烦。
通过 yum 安装会更快,方法如下: yum install keepalived
启动/关闭/重启/查看状态 systemctl start/stop/restart/status keepalived
编辑配置文件 vi /ect/keepalived/keepalived.conf
因此采用 yum 安装可以直接跳到 第 5 步。
注意:
不管是哪种方式安装,关注点在 配置文件 和 启动脚本的位置。
1. 下载源码包 wget https://www.keepalived.org/software/keepalived-1.2.16.tar.gz
2. 安装 mkdir keepalived-1.2.16 tar -zxvf keepalived-1.2.16.tar.gz -C keepalived-1.2.16 cd keepalived-1.2.16 ./configure
如果出现如下错误 configure: error: !!! OpenSSL is not properly installed on your system. !!! !!! Can not include OpenSSL headers files. !!!
解决办法: yum -y install openssl-devel make make install
3. 配置 /bin/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ mkdir /etc/keepalived # 复制配置文件 /bin/cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived /bin/cp /usr/local/sbin/keepalived /usr/sbin/
4. 启动 和 关闭 keepalived
启动 /etc/init.d/keepalived start
查看进程 ps -ef | grep keepalived
关闭 /etc/init.d/keepalived stop
5. 使用
我采用的 keepalived-1.2.16 版本。版本功能差异,以及配置文件差异不确定。 以下全部基于 1.2.16 版本。
5.1 配置文件 ! Configuration File for keepalived # 暂时没什么用,只需改最后一个字段 router_id global_defs { notification_email { 1111@163.com # 收件人配置 failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc # 发件人 smtp_server 192.168.200.1 # 邮件服务器 smtp_connect_timeout 30 router_id LVS_01 } # 检测脚本 vrrp_script checkTest { # 脚本所在路径 script "/mano/module/checkTest.sh" interval 3 weight -20 } # vrrp 实例,可以有多个实例,但是好像有个数限制 # 需要改的地方 # 1. state 主 :MASTER 备 :BACKUP # 2. virtual_router_id 主备保持一致 # 3. priority 一大一小 # 4. virtual_ipaddress 主备保持一致 vrrp_instance VI_1 { state MASTER # 服务器状态:主, 如果是备用服务器,改为 BACKUP interface eth0 # 通信端口 virtual_router_id 51 # 主备需要配置一样 priority 100 # 优先级 advert_int 1 # 心跳间隔 authentication { # 主备服务器间通信的钥匙对 auth_type PASS auth_pass 1111 } # 检测脚本配置 track_script { checkTest } # 虚拟ip,即vip 一个或多个 virtual_ipaddress { 172.16.10.83/24 # 绑在 interface上 # 192.168.200.17 # 192.168.200.18 } # 通知脚本 notify_master "/path/to/to_master.sh" notify_backup "/path/to/to_backup.sh" } # 以下的配置是为了配置负载均衡的,因为我们用不到,暂时删除了。
5.2 验证是否可用 分别启动两台机器上的 keepalived 启动成功后
在 MASTER 机器上执行, ip add | grep 172.16.10.83(配置文件中配置的虚拟ip) 打印结果:inet 172.16.10.83/24 scope global secondary eth0
在 BACKUP 机器上执行 ip add | grep 172.16.10.83(配置文件中配置的虚拟ip) 打印结果:什么也不输出 关闭 MASTER 机器上的 keepalived ,执行步骤 2, 结果相反
系统运维
2019-12-04 10:44:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
客户网站前端时间被攻击,网站被劫持到了赌bo网站上去,通过朋友介绍找到我们SINESAFE做网站的安全防护,我们随即对客户网站进行了全面的渗透测试,包括了网站的漏洞检测与代码安全测试,针对于发现的漏洞进行了修复,包括网站安全部署等等方面,下面我们将这一次的安全应急处理过程分享给有需要的客户。
首先客户网站采用的架构是PHP语言开发,mysql数据库,使用的是linux centos系统作为网站的运行环境,代码使用的是开源的某CMS系统,我们首先打包压缩了一份网站源代码到我们本地的电脑,人工对其代码进行全面的渗透测试与检测,首先我们会从网站的安装文件入手,我们查看到使用的是install.php作为网站安装的文件,一般这里会存在网站漏洞,例如:没有对其做安全验证,导致可以任意的安装网站,覆盖配置文件,甚至可能会出现表单里不做安全过滤,导致写入webshell一句话木马代码到config.php文件里。
经过我们SINE安全技术的人工代码安全审计,发现客户网站存在任意重装网站漏洞,漏洞文件:install.php,查看到使用的变量值为DEL_INSTALLER=1的时候才会删除安装文件,我们看到默认值=0.也就是说不会删除安装文件,我们可以访问该代码,直接执行重装操作。
继续检查代码是否还存在其他的漏洞,在检查到配置文件config.php代码中,有调用到cookies方面的赋值,继续追踪分析发现存在越权漏洞,管理员登录网站后,会保存cookies,但是这个cookies的构建很简单,是使用了emhash的方式,对传入的key值进行了MD5加密操作,最终cookies的构成是由账号名以及HASH值拼接构成的,那我们就可以伪造cookies,直接越权操作其他管理员账号,甚至可以以普通用户的权限,去操作网站管理员的权限。
我们SINE安全工程师对后台代码进行安全审计的时候发现,存在上传漏洞,可以上传php文件,后台有个设置上传后缀名的功能,但是默认网站对添加PHP的后缀名做了过滤,会将PHP稀释掉,以及不允许,那么我们在实际的渗透测试中如何绕过呢?看到后台有数据库备份恢复的功能,那么我就可以将数据库里的后缀名改为php,再直接恢复到网站中去,直接上传PHP脚本后门也叫webshell到网站里去。
至此客户网站的所有渗透测试以及漏洞检测已完毕,共发现3处漏洞,1个是install.php安装重置漏洞,1个是越权漏洞,1个是文件上传漏洞,针对以上3个漏洞,我们SINE安全对其做了漏洞修复,对install的变量值进行了判断,当网站安装后,自动删除install.php文件,对越权做了用户的所属权限判断,如果不是当前用户的cookies直接返回错误状态,对后台的数据库备份功能做限制,只能备份,不能恢复,恢复操作使用phpmyadmin来进行网站的数据恢复,如果您对网站的安全不是太懂的话,建议找专业的网站安全公司来处理解决,做好网站安全,才能保障用户的每一次访问。
系统运维
2019-12-04 10:39:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
需要分清三个概念: 物理CPU的个数 每个物理CPU的核数 物理CPU的核是否支持超线程 # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l # 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo | grep "cpu cores" | uniq # 查看逻辑CPU的个数 cat /proc/cpuinfo | grep "processor" | wc -l
参考 每核cpu的使用率与总使用率之间的关系 服务器性能指标(二)——CPU利用率分析及问题排查 Linux top里面%CPU和us%的解释
系统运维
2019-12-03 18:02:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
作为日常连接linux系统办公的工具,虽然linux系统的大部分快捷键在CRT中都能使用,但作为独立的工具,相比linux系统,还是会有自己特有的快捷键,方便日常办公,以下就是从网上搜索与自己日常办公所使用的快捷方式,方便自己及分享大家(希望大家更新补充)
Alt+Enter:全屏
Alt+B: 快速打开新的连接
Alt+1/2/3/4/5.../9:切换到第1/2/3/4/5.../9个标签
行首与行尾切换:
光标移至行首“Ctrl+A”或Home键
光标移至行尾“Ctrl+E”或End键
Ctrl + k -- 删除当前光标至行末的字符
Ctrl + W -- 删除当前光标至行首的字符
Alt+P,快速打开上传下载文件时会用到的sftp窗口,不用再右键去打开stfp了还要找它在哪儿
Ctrl+F4 ----关闭当前标签页
Alt+F4 ----关闭
Ctr+U:清除当前行和缓存的输入,删除光标至行首所有字符
Ctrl+W:删除当前光标至行首的字符
Ctrl+K:删除当前光标至行末的字符
Ctrl+B:光标前移1个字符
Ctrl+F:光标后移1个字符
Ctrl+H:删除光标前的1个字符
Ctrl+D:删除光标后1个字符
Ctrl+J或Ctrl+M:回车
Ctrl+P:显示前一条命令
Ctrl+N:下一条命令
Ctrl+V:输入ctrl字符
重庆思庄红帽RHCE周末班火热报名中,更多详情请访问思庄网站咨询在线客服!
系统运维
2019-12-03 16:44:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
一. asciinema
1. 安装 yum install -y asciinema
2. 开始录制 asciinema rec rec.json
一旦运行命令,就可以立即开始录制。 您终端上的所有打字活动都会被记录下来。 完成后,只需按Ctrl-D即可停止录制;录制的信息保存到rec.json文件
3. 回放 asciinema play rec.json
二、termrecord
1. 安装 pip install termrecord
2. 开始录制 TermRecord -s record.html
3.回放
通过网络浏览器打开记录的输出,以此来播放,暂停或重新启动。
三、tlog-rec
1. 安装 wget https://github.com/Scribery/tlog/archive/v7.tar.gz tar -xvf v7.tar.gz cd tlog-7/ autoreconf -i -f ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var make make install
2. 开始录制 tlog-rec -o record.json
3. 回放 tlog-play -i record.json
系统运维
2019-12-03 16:41:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
/bin/:基本程序,常用命令存放的目录。
/boot/:linux内核引导目录。
/dev/:设备文件目录。
/etc/:配置文件目录。
/home/:用户家目录。
/lib/:系统基本的动态连接共享库目录。
/media/*:可移动设备挂载点。
/mnt/:临时挂载点。
/opt/:主机额外安装第三方软件的目录,默认为空。
/root/:root用户家目录。
/run/:临时文件系统,存储系统启动以来的信息,重启系统时,这个目录会被清空,一般是/var/run 的软链接。
/sbin/:系统程序
/srv/:服务启动后需要提取的数据存放目录。
/tmp/:临时文件目录(通常在系统重新引导时被清空)。
/usr/:应用程序目录,类似于windows下的program files目录。
/var/:存放进程变量(经常变化,多为增量)数据,包括日志文件、队列、缓存等。
/proc/ && /sys/:内核使用的目录(部署HFS的一部分),主要用作内核将数据导出到用户空间。
系统运维
2019-12-03 15:28:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
生产环境下,一般不会允许所有的服务器都能访问公网,理想的情况是有几台服务器作为访问代理,同时作为缓存服务器。当服务器中有所需包时通过内网获取,如无则通过公网获取同时在本地保存。
常用搭建私有yum源的方法是createrepo生成本地仓库,其它服务器通过http访问仓库。这种方法的弊端是如果当前仓库中没有所需软件包会导致安装失败,不会去其它源获取数据。

使用nexus 3.14进行阿里云源yum代理
阿里云源
https://opsx.alibaba.com/mirror
可选择源
https://mirrors.aliyun.com
http://mirrors.163.com
http://mirrors.hust.edu.cn/
https://mirrors.cloud.tencent.com/

运行nexus需满足下列条件:
1,内存不小于2G,不一定是物理内存,swap也可以。
2,JDK需要1.8以上版本。

具体做法如下:
https://help.sonatype.com/repomanager3/download/download-archives---repository-manager-3
https://download.sonatype.com/nexus/3/nexus-3.14.0-04-unix.tar.gz
1,下载nexus,并解压到某个目录下。我这里放在/home/nexus中。这里面有两个目录,nexus-3.14.0-04放置程序及配置文件,sonatype-work放置数据文件。

2,修改nexus端口,默认是8081,此步骤可选。
/home/nexus/nexus-3.14.0-04/etc/nexus-default.properties

3,启动nexus,命令如下。这里不推荐使用root用户运行nexus服务。另外,它支持这些参数start|stop|run|run-redirect|status|restart|force-reload进行服务管理。
useradd -M nexuser
cd /usr/local && chown nexuser:nexuser jdk1.8.0_112
su -c "/home/nexus/nexus-3.14.0-04/bin/nexus start" nexuser
注: 可以创建专有用户,保证对jdk目录有可操作权限


4,打开浏览器即可看待nexus页面,默认用户名admin,默认密码admin123

5,创建blob,用于数据存储,默认存放在default中。blob类似bucket,存放源数据及xml等文件。这里创建一个名叫yum的blob,默认存储位置在/home/nexus/sonatype-work/nexus3/blobs/yum,此步骤可选。


6,创建yum代理。


选择yum(proxy)选项

配置Name和Remote storage,这里的Remote storage是要代理的源地址,填上文提供的阿里云的CentOS源地址。
指定blob。

7,创建后的源需要记录URL,会用在下面写repo文件中。

8,添加repo文件nexus.repo
上一步URL中的Name就是repository中的名字,区分大小写。
[nexus]
name=Nexus
baseurl=http://IP:8081/repository/CentOS-aliyun/$releasever/os/$basearch/
enabled=1
gpgcheck=0

9,清除缓存,即可使用新yum源。这里以安装screen为例,可看到正在加载nexus源。

10,查看blob可看到已有缓存的包。

11,browse中可看到缓存的内容。点击即可查看当前包的详细信息。

https://qgdlsj.com/wp-content/uploads/2018/10/nexus-3.14.0-04-unix.tar.gz
https://qgdlsj.com/wp-content/uploads/2018/10/jdk-8u151-linux-x64.zip
系统运维
2019-12-03 09:41:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
Rsyslog 是一个自由开源的日志记录程序,在 CentOS 8 和 RHEL 8 系统上默认可用。它提供了一种从客户端节点到单个中央服务器的“集中日志”的简单有效的方法。日志集中化有两个好处。首先,它简化了日志查看,因为系统管理员可以在一个中心节点查看远程服务器的所有日志,而无需登录每个客户端系统来检查日志。
如果需要监视多台服务器,这将非常有用,其次,如果远程客户端崩溃,你不用担心丢失日志,因为所有日志都将保存在中心的 Rsyslog 服务器上。rsyslog 取代了仅支持 UDP 协议的 syslog。它以优异的功能扩展了基本的 syslog 协议,例如在传输日志时支持 UDP 和 TCP 协议,增强的过滤功能以及灵活的配置选项。让我们来探讨如何在 CentOS 8 / RHEL 8 系统中配置 Rsyslog 服务器。
预先条件
我们将搭建以下实验环境来测试集中式日志记录过程:
Rsyslog 服务器 CentOS 8 Minimal IP 地址: 10.128.0.47
客户端系统 RHEL 8 Minimal IP 地址: 10.128.0.48
通过上面的设置,我们将演示如何设置 Rsyslog 服务器,然后配置客户端系统以将日志发送到 Rsyslog 服务器进行监视。
让我们开始!
在 CentOS 8 上配置 Rsyslog 服务器
默认情况下,Rsyslog 已安装在 CentOS 8 / RHEL 8 服务器上。要验证 Rsyslog 的状态,请通过 SSH 登录并运行以下 命令 : $ systemctl status rsyslog
示例输出:
如果由于某种原因 Rsyslog 不存在,那么可以使用以下 命令 进行安装: $ sudo yum install rsyslog
接下来,你需要修改 Rsyslog 配置文件中的一些设置。打开配置文件: $ sudo vim /etc/rsyslog.conf
滚动并取消注释下面的行,以允许通过 UDP 协议接收日志: module(load="imudp") # needs to be done just once input(type="imudp" port="514")
同样,如果你希望启用 TCP rsyslog 接收,请取消注释下面的行: module(load="imtcp") # needs to be done just once input(type="imtcp" port="514")
保存并退出配置文件。
要从客户端系统接收日志,我们需要在防火墙上打开 Rsyslog 默认端口 514。为此,请运行: # sudo firewall-cmd --add-port=514/tcp --zone=public --permanent
接下来,重新加载防火墙保存更改: # sudo firewall-cmd --reload
示例输出:
接下来,重启 Rsyslog 服务器: $ sudo systemctl restart rsyslog
要在启动时运行 Rsyslog,运行以下命令: $ sudo systemctl enable rsyslog
要确认 Rsyslog 服务器正在监听 514 端口,请使用 netstat 命令,如下所示: $ sudo netstat -pnltu
示例输出:
完美!我们已经成功配置了 Rsyslog 服务器来从客户端系统接收日志。
要实时查看日志消息,请运行以下命令: $ tail -f /var/log/messages
现在开始配置客户端系统。
在 RHEL 8 上配置客户端系统
与 Rsyslog 服务器一样,登录并通过以下命令检查 rsyslog 守护进程是否正在运行: $ sudo systemctl status rsyslog
示例输出:
接下来,打开 rsyslog 配置文件: $ sudo vim /etc/rsyslog.conf
在文件末尾,添加以下行: *.* @10.128.0.47:514 # Use @ for UDP protocol *.* @@10.128.0.47:514 # Use @@ for TCP protocol
保存并退出配置文件。就像 Rsyslog 服务器一样,打开 514 端口,这是防火墙上的默认 Rsyslog 端口: $ sudo firewall-cmd --add-port=514/tcp --zone=public --permanent
接下来,重新加载防火墙以保存更改: $ sudo firewall-cmd --reload
接下来,重启 rsyslog 服务: $ sudo systemctl restart rsyslog
要在启动时运行 Rsyslog,请运行以下命令: $ sudo systemctl enable rsyslog
测试日志记录操作
已经成功安装并配置 Rsyslog 服务器和客户端后,就该验证你的配置是否按预期运行了。
在客户端系统上,运行以下命令: # logger "Hello guys! This is our first log"
现在进入 Rsyslog 服务器并运行以下命令来实时查看日志消息: # tail -f /var/log/messages
客户端系统上命令运行的输出显示在了 Rsyslog 服务器的日志中,这意味着 Rsyslog 服务器正在接收来自客户端系统的日志:
就是这些了!我们成功设置了 Rsyslog 服务器来接收来自客户端系统的日志信息。
via: https://www.linuxtechi.com/configure-rsyslog-server-centos-8-rhel-8/
作者:James Kiarie 译者:geekpi 校对:wxy
本文由 LCTT 原创翻译, Linux中国 荣誉推出 本文地址: https://www.linuxprobe.com/centos8-rhel8-rsyslog.html
系统运维
2019-12-03 09:34:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
密码无处不在。网站、论坛、Web 应用等,你需要为其创建帐户和密码。麻烦在于密码,为各个帐户使用相同的密码会带来安全风险,因为如果其中一个网站遭到入侵,黑客也会在其他网站上尝试相同的电子邮件密码组合。但是,为所有新帐户设置独有的密码意味着你必须记住所有密码,这对普通人而言不太可能。这就是密码管理器可以提供帮助的地方。
密码管理应用会为你建议/创建强密码,并将其存储在加密的数据库中。你只需要记住密码管理器的主密码即可。主流的现代浏览器(例如 Mozilla Firefox 和 Google Chrome)内置了密码管理器。这有帮助,但是你只能在浏览器上使用它。有一些第三方专门的密码管理器,其中一些还提供 Linux 的原生桌面应用。在本文中,我们将筛选出可用于 Linux 的最佳密码管理器。继续之前,我还建议你仔细阅读 Linux 的免费密码生成器,来为你生成强大的唯一密码。
Linux 密码管理器
可能的非 FOSS 警报!我们优先考虑开源软件(有一些专有软件,请不要讨厌我!),并提供适用于 Linux 的独立桌面应用(GUI)。专有软件已高亮显示。
1、Bitwarden
主要亮点:
开源
免费供个人使用(可选付费升级)
云服务器的端到端加密
跨平台
有浏览器扩展
命令 行工具
Bitwarden 是 Linux 上最令人印象深刻的密码管理器之一。老实说,直到现在我才知道它。我已经从 LastPass 切换到了它。我能够轻松地从 LastPass 导入数据,而没有任何问题和困难。付费版本的价格仅为每年 10 美元。这似乎是值得的(我已经为个人使用进行了升级)。
它是一个开源解决方案,因此没有任何可疑之处。你甚至可以将其托管在自己的服务器上,并为你的组织创建密码解决方案。除此之外,你还将获得所有必需的功能,例如用于登录的两步验证、导入/导出凭据、指纹短语(唯一键)、密码生成器等等。
你可以免费将帐户升级为组织帐户,以便最多与 2 个用户共享你的信息。但是,如果你想要额外的加密存储以及与 5 个用户共享密码的功能,那么付费升级的费用低至每月 1 美元。我认为绝对值得一试!
2、Buttercup
主要亮点:
开源
免费,没有付费方式。
跨平台
有浏览器扩展
这是 Linux 中的另一个开源密码管理器。Buttercup 可能不是一个非常流行的解决方案。但是,如果你在寻找一种更简单的保存凭据的方法,那么这将是一个不错的开始。与其他软件不同,你不必对怀疑其云服务器的安全,因为它只支持离线使用并支持连接 Dropbox、OwnCloud、Nextcloud 和 WebDAV 等云服务。
因此,如果需要同步数据,那么可以选择云服务。你有不同选择。
3、KeePassXC
主要亮点:
开源
简单的密码管理器
跨平台
没有移动设备支持
KeePassXC 是 KeePassX 的社区分支,它最初是 Windows 上 KeePass 的 Linux 移植版本。
除非你没意识到,KeePassX 已经多年没有维护。因此,如果你在寻找简单易用的密码管理器,那么 KeePassXC 是一个不错的选择。KeePassXC 可能不是最漂亮或最好的密码管理器,但它确实可以做到该做的事。
它也是安全和开源的。我认为这值得一试,你说呢?
4、Enpass (非开源)
主要亮点:
专有软件
有许多功能,包括对“可穿戴”设备支持。
Linux 完全免费(具有付费支持)
Enpass 是非常流行的跨平台密码管理器。即使它不是开源解决方案,但还是有很多人依赖它。因此,至少可以肯定它是可行的。它提供了很多功能,如果你有可穿戴设备,它也可以支持它,这点很少见。
很高兴能看到 Enpass 积极管理 Linux 发行版的软件包。另外,请注意,它仅适用于 64 位系统。你可以在它的网站上找到官方的安装说明。它需要使用终端,但是我按照步骤进行了测试,它非常好用。
5、myki (非开源)
主要亮点:
专有软件
不使用云服务器存储密码
专注于本地点对点同步
能够在移动设备上用指纹 ID 替换密码
这可能不是一个受欢迎的建议,但我发现它很有趣。它是专有软件密码管理器,它让你避免使用云服务器,而是依靠点对点同步。
因此,如果你不想使用任何云服务器来存储你的信息,那么它适合你。另外值得注意的是,用于 Android 和 iOS 的程序可让你用指纹 ID 替换密码。如果你希望便于在手机上使用,又有桌面密码管理器的基本功能,这似乎是个不错的选择。
但是,如果你选择升级到付费版,这有个付费计划供你判断,绝对不便宜。尝试一下,让我们知道它如何!
其他一些值得说的密码管理器
即使没有为 Linux 提供独立的应用,但仍有一些密码管理器值得一提。< 、p>
如果你需要使用基于浏览器的(扩展)密码管理器,建议你尝试使用 LastPass、Dashlane 和 1Password。LastPass 甚至提供了 Linux 客户端(和 命令 行工具)。
如果你正在寻找命令行密码管理器,那你应该试试 Pass。< 、p>
Password Safe 也是种选择,但它的 Linux 客户端还处于 beta 阶段。我不建议依靠 “beta” 程序来存储密码。还有 Universal Password Manager,但它不再维护。你可能也听说过 Password Gorilla,但并它没有积极维护。
总结
目前,Bitwarden 似乎是我个人的最爱。但是,在 Linux 上有几个替代品可供选择。你可以选择提供原生应用的程序,也可选择浏览器插件,选择权在你。如果我有错过值得尝试的密码管理器,请在下面的评论中告诉我们。与往常一样,我们会根据你的建议扩展列表。
via: https://itsfoss.com/password-managers-linux/
作者:Ankush Das 译者:geekpi校对:wxy
本文由 LCTT 原创翻译, Linux中国 荣誉推出 本文地址: https://www.linuxprobe.com/share-five-linux.html
系统运维
2019-12-03 09:33:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
针对每个目录设置编码
/etc/apache2/sites-available/000-default.conf ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # 增加下面这句调整编码 AddDefaultCharset UTF-8 # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
系统运维
2019-12-02 20:14:00