数据专栏

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

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

「深度学习福利」大神带你进阶工程师,立即查看>>>
自从上个月的3.34发布以来,我们已经讨论过的许多针对GNOME Shell 和Mutter的重要修复都已经被移植到了3.34.1中,这个周末发布的GNOME Shell 3.35.1和Mutter 3.35.1并不是GNOME 3.36的第一步。但是至少在这个新的Mutter开发版本中有一些值得修正的地方。

GNOME Shell 3.35.1 只有不同的bug修复和清理,但没有什么特别的。虽然还没有什么大的特性,但至少最近几周有用的补丁已经被移植到3.34稳定的系列中了。
同时, Mutter 3.35.1 通过修复伽玛斜率预测,已修复了Wayland的“夜灯”模式。还有一个修复,用于释放抑制器锁定后立即屏蔽屏幕,并注意不同的复制+粘贴/简单的拖拽回归以及其他bug修复。
GNOME 3.35.2的开发和GNOME 3.34.2的稳定版都将在11月底发布。在这个新的发布计划中,GNOME 3.34.3稳定版/3.35.3版将在1月份发布,之后是GNOME 3.36测试版和2月份的候选版本。GNOME 3.36.0预计将作为下一个稳定的特性于发布3月11日。 本文地址: https://www.linuxprobe.com/mutter-3-35-1-wayland.html
系统运维
2019-11-08 15:11:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
Godot已经是最令人印象深刻的开源游戏引擎之一,随着Godot 4.0的推出,它将更有能力与专有引擎竞争,它的所有改进和Vulkan渲染器的状态正在成型。
开源的Godot 2D/3D游戏引擎的首席开发者Juan Linietsky在Godot 4.0之前每天都在开发该引擎的Vulkan渲染器。
Godot已经是最令人印象深刻的开源游戏引擎之一,随着Godot 4.0的推出,它将更有能力与专有引擎竞争,它的所有改进和Vulkan渲染器的状态正在成型。在过去的几周里,Juan用它的Vulkan渲染代码实现了更多的功能:
- 3D材质现在再次在Godot的Vulkan渲染器中工作。
一个新的visual frame profiler已经添加到Godot编辑器,以帮助查找CPU/GPU瓶颈。
-实现更多的实时照明代码的Vulkan渲染器。
-支持基本的通用纹理压缩格式内的戈多。
10月,Juan将继续致力于Godot的Vulkan渲染器,并计划专注于实时全局照明功能。
更多的细节见 progress report #4 。 本文地址: https://www.linuxprobe.com/godot-4-vulkan.html
系统运维
2019-11-08 15:10:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
获取钉钉群机器人webhook地址及加签密钥
获取企业微信群机器人webhook地址
启动webhook-adapter,转发webhook调用
接收prometheus的webhook调用,然后通过钉钉/企业微信群机器人webhook发送通知。
替换{token},{secret},{key}为实际值: apiVersion: extensions/v1beta1 kind: Deployment metadata: labels: run: prometheus-webhook-dingtalk name: prometheus-webhook-dingtalk namespace: ops spec: selector: matchLabels: run: prometheus-webhook-dingtalk template: metadata: labels: run: prometheus-webhook-dingtalk spec: containers: - args: - --adapter=/app/prometheusalert/dingtalk.js=/adapter/dingtalk=https://oapi.dingtalk.com/robot/send?access_token={token}#{secret} - --adapter=/app/prometheusalert/wx.js=/adapter/wx=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={key} image: registry.cn-hangzhou.aliyuncs.com/guyongquan/webhook-adapter name: prometheus-webhook-dingtalk ports: - containerPort: 80 protocol: TCP --- apiVersion: v1 kind: Service metadata: labels: run: prometheus-webhook-dingtalk name: prometheus-webhook-dingtalk namespace: ops spec: ports: - port: 8060 protocol: TCP targetPort: 80 selector: run: prometheus-webhook-dingtalk type: ClusterIP
alertmanager中配置webhook receiver receivers: - name: allreceivers webhook_configs: - url: http://prometheus-webhook-dingtalk.ops.svc.cluster.local:8060/adapter/dingtalk send_resolved: false - url: http://prometheus-webhook-dingtalk.ops.svc.cluster.local:8060/adapter/wx send_resolved: false
webhook adapter代码库 https://github.com/guyongquan/webhook-adapter
系统运维
2019-11-10 17:58:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
不知道大家自接触 Linux 以来,都使用过哪些命令,其中最常用的命令是什么?
我最常用的命令之一是 sudo ,因为我每天都在使用它在 Linux 上安装、更新、删除软件包以及其它各种需要超级用户权限的操作。
那么你知道你自己最经常使用的是哪几个命令呢?今天我们就来查看一下自己在使用 Linux 过程中最经常用的命令吧。
在 Linux 上查看你自己最经常使用的命令
在 Linux 中,历史文件 ~/.bash_history 会记录你在终端中输入过的所有命令,所以,我们可以通过这个文件来寻找你最经常使用的命令。
具体做法如下: $ history | awk '{print $2}' | sort | uniq -c | sort -nr | head -5
上面这条命令的结果将显示用户在 Linux 上最经常使用的 5 个命令。
输出结果如下: 153 sudo 118 ls 33 cd 30 ssh 29 git
这个结果非常清爽直观!
那么,上面这条命令各个部分你都知道它的具体作用吗?现在,我们来详细讲解。
首先我们来看下 history 命令的输出结果: alvin@alvin-pc:~$ history 743 sudo apt-get update 744 sudo apt-get upgrade 745 ls 747 ls 748 git status
这是在 Ubuntu 上看到的结果,如果在其它平台,比如 CentOS,看到的结果会是另外一种情况,对应的命令也需要小小改动一下。 awk '{print $2}' 从历史文件中打印第2列字符串,不显示命令选项和参数 sort 按字母顺序排列所有行 uniq -c 删除重复行并对它们进行计数统计 sort -nr 根据 uniq 命令返回的统计数反向排序
小提示:你可以使用 ExplainShell 来查找命令中每个选项的功能介绍。
从结果中可以看到的, sudo 是当前用户最经常使用的命令,使用了 153 次。
结果的显示是降序的,若你要让它升序显示,那么需要使用以下命令: $ history | awk {'print $2'} | sort | uniq -c | sort -n | tail -n5
你可以对比上一条命令查看它们的差异。
输出结果如下: 29 git 30 ssh 33 cd 118 ls 153 sudo
如果不想限制结果数量,只需删除上述命令的最后一部分即可。 $ history | awk '{print $2}' | sort | uniq -c | sort -nr
好了,现在大家可以去查看一下自己在 Linux 中最常用的命令了,留言告诉我你最常使用哪个命令哦。 -----------------
我是良许, 世界500强 外企 Linux 开发工程师,专业生产 Linux 干货。欢迎关注我的公众号「 良许Linux 」,里面分享了 Linux入门、基础、进阶 等系列教程,同时也有 Git、Vim、开源项目 等技术干货。公众号后台回复「 1024 」获取最新最全的技术资料,回复「 入群 」进入高手如云技术交流群。
系统运维
2019-11-10 07:56:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
if指令 格式:
if (条件判断) { 具体的rewrite规则 }
条件举例 条件判断语句由Nginx内置变量、逻辑判断符号和目标字符串三部分组成。 其中,内置变量是Nginx固定的非自定义的变量,如,$request_method, $request_uri等。 逻辑判断符号,有=, !=, ~, ~*, !~, !~* !表示相反的意思,~为匹配符号,它右侧为正则表达式,区分大小写,而~*为不区分大小写匹配。 目标字符串可以是正则表达式,通常不用加引号,但表达式中有特殊符号时,比如空格、花括号、分号等,需要用单引号引起来。
示例1 if ($request_method = POST) //当请求的方法为POST时,直接返回405状态码 { return 405; //在该示例中并未用到rewrite规则,if中支持用return指令。 } 示例2
if ($http_user_agent ~ MSIE) //user_agent带有MSIE字符的请求,直接返回403状态码 { return 403; }
如果想同时限制多个user_agent,还可以写成这样
if ($http_user_agent ~ "MSIE|firefox|spider") { return 403; } 示例3
if(!-f $request_filename) //当请求的文件不存在,将会执行下面的rewrite规则 { rewrite 语句; } 示例4
if($request_uri ~* 'gid=\d{9,12}/') //\d表示数字,{9,12}表示数字出现的次数是9到12次,如gid=123456789/就是符合条件的。 { rewrite 语句; }
rewrite中的break和last 两个指令用法相同,但含义不同,需要放到rewrite规则的末尾,用来控制重写后的链接是否继续被nginx配置执行(主要是rewrite、return指令)。 示例1(连续两条rewrite规则): server{ listen 80; server_name test.com; root /tmp/123.com; rewrite /1.html /2.html ; rewrite /2.html /3.html ; } 当我们请求1.html时,最终访问到的是3.html,两条rewrite规则先后执行。
break和last在location {}外部 格式:rewrite xxxxx break; 示例2(增加break): server{ listen 80; server_name test.com; root /tmp/123.com; rewrite /1.html /2.html break; rewrite /2.html /3.html; } 当我们请求1.html时,最终访问到的是2.html 说明break在此示例中,作用是不再执行break以下的rewrite规则。 但,当配置文件中有location时,它还会去执行location{}段的配置(请求要匹配该location)。 示例3(break后面还有location段): server{ listen 80; server_name test.com; root /tmp/123.com; rewrite /1.html /2.html break; rewrite /2.html /3.html; location /2.html { return 403; } } 当请求1.html时,最终会返回403状态码,说明它去匹配了break后面的location{}配置。 以上2个示例中,可以把break替换为last,它们两者起到的效果一模一样。
当break和last在location{}里面 示例4(什么都不加): server{ listen 80; server_name test.com; root /tmp/123.com; location / { rewrite /1.html /2.html; rewrite /2.html /3.html; } location /2.html { rewrite /2.html /a.html; } location /3.html { rewrite /3.html /b.html; } } 当请求/1.html,最终将会访问/b.html,连续执行location /下的两次rewrite,跳转到了/3.html,然后又匹配location /3.html 示例5(增加break): server{ listen 80; server_name test.com; root /tmp/123.com; location / { rewrite /1.html /2.html break; rewrite /2.html /3.html; } location /2.html { rewrite /2.html /a.html; } location /3.html { rewrite /3.html /b.html; } } 当请求/1.html,最终会访问/2.html 在location{}内部,遇到break,本location{}内以及后面的所有location{}内的所有指令都不再执行。 示例6(增加last): server{ listen 80; server_name test.com; root /tmp/123.com; location / { rewrite /1.html /2.html last; rewrite /2.html /3.html; } location /2.html { rewrite /2.html /a.html; } location /3.html { rewrite /3.html /b.html; } } 当请求/1.html,最终会访问/a.html 在location{}内部,遇到last,本location{}内后续指令不再执行,而重写后的url再次从头开始,从头到尾匹配一遍规则。
结论 当rewrite规则在location{}外,break和last作用一样,遇到break或last后,其后续的rewrite/return语句不再执行。但后续有location{}的话,还会近一步执行location{}里面的语句,当然前提是请求必须要匹配该location。 当rewrite规则在location{}里,遇到break后,本location{}与其他location{}的所有rewrite/return规则都不再执行。 当rewrite规则在location{}里,遇到last后,本location{}里后续rewrite/return规则不执行,但重写后的url再次从头开始执行所有规则,哪个匹配执行哪个。
系统运维
2019-11-10 15:53:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
在Ubuntu18.04上安装samba服务
打开终端,使用下面指令安装samba服务。 $ sudo apt install samba $ sudo apt install smbclient
在Ubuntu18.04上配置samba服务
编辑samba的配置文件 $ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak $ sudo vim /etc/samba/smb.conf
末尾添加如下: [share] comment = Shared Folder with username and password path = /home/你的用户名/Share/ available = yes browseable = yes public = yes writable = yes
创建共享文件夹 $ mkdir ~/Share $ chmod 777 ~/Share
创建smba账户 $sudo touch /etc/samba/smbpasswd $sudo smbpasswd -a 你的账户名
重启samba服务器 sudo /etc/init.d/samba restart
或者 sudo systemctl restart smdb.service
测试 smbclient -L //localhost/Share
使用 可以到windows下输入ip使用了,在文件夹处输入 "\\" + "Ubuntu机器的ip或主机名" + "\\" + "Share"
如果访问失败就需要按下面的步骤对Windows 10 进行配置。
配置Windows 10
打开win10对smb1.0/cifs文件共享支持
编辑本地策略组
重启win10 ,然后访问 在文件夹处输入 "\\" + "Ubuntu机器的ip或主机名" + "\\" + "Share"
系统运维
2019-11-10 11:25:08
「深度学习福利」大神带你进阶工程师,立即查看>>> 背景: 之前很长一段时间再写Golang程序时,不会有意识去写单元测试,直到后来写了独立项目后,慢慢才发现给一个功能编写对应的单元测试是多么高效和方便,接下来就再一起复习下Golang中的测试.
UnitTest(单元测试)
单元测试是程序开发者适用一段代码来验证另外一段代码写的是否符合预期的一种相对高效的自我测试方法。
还记得最早开始搞运维时,写的程序基本上是通过 main 程序去调用具体的功能函数,然后通过具体的输出来主观验证结果是否符合预期,这种方式对于搞正统的软件开发者而言会感觉很傻,但这对于运维领域来说却很实用,很有效,因为通常运维工作中需要的一些开发都不会是逻辑较为复杂的程序,所以没有必要专门去写测试程序去测试另外一个程序是否符合预期。
但是随着工作内容和运维需求的变化,不得不使用一些正规软件工程领域的相关方法来进行测试,因为对于程序开发来说,经过长期的积累和方法总结,单元测试是一种比较好的开发程序验证方式,而且能够提高程序开发的质量。而在 Golang 语言中内置了一系列的测试框架,加下来就主要讲讲 UnitTest 单元测试的相关知识点。
UnitTest的编写
注意: 在Golang中,对于单元测试程序来说通常会有一些重要约束,主要如下: 单元测试文件名必须为 xxx_test.go (其中xxx为业务逻辑程序) 单元测试的函数名必须为 Testxxx (xxx可用来识别业务逻辑函数) 单元测试函数参数必须为 t *testing.T (测试框架强要求) 测试程序和被测试程序文件在一个包 package 中 # 示例文件 # 假设我们为某段业务逻辑专门写了一个package(用来初始化一个矩形,并计算体积),此时看到到整体结构如下 $ tree -L 2 ./unittest ./unittest ├── area.go └── area_test.go # 业务逻辑代码(业务逻辑需要和单元测试在一个package下) $ cat ./unittest/area.go package unittest type box struct { length int width int height int name string } // 初始化一个结构体指针对象,后面使用结构体指针方法来设置和获取对象属性 func Newbox() (*box) { return &box{} } // 给结构体对象设置具体的属性(名称,规格大小) // 注意: 在如下几个方法中,方法接受者为指针类型,而方法参数为值类型,因此在赋值时可能有人产生疑惑,这里其实是Golang底层做了优化(v.name = name 等同于(*v).name = name) func (v *box) SetName(name string) { v.name = name } func (v *box) SetSize(l,w,h int) { v.length = l v.width = w v.height = h } // 获取对象的一些属性(名称和体积) func (v *box) GetName() (string) { return v.name } func (v *box) GetVolume() (int) { return (v.length)*(v.width)*(v.height) } # 对应业务逻辑的单元测试逻辑 $ cat unittest/area_test.go package unittest // 必须导入testing模块,并且方法的接受者为(t *testing.T) import ( "fmt" "testing" ) // 测试1: 测试名称是否符合预期 func TestSetSomething(t *testing.T) { box := Newbox() box.SetName("bgbiao") if box.GetName() == "bgbiao" { fmt.Println("the rectangular name's result is ok") } } // 测试2: 测试计算出来的体积是否符合预期 func TestGetSomething(t *testing.T) { box := Newbox() box.SetSize(3,4,5) if box.GetVolume() == 60 { fmt.Println("the rectangular volume's result is ok") } } # 运行单元测试程序 # 可以看到我们编写的两个单元测试都经过预期测试 $ cd unittest $ go test the rectangular name's result is ok the rectangular volume's result is ok PASS ok _/User/BGBiao/unittest 0.005s
单元测试的运行
通过上面那个测试示例,我们都知道了可以使用 go test 来对Golang代码进行测试,接下来具体讲解一些 go test 的其他用法(其实上面说的那些规则也可以在 go help test 帮助文档中找到)
这里主要总结下几个常用的参数: -args: 指定一些测试时的参数(可以指定超时时间,cpu绑定,压测等等(go test包含单元测试,压力测试等)) -test.v: 是否输出全部的单元测试用例(不管成功或者失败),默认没有加上,所以只输出失败的单元测试用例 -test.run pattern: 只跑哪些单元测试用例 -test.bench patten: 只跑那些性能测试用例 -test.benchmem : 是否在性能测试的时候输出内存情况 -test.benchtime t : 性能测试运行的时间,默认是1s -test.cpuprofile cpu.out : 是否输出cpu性能分析文件 -test.memprofile mem.out : 是否输出内存性能分析文件 -test.blockprofile block.out : 是否输出内部goroutine阻塞的性能分析文件 -c: 编译测试文件到pkg.test,但是不会运行测试程序 -exec xprog: 使用xprog参数来运行编译的测试文件(参数类似go run后的参数) -i: 安装测试程序中的依赖包,但是不运行测试程序 -json: 以json格式输出测试结果 -o file: 指定测试程序编译后生成的文件名
单元测试中常用的命令参数: # 对当前目录下的全部单元测试程序进行运行测试(也就是所有的xxx_test.go文件中的所有function都会运行) $ go test the rectangular name's result is ok the rectangular volume's result is ok PASS ok _/Users/BGBiao/unittest 0.005s # 查看详细的单元测试结果 # (go test -v 等同于go test -args -test.v) $ go test -v === RUN TestSetSomething the rectangular name's result is ok --- PASS: TestSetSomething (0.00s) === RUN TestGetSomething the rectangular volume's result is ok --- PASS: TestGetSomething (0.00s) PASS ok _/Users/BGBiao/unittest 0.005s # 指定单元测试function来进行测试 # go test -v -run functionname $ go test -v -test.run TestGetSomething === RUN TestGetSomething the rectangular volume's result is ok --- PASS: TestGetSomething (0.00s) PASS ok _/Users/BGBiao/unittest 0.005s
单元测试注意事项
注意: 在单元测试时,一个比较重要的事情就是如何构造测试数据,因为通常我们能够想到的测试数据都是在预期之中的,有些核心逻辑的测试数据往往不能考虑到,因此构造测试数据时可考虑如下几个方面: 正常输入: 正常的可预测的测试用例 边界输入: 极端情况下的输入来测试容错性 非法输入: 输入异常数据类型,整个逻辑是否能够正常处理或者捕获 白盒覆盖: 需要设计的测试用例能够覆盖所有代码(语句覆盖、条件覆盖、分支覆盖、分支/条件覆盖、条件组合覆盖)
注意: 在写项目时,对于基础的工具层 util 的逻辑代码,一定要进行全方位,多场景的进行测试,否则当项目大起来后到处引用可能会造成较大麻烦;其次,我们的代码逻辑通常是更新迭代的,单元测试代码也应该进行定期更新. wx公号: BGBiao,一起进步~
系统运维
2019-11-09 23:34:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
导读
Oracle Java 13是在几周前发布的。 以下是在Ubuntu 14.04,Ubuntu 16.04,Ubuntu 18.04, Linux Mint 18.x,19.x及更高版本上轻松安装它的方法。
要查看Java 13中的新功能和增强功能,请参阅 公告 。
‘Linux Uprising’ team 制作了一个安装 脚本 ,可以自动下载并安装Oracle JDK 13,并将Java 13设置为默认的Java版本(设置JAVA_HOME等)。
1.)通过Ctrl + Alt + T键盘快捷键或从应用程序菜单中搜索“终端”来打开终端。 打开时,运行 命令 以添加PPA: linuxidc@linuxidc:~/www.linuxidc.com$ sudo add-apt-repository ppa:linuxuprising/java
输入sudo提示的登录密码,然后按Enter继续。
2.)然后检查更新并通过2个 命令 安装 脚本 : linuxidc@linuxidc:~/www.linuxidc.com$ sudo apt-get update linuxidc@linuxidc:~/www.linuxidc.com$ sudo apt-get install oracle-java13-installer

该命令将自动下载Java 13源码包,安装在64位Ubuntu上,并将其设置为默认。
通过命令: java --version 检查结果
(可选)您可以通过“其他软件”选项卡下的“软件和更新”实用程序删除PPA存储库。
并通过命令删除Java 13: sudo apt-get remove oracle-java13-installer 原文来自: https://www.linuxprobe.com/ubuntu-oracle-java-13.html
系统运维
2019-11-09 22:50:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
导读
日志的关键性就不用多说了,对于网站的日志来说,如果网站访问量较大,每天产生的日志也是非常庞大的,nginx默认都是将日志写入到指定的日志文件中,如果日志文件变得非常大,那么自然的写入日志就较慢,如果我们需要分析日志,对于几百兆或者几G的文件,分析起来也很不方便,这里我采用的是系统自带日志轮询logrotate 对nginx 日志进行割切。
logrotate配置
logrotate 的主配置文件在/etc/logrotate.conf 主配置文件无需进行调整配置,保持默认即可。
如果使用了一键安装包配置的环境,可能在/etc/logrotate.d 下已经生成了文件nginx ,如果没有,则创建该文件: vim /etc/logrotate.d/nginx /data/weblogs/*.log { weekly rotate 7 missingok dateext nocompress notifempty sharedscripts postrotate [ -e /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` endscript }
配置选项说明:
/data/weblogs/*.log # 需要切割的日志文件,可以指定为某个文件名进行切割
weekly #指定转储周期为每周,对应的 daily:指定转储周期为每天,monthly:指定转储周期为每月
rotate 7 #指定日志文件删除之前转储的次数,0 指没有备份,7 指保留7 个备份
missingok #如果指定的目录不存在,logrotate会报错,此项用来关闭报错
nocompress # 这里是不进行压缩,如果需要将切割的日志进行压缩,可以设置为compress
notifempty #如果是空文件的话,不转储
sharedscripts #所有的日志文件都轮转完毕后统一执行一次 脚本
postrotate/endscript #在转储以后需要执行的 命令 可以放入这个对,这两个关键字必须单独成行
postrotate 中的内容即为:nginx进程发送USR1信号使其重新打开日志并写入,不会重启服务,也不会导致最新写入的日志丢失
如果日志分类存放到不同的目录下可以这样设置: /data/weblogs/*.log /data/weblogs/cnyunwei/*.log { weekly rotate 7 .....
测试是否正确执行 [root@aliyun weblogs]#/usr/sbin/logrotate -f /etc/logrotate.d/nginx
执行上述 命令 后可以查看当前日志文件下生成了www.susecui.cn.log-20160808 的文件,如果是开启了压缩,则会生成www.susecui.cn.log-20160808.gz 的压缩文件
创建任务计划执行命令
如果是设置了每天进行切割日志,那么就需要单独设置计划任务,默认设置为一周切割的情况下不需要设置计划任务,logrotate 主配置文件中已经定义了每周会进行轮询。 crontab -e 10 2 * * 6 /usr/sbin/logrotate -f /etc/logrotate.d/nginx 原文来自: https://www.linuxprobe.com/nginx-logrotate.html
系统运维
2019-11-09 22:50:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
linux发行版系统目录命名规则
使用根文件系统结构,使用FHS层次结构。linux系统严格区分大小写,系统目录继承了这一特点。
/:根目录,所有目录的最高一级目录
/bin:所有用户可用的基础命令存放目录
/sbin:仅root用户可用的命令存放目录
/home:普通用户家目录
/root:超级用户家目录
/etc:存放配置文件的目录
/usr:存放全局共享数据的目录
/usr/local:部分第三方应用程序安装目录
/dev:存放设备文件的目录
/dev/null:空设备,所有存入的数据都会被丢弃的设备文件
/dev/zero:零设备,输出指定长度二进制0的设备文件
/lib:存放库文件和内核模块的目录
/lib64:存放专用64位库文件的目录
/var:存放常发生变化的文件以及少部分配置文件的目录
/var/log:存放系统日志的目录
/boot:存放系统启动过程所用到的引导文件、内核文件等文件的目录
/proc:存放内核与进程相关文件的虚拟文件系统
/proc/cpuinfo:存放cpu信息的文件
/medir:可移动存储设备的默认挂载点
/mnt:临时挂载点,重启失效
/tmp:存放临时目录及文件的目录,重启清空
/opt:部分第三方应用程序的默认安装目录

文件的元数据信息包含 File 文件名称 Size 文件大小 Blocks 占用的磁盘块数 IO Block IO块大小 regular file 文件的类型 Device 所在设备 Inode Inode节点号 Links 被链接的次数 Access 文件的访问权限 Uid 属主id和所有人 Gid 属组id和所属组 Access 文件最近一次被访问的时间 Modify 文件的数据内容被修改的时间 Chang 文件的状态改变的时间
可以通过stat命令查看文件的元数据,例: [root@zfc ~]# stat anaconda-ks.cfg File: ‘anaconda-ks.cfg’ Size: 1968 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 4297153635 Links: 1 Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-11-06 18:22:12.433397525 +0800 Modify: 2019-11-06 18:22:12.433397525 +0800 Change: 2019-11-06 18:22:12.822401901 +0800 Birth: -
可以通过touch命令修改文件的时间戳,例: [root@zfc ~]# touch anaconda-ks.cfg [root@zfc ~]# stat anaconda-ks.cfg File: ‘anaconda-ks.cfg’ Size: 1968 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 4297153635 Links: 1 Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-11-09 18:24:00.413843056 +0800 Modify: 2019-11-09 18:24:00.413843056 +0800 Change: 2019-11-09 18:24:00.413843056 +0800 Birth: -

链接
包含软链接和硬链接,软链接是创建的一个指向数据块的新的inode的文件,与源文件inode不同,删除源文件软链接即失效。硬链接是创建新的数据块存储相同的内容,但是inode相同,删除源文件硬链接依然有效。 [root@zfc ~]# touch ln #创建一个源文件 [root@zfc ~]# ln -s ln ln_s #创建软链接 [root@zfc ~]# ln ln ln_h #创建硬链接 [root@zfc ~]# stat ln |grep -i inode #查看源文件inode Device: fd00h/64768d Inode: 4297103463 Links: 2 [root@zfc ~]# stat ln_h |grep -i inode #查看硬链接inode Device: fd00h/64768d Inode: 4297103463 Links: 2 [root@zfc ~]# stat ln_s |grep -i inode #查看软链接inode Device: fd00h/64768d Inode: 4297153591 Links: 1 [root@zfc ~]# rm -f ln #删除源文件 [root@zfc ~]# ll ln* -rw-r--r-- 1 root root 18 Nov 9 18:31 ln_h #可以正常打开 lrwxrwxrwx 1 root root 2 Nov 9 18:30 ln_s -> ln #链接失效,无法打开

文件管理类命令
ls:查看目录下的文件
-a:显示所有文件包括隐藏文件
-A:显示除.和..之外的所有文件
-l,--long:显示文件的详细属性信息
-h:对文件大小进行人性化显示
-d:查看目录本身而非其内部的文件
-r:逆序显示文件
-R:递归显示文件
touch:创建文件,如果文件已存在则刷新时间戳
mkdir:创建目录
-p:自动按需创建父目录
-m:创建目录时给定权限
cp:复制
-f:强制覆盖目标文件
-r,-R:递归复制目录
mv:剪切文件到指定目录,如果剪切到同一目录下即为改名
-f:强制覆盖目标文件
rm:删除文件或目录
-f:强制删除目标文件
-r,-R:递归处理,将制定目录下的所有文件包括目录一并删除

复制/etc/profile到/tmp目录,用查找替换命令删除文件中的行首空白字符 [root@zfc ~]# cp /etc/profile /tmp [root@zfc ~]# sed -i 's/^[[:space:]]*//g' /tmp/profile [root@zfc ~]# cat /tmp/profile # /etc/profile # System wide environment and startup programs, for login setup # Functions and aliases go in /etc/bashrc # It's NOT a good idea to change this file unless you know what you # are doing. It's much better to create a custom.sh shell script in # /etc/profile.d/ to make custom changes to your environment, as this # will prevent the need for merging in future updates. pathmunge () { case ":${PATH}:" in case ":${PATH}:" in *:"$1":*) *:"$1":*) ;; ;; *) *) if [ "$2" = "after" ] ; then if [ "$2" = "after" ] ; then PATH=$PATH:$1 PATH=$PATH:$1 else else PATH=$1:$PATH PATH=$1:$PATH fi fi esac esac }

在vim中设置tab缩进为4个字符
:set tabstop=4
系统运维
2019-11-09 19:09:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
导读
MakeMKV,可以用蓝光光碟和DVD制作MKV,现在可以通过Ubuntu 18.04及更高版本中的Snap软件包轻松安装。
Snap是在大多数 Linux 桌面上运行的容器化软件包。 感谢Daniel Llewellyn,他制作了 MakeMKV Snap 软件包。 因此,可以通过Snappy Store或在终端中运行单个 命令 轻松地安装它。

在Ubuntu中安装MakeMKV snap:
1、)不知道为什么,但是在Ubuntu 18.04的Ubuntu软件中找不到makemkv。 但是,可以通过在终端中运行单个 命令 来安装它(通过Ctrl + Alt + T打开终端): snap install makemkv
2、) 还需要一个命令来连接到硬件观察接口: sudo snap connect makemkv:hardware-observe
(可选)由于任何原因,您可以通过在终端中运行命令来轻松删除MakeMKV snap软件包: snap remove makemkv
MakeMKV PPA:
对于那些喜欢通过本地Ubuntu .deb包安装它的人来说,还有一个 PPA存储库 ,它包含了所有当前Ubuntu版本的软件。
您可以简单地打开终端,运行3个命令,一个接一个地添加PPA和安装MakeMKV sudo add-apt-repository ppa:heyarje/makemkv-beta sudo apt-get update
sudo apt-get install makemkv-bin makemkv-oss
原文来自: https://www.linuxprobe.com/ubuntu-snap-makemkv.html
系统运维
2019-11-08 08:34:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
没有100%的安全,我们使用的工具可能会有后门,我们运行的基础服务可能会有漏洞, 更可能人为产生密码泄露和数据流失。所以我想到了以下几点仅供参考
未泄露前: 密码一定要密文并且加盐 设置规则限制管理员使用弱密码 多次登录失败需要验证码验证
泄露后: 固定带宽的企业关闭映射端口,申请更换ip
系统运维
2019-11-08 08:15:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
目前市面上常用的虚拟机技术主要有KVM、xen、vmware。
KVM是指基于Linux内核(Kernel-based)的虚拟机(Virtual Machine)。KVM最大的好处就在于它是与Linux内核集成的,所以速度很快。KVM的宿主操作系统必须是Linux,支持的客户机操作系统包括Linux、Windows、Solaris和BSD,运行在支持虚拟化扩展的x86和x86_64硬件架构上,这意味着KVM不能运行在老式CPU上,新CPU如果不支持虚拟化扩展也不能运行(如英特尔的Atom处理器)。
Xen是一个开放源代码虚拟机监视器,由剑桥大学开发。Xen的缺点是操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性),所以比较麻烦。使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。Linux的官方内核在较早之前已经去掉了对Xen的支持。
VMWare (Virtual Machine ware)是一个“虚拟PC”软件公司。它的产品可以使你在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。VMWare是真正“同时”运行,多个操作系统在主系统的平台上,就象标准Windows应用程序那样切换。而且每个操作系统你都可以进行虚拟的分区、配置而不影响真实硬盘的数据,你甚至可以通过网卡将几台虚拟机用网卡连接为一个局域网,极其方便。安装在VMware操作系统性能上比直接安装在硬盘上的系统低不少,因此,比较适合学习和测试。
KVM、Xen、VMWare的对比如下表所示。
表1 KVM、Xen、VMWare的对比
系统运维
2019-11-07 17:33:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
   学python安装什么软件?
  Python开发软件可根据其用途不同分为两种,一种是Python代码编辑器,一种是Python集成开发工具,两者的配合使用可以极大的提高Python开发人员的编程效率,以下是常用的几款Python代码编辑器和Python集成开发工具。
   一、Python代码编辑器
  1. Sublime Text
  Sublime Text是一款非常流行的代码编辑器,支持Python代码编辑,同时兼容所有平台,并且丰富的插件扩展了语法和编辑功能,迅捷小巧,具有良好的兼容性,很受编程人士的喜爱!
  2. Vim
  Vim和Vi是一种模型编辑器,它将文本查看从文本编辑中分离,VIM在原始VI之上做了诸多改进,包括可扩展模型和就地代码构建,VIMScripts可用于各种Python开发任务!
  3. Atom
  Atom被称为“21世纪可破解的文本编辑器”,可以兼容所有平台,拥有时尚的界面、文件系统浏览器和扩展插件市场,使用Electron构建,其运行时安装的扩展插件可支持Python语言!
  4. GNU Emacs
  GNU Emacs是一款终身免费且兼容任何平台的代码编辑器,使用强大的Lisp编程语言进行定制,并为Python开发提供各种定制脚本,是一款可扩展、可定制、自动记录、实时显示的编辑器,一直萦绕在UNIX周围。
  5. Visual Studio Code
  Visual Studio Code是一款兼容Linux、Mac OS X和Windows 平台的全功能代码编辑器,可扩展并且可以对几乎所有任务进行配置,对于Python的支持可以在Visual Studio Code中安装插件,只需快速点击按钮即可成功安装,且可自动识别Python安装和库。
   二、Python集成开发环境
  1. PyCharm
  PyCharm是唯一一款专门面向Python的全功能集成开发环境,同样拥有付费版和免费开源版,PyCharm不论是在Windows、 Mac OS X系统中,还是在Linux系统中都支持快速安装和使用。
  PyCharm直接支持Python开发环境,打开一个新的文件然后就可以开始编写代码,也可以在PyCharm中直接运行和调试Python程序,它还支持源码管理和项目,并且其拥有众多便利和支持社区,能够快速掌握学习使用!
  2. Eclipse + PyDev
  PyDev是Eclipse集成开发环境的一个插件,支持Python调试、代码补全和交互式Python控制台等,在Eclipse中安装PyDev非常便捷,只需从Eclipse中选择“Help”点击“Eclipse Marketplace”然后搜索PyDev,点击安装,必要的时候重启Eclipse即可,对于资深Eclipse开发者来说,PyDev可以很轻松上手!
  3. Visual Studio
  Visual Studio是一款全功能集成开发平台,提供了免费版和付费版,可以支持各种平台的开发,且附带了自己的扩展插件市场。在Visual Studio中可进行Python编程,并且支持Python智能感知、调试和其他工具,值得注意的是Visual Studio不支持Linux平台!
  4. Spyder
  Spyder是一款为了数据科学工作流做了优化的开源Python集成开发环境,它是附在Anaconda软件包管理器发行版中的,Spyder拥有大部分集成开发环境该具备的功能,如强大语法高亮功能的代码编辑器、Python代码补全以及集成文件浏览器,其还具有其他Python编辑环境中所不具备的变量浏览器功能,十分适合使用Python的数据科学家们。
  5. Thonny
  Thonny是针对新手的一款集成开发环境,适用于全部主流平台,默认情况下,Thonny会和自带捆绑的Python版本一起安装,十分方便新手使用!
  以上就是学python安装什么软件的详细内容啦,希望能帮助到有需要的人哦 参考文章
系统运维
2019-11-07 17:06:00
「深度学习福利」大神带你进阶工程师,立即查看>>> uid = nobody gid = nobody use chroot = no max connections = 4 transfer logging = true log format = %h %o %f %l %b log file = /data/logs/rsyncd.log pid file = /var/run/rsyncd.pid #hosts allow = trusted.hosts slp refresh = 300 [backup] path = /mnt/ ignore errors read only = no write only = yes auth users = user secrets file = /etc/rsyncd.pwd 同步命令(以源目标为准,支持删除文件) rsync -avP --delete /mnt/ backup@1.1.1.1::backup
系统运维
2019-11-07 16:08:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
在你的印象中,是不是root用户就可以为所欲为呢?随便一个rm -rf *,一波骚操作走人?可能没那么容易。
来啊,删我啊!
先来个示例,创建一个文本文件test.txt $ touch test.txt
将其权限位修改为777 $ chmod 777 test.txt $ ls -al test.txt -rwxrwxrwx 1 root root 13 Aug 31 15:03 test.txt
然后做一点暂时不告诉你的小操作。最后尝试删除: $ rm test.txt rm: cannot remove ‘test.txt’: Operation not permitted
咦?root用户,777权限位,为什么还删不掉?
i属性
那么我在中间做了一个什么操作呢?实际上只是执行了一条 命令 : chattr +i test.txt
就导致了前面我们看到的效果。 Linux 中的文件除了我们能看到的内容外,还有一些文件属性,其中,i属性用于防止文件被修改,重命名,删除。在执行前面的 命令 之后,我们可以通过下面的方式查看其属性: $ lsattr test.txt ----i--------e-- test.txt
如果想要移除该属性,只需要执行; chattr -i test.txt
这个时候就可以删除啦。当然了,仅有超级用户可以对这个属性进行修改。所以说,root用户为所欲为还是可以的,不过得加点小操作。
https://www.csdn.net/article/a/2019-11-04/15950345
http://www.51cto.com/it/news/2019/1104/16234.html
https://article.pchome.net/content-2103123.html
文件属性
实际上除了前面说的i属性,还有其他属性,包括:
a 只能以追加的方式打开文件写(适用于日志文件)
A 不更新文件的atime,即访问时间
d dump命令运行时,不进行备份操作
S 文件有更新时便写磁盘,等同于对文件使用sync
还有其他属性就不一一列举了,有兴趣的可以参考man手册。
总结
所以如果你发现有的文件权限位是777,但是用root用户也没法删除,不如使用lsattr看看是不是有i属性。
系统运维
2019-11-07 15:09:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
7.2.3 Appscan
7.2.4 Netsparker
Appscan
常用参Rational AppScan(简称 AppScan)其实是一个产品家族,包括众多的应用安全扫描产品,从开发阶段的源代码扫描的 AppScan source edition,到针对 Web 应用进行快速扫描的 AppScan standard edition,以及进行安全管理和汇总整合的 AppScan enterprise Edition 等。我们经常说的 AppScan 就是指的桌面版本的 AppScan,即 AppScan standard edition。其安装在 Windows 操作系统上,可以对网站等 Web 应用进行自动化的应用安全扫描和测试。
下载安装
下载:
链接:https://pan.baidu.com/s/1nbsVGy1n2DzvWZVlNE4dGA
提取码: undt
https://www.ibm.com/developerworks/cn/rational/r-cn-appscanlargewebsite2/index.html
https://www.jb51.net/softs/579188.html
Netsparker
下载

https://pan.baidu.com/s/1UVEeg1xsUnK3mgNiAwM5og 提取码:2kvu

系统运维
2019-11-07 14:26:05
「深度学习福利」大神带你进阶工程师,立即查看>>> yum install ceph ceph-deploy ssh-copy-id root@c2{5,6,7} ceph-deploy new c25 c26 c27 ceph-deploy --ceph-conf ceph.conf --overwrite-conf mon create c25 ceph-deploy gatherkeys c25 ceph-deploy --ceph-conf=/etc/ceph/ceph.conf --overwrite-conf mds create c25:c25 ceph-deploy --ceph-conf=/etc/ceph/ceph.conf disk zap c27:/dev/vdb ceph-deploy --ceph-conf=/etc/ceph/ceph.conf --overwrite-conf osd prepare c27:/dev/vdb ceph-deploy --ceph-conf=/etc/ceph/ceph.conf --overwrite-conf osd activate c27:/dev/vdb1:/dev/vdb2 ceph osd pool create cephfs_data 64 ceph osd pool create cephfs_metadata 64 ceph fs new cephfs cephfs_metadata cephfs_data
系统运维
2019-11-07 14:25:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
chroot_local_use r #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的) chroot_list_enable #是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用) chroot_list_file=/etc/vsftpd/chroot_list #是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个 全局性 的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“ 微调 ”,即,我们总是需要一种“ 例外机制 ",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),"例外"“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!
对于chroot_local_user与chroot_list_enable的组合效果,可以参考下表:
chroot_local_user=YES chroot_local_user=NO
chroot_list_enable=YES
chroot_list_enable=NO
1.所有用户都被限制在其主目录下 2.使用chroot_list_file指定的用户列表,这些用户作为“例外”,不受限制
1.所有用户都被限制在其主目录下 2.不使用chroot_list_file指定的用户列表,没有任何“例外”用户
1.所有用户都不被限制其主目录下 2.使用chroot_list_file指定的用户列表,这些用户作为“例外”,受到限制
1.所有用户都不被限制其主目录下 2.不使用chroot_list_file指定的用户列表,没有任何“例外”用户

让我们举个例子:

假设有ftp1, ftp2两个ftp用户, 计划让ftp1用户锁定在主目录下,不允许切换到其他目录, 但是允许ftp2用户自由切换目录,则可以分如下两种方式实现:
方式一:
令:
chroot_local_user=YES
chroot_list_enable=YES
/etc/vsftpd/chroot_list名单列表为:
ftp2

解释:chroot_local_user=YES将所有用户限定在主目录内,chroot_list_enable=YES表示要启用chroot_list_file, 因为chroot_local_user=YES,即全体用户都被“限定在主目录内”,所以总是作为“例外列表”的chroot_list_file这时列出的是那些“不会被限制在主目录下”的用户。

方式二:
令:
chroot_local_user=NO
chroot_list_enable=YES
/etc/vsftpd/chroot_list名单列表为:
ftp1
解释:chroot_local_user=NO则所有用户不被限定在主目录内,chroot_list_enable=YES表示要启用chroot_list_file, 因为chroot_local_user=NO,即全体用户都“不被限定在主目录内”,所以总是作为“例外列表”的chroot_list_file这时列出的是那些“会被限制在主目录下”的用户。

其他情况:

对于chroot_local_user和chroot_list_enable的组合还有这样两种情况:
chroot_local_user=YES
chroot_list_enable=NO

chroot_local_user=NO
chroot_list_enable=NO
当chroot_list_enable=NO时,就不再启用chroot_list_file,此时就是单纯的把全部用户限定或不限定在主目录下了!

补充: 关于chroot_local_user的设置,通常我们倾向于:全局禁止跳出主目录,使用chroot_list添加例外!即:使用Case 1的设置! 匿名用户默认的root是/var/ftp
系统运维
2019-11-07 13:16:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
vsftpd作为一个主打安全的FTP服务器,有很多的选项设置。下面介绍了vsftpd的配置文件列表,而所有的配置都是基于vsftpd.conf这个配置文件的。本文将提供完整的vsftpd.conf的中文说明。学习本文的内容将有助于你初步了解vsftpd的配置文件,但针对具体情况还需要制定具体的配置方法。
vsftpd的配置文件
/etc/vsftpd/vsftpd.conf 主配置文件
/usr/sbin/vsftpd Vsftpd的主程序
/etc/rc.d/init.d/vsftpd 启动脚本
/etc/pam.d/vsftpd PAM认证文件(此文件中file=/etc/vsftpd/ftpusers字段,指明阻止访问的用户来自/etc/vsftpd/ftpusers文件中的用户)
/etc/vsftpd/ftpusers 禁止使用vsftpd的用户列表文件。记录不允许访问FTP服务器的用户名单,管理员可以把一些对系统安全有威胁的用户账号记录在此文件中,以免用户从FTP登录后获得大于上传下载操作的权利,而对系统造成损坏。(注意:linux-4中此文件在/etc/目录下)
/etc/vsftpd/user_list 禁止或允许使用vsftpd的用户列表文件。这个文件中指定的用户缺省情况(即在/etc/vsftpd/vsftpd.conf中设置userlist_deny=YES)下也不能访问FTP服务器,在设置了userlist_deny=NO时,仅允许user_list中指定的用户访问FTP服务器。(注意:linux-4中此文件在/etc/目录下)
/var/ftp 匿名用户主目录;本地用户主目录为:/home/用户主目录,即登录后进入自己家目录
/var/ftp/pub
/etc/logrotate.d/vsftpd.log
匿名用户的下载目录,此目录需赋权根chmod 1777 pub(1为特殊权限,使上载后无法删除)
Vsftpd的日志文件

vsftpd的主配置文件/etc/vsftpd/vsftpd.conf说明(修改前先备份)
和Linux系统中的大多数配置文件一样,vsftpd的配置文件中以#开始注释。 # 是否允许匿名登录FTP服务器,默认设置为YES允许 # 用户可使用用户名ftp或anonymous进行ftp登录,口令为用户的E-mail地址。 # 如不允许匿名访问则设置为NO anonymous_enable=YES # 是否允许本地用户(即linux系统中的用户帐号)登录FTP服务器,默认设置为YES允许 # 本地用户登录后会进入用户主目录,而匿名用户登录后进入匿名用户的下载目录/var/ftp/pub # 若只允许匿名用户访问,前面加上#注释掉即可阻止本地用户访问FTP服务器 local_enable=YES # 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许 write_enable=YES # 掩码,本地用户默认掩码为077 # 你可以设置本地用户的文件掩码为缺省022,也可根据个人喜好将其设置为其他值 #local_umask=022 # 是否允许匿名用户上传文件,须将全局的write_enable=YES。默认为YES #anon_upload_enable=YES # 是否允许匿名用户创建新文件夹 #anon_mkdir_write_enable=YES # 是否激活目录欢迎信息功能 # 当用户用CMD模式首次访问服务器上某个目录时,FTP服务器将显示欢迎信息 # 默认情况下,欢迎信息是通过该目录下的.message文件获得的 # 此文件保存自定义的欢迎信息,由用户自己建立 #dirmessage_enable=YES # 是否让系统自动维护上传和下载的日志文件 # 默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file选项对其进行设定 # 默认值为NO xferlog_enable=YES # Make sure PORT transfer connections originate from port 20 (ftp-data). # 是否设定FTP服务器将启用FTP数据端口的连接请求 # ftp-data数据传输,21为连接控制端口 connect_from_port_20=YES # 设定是否允许改变上传文件的属主,与下面一个设定项配合使用 # 注意,不推荐使用root用户上传文件 #chown_uploads=YES # 设置想要改变的上传文件的属主,如果需要,则输入一个系统用户名 # 可以把上传的文件都改成root属主。whoever:任何人 #chown_username=whoever # 设定系统维护记录FTP服务器上传和下载情况的日志文件 # /var/log/vsftpd.log是默认的,也可以另设其它 #xferlog_file=/var/log/vsftpd.log # 是否以标准xferlog的格式书写传输日志文件 # 默认为/var/log/xferlog,也可以通过xferlog_file选项对其进行设定 # 默认值为NO #xferlog_std_format=YES # 以下是附加配置,添加相应的选项将启用相应的设置 # 是否生成两个相似的日志文件 # 默认在/var/log/xferlog和/var/log/vsftpd.log目录下 # 前者是wu_ftpd类型的传输日志,可以利用标准日志工具对其进行分析;后者是vsftpd类型的日志 #dual_log_enable # 是否将原本输出到/var/log/vsftpd.log中的日志,输出到系统日志 #syslog_enable # 设置数据传输中断间隔时间,此语句表示空闲的用户会话中断时间为600秒 # 即当数据传输结束后,用户连接FTP服务器的时间不应超过600秒。可以根据实际情况对该值进行修改 #idle_session_timeout=600 # 设置数据连接超时时间,该语句表示数据连接超时时间为120秒,可根据实际情况对其个修改 #data_connection_timeout=120 # 运行vsftpd需要的非特权系统用户,缺省是nobody #nopriv_user=ftpsecure # 是否识别异步ABOR请求。 # 如果FTP client会下达“async ABOR”这个指令时,这个设定才需要启用 # 而一般此设定并不安全,所以通常将其取消 #async_abor_enable=YES # 是否以ASCII方式传输数据。默认情况下,服务器会忽略ASCII方式的请求。 # 启用此选项将允许服务器以ASCII方式传输数据 # 不过,这样可能会导致由"SIZE /big/file"方式引起的DoS攻击 #ascii_upload_enable=YES #ascii_download_enable=YES # 登录FTP服务器时显示的欢迎信息 # 如有需要,可在更改目录欢迎信息的目录下创建名为.message的文件,并写入欢迎信息保存后 #ftpd_banner=Welcome to blah FTP service. # 黑名单设置。如果很讨厌某些email address,就可以使用此设定来取消他的登录权限 # 可以将某些特殊的email address抵挡住。 #deny_email_enable=YES # 当上面的deny_email_enable=YES时,可以利用这个设定项来规定哪些邮件地址不可登录vsftpd服务器 # 此文件需用户自己创建,一行一个email address即可 #banned_email_file=/etc/vsftpd/banned_emails # 用户登录FTP服务器后是否具有访问自己目录以外的其他文件的权限 # 设置为YES时,用户被锁定在自己的home目录中,vsftpd将在下面chroot_list_file选项值的位置寻找chroot_list文件 # 必须与下面的设置项配合 #chroot_list_enable=YES # 被列入此文件的用户,在登录后将不能切换到自己目录以外的其他目录 # 从而有利于FTP服务器的安全管理和隐私保护。此文件需自己建立 #chroot_list_file=/etc/vsftpd/chroot_list # 是否允许递归查询。默认为关闭,以防止远程用户造成过量的I/O #ls_recurse_enable=YES # 是否允许监听。 # 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求 listen=YES # 设定是否支持IPV6。如要同时监听IPv4和IPv6端口, # 则必须运行两套vsftpd,采用两套配置文件 # 同时确保其中有一个监听选项是被注释掉的 #listen_ipv6=YES # 设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件 # 此文件中file=/etc/vsftpd/ftpusers字段,说明了PAM模块能抵挡的帐号内容来自文件/etc/vsftpd/ftpusers中 #pam_service_name=vsftpd # 是否允许ftpusers文件中的用户登录FTP服务器,默认为NO # 若此项设为YES,则user_list文件中的用户允许登录FTP服务器 # 而如果同时设置了userlist_deny=YES,则user_list文件中的用户将不允许登录FTP服务器,甚至连输入密码提示信息都没有 #userlist_enable=YES/NO # 设置是否阻扯user_list文件中的用户登录FTP服务器,默认为YES #userlist_deny=YES/NO # 是否使用tcp_wrappers作为主机访问控制方式。 # tcp_wrappers可以实现linux系统中网络服务的基于主机地址的访问控制 # 在/etc目录中的hosts.allow和hosts.deny两个文件用于设置tcp_wrappers的访问控制 # 前者设置允许访问记录,后者设置拒绝访问记录。 # 如想限制某些主机对FTP服务器192.168.57.2的匿名访问,编缉/etc/hosts.allow文件,如在下面增加两行命令: # vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY # 表明限制IP为192.168.57.1/192.168.57.9主机访问IP为192.168.57.2的FTP服务器 # 此时FTP服务器虽可以PING通,但无法连接 tcp_wrappers=YES
下面的内容将对一些限制和权限控制的选项进行更进一步的说明。

除了上述那些基本设定,我们还可以在vsftpd.conf文件中添加更多的安全选项。其中几个常用的如下:
限制最大连接数和传输速率
在FTP服务器的管理中,无论对本地用户还是匿名用户,对于FTP服务器资源的使用都需要进行控控制,避免由于负担过大造成FTP服务器运行异常,可以添加以下配置项对FTP客户机使用FTP服务器资源进行控制: max_client设置项 用于设置FTP服务器所允许的最大客户端连接数,值为0时表示不限制。例如max_client=100表示FTP服务器的所有客户端最大连接数不超过100个。 max_per_ip设置项 用于设置对于同一IP地址允许的最大客户端连接数,值为0时表示不限制。例如max_per_ip=5表示同一IP地址的FTP客户机与FTP服务器建立的最大连接数不超过5个。 local_max_rate设置项 用于设置本地用户的最大传输速率,单位为B/s,值为0时表示不限制。例如local_max_rate=500000表示FTP服务器的本地用户最大传输速率设置为500KB/s. anon_max_rate设置项 用于设置匿名用户的最大传输速率,单位为B/s,值为0表示不限制。例如ano_max_rate=200000,表示FTP服务器的匿名用户最大传输速率设置为200KB/s.
指定用户的权限设置
vsftpd.user_list文件需要与vsftpd.conf文件中的配置项结合来实现对于vsftpd.user_list文件中指定用户账号的访问控制:
(1)设置禁止登录的用户账号
当vsftpd.conf配置文件中包括以下设置时,vsftpd.user_list文件中的用户账号被禁止进行FTP登录: userlist_enable=YES userlist_deny=YES
userlist_enable设置项设置使用vsftpd.user_list文件,userlist_deny设置为YES表示vsftpd.user_list文件用于设置禁止的用户账号。
(2)设置只允许登录的用户账号
当vsftpd.conf配置文件中包括以下设置时,只有vsftpd.user_list文件中的用户账号能够进行FTP登录: userlist_enable=YES userlist_deny=NO
userlist_enable设置项设置使用vsftpd.user_list文件,userlist _deny设置为NO表示vsftpd.usre_list文件用于设置只允许登录的用户账号,文件中未包括的用户账号被禁止FTP登录。
userlist_deny和userlist_enable选项限制用户登录FTP服务器(使用userlist_deny选项和user_list文件一起能有效阻止root,apache,www等系统用户登录FTP服务器,从而保证FTP服务器的分级安全性)。以下是两个选项的具体表现形式和两种搭配使用方式的效果:
Userlist_enable=YES Ftpusers中用户允许访问
User_list中用户允许访问
Userlist_enable=NO Ftpusers中用户禁止访问
User_list中用户允许访问
Userlist_deny=YES Ftpusers中用户禁止访问(登录时可以看到密码输入提示,但仍无法访问)
user_list 中用户禁止访问
Userlist_deny=NO ftpusers中用户禁止访问
user_list中用户允许访问
Userlist_enable=YES 并且
Userlist_deny=YES
Userlist_enable=YES 并且
Userlist_deny=NO
Ftpusers中用户禁止访问
User_list中用户禁止访问(登录时不会出现密码提示,直接被服务器拒绝)
Ftpusers中用户禁止访问
User_list中用户允许访问

修改默认端口
默认FTP服务器端口号是21,出于安全目的,有时需修改默认端口号,修改/etc/vsftpd/vsftpd.conf,添加语句(例): listen_port=4449
语句指定了修改后FTP服务器的端口号,应尽量大于4000。修改后访问 #ftp 192.168.57.2 4449
注意这里需加上正确的端口号了,否则不能正常连接。
设置用户组
有关FTP用户和用户组的重要性,我们在之前 介绍vsftpd的时候 便已经提到过。这里主要是简单的说明用户组的技术实现,至于具体如何应用,还是具体需求具体对待。 #mkdir -p /home/try 递归创建新目录 #groupadd try 新建组 #useradd -g try -d /home/try try1 新建用户try1并指定家目录和属组 #useradd -g try -d /home/try try2 新建用户try2并指定家目录和属组 #useradd -g try -d /home/try try3 新建用户try3并指定家目录和属组 #passwd try1 为新用户设密码 #passwd try2 为新用户设密码 #passwd try3 为新用户设密码 #chown try1 /home/try 设置目录属主为用户try1 #chown .try /home/try 设置目录属组为组try #chmod 750 /home/try 设置目录访问权限try1为读,写,执行;try2,try3为读,执行
由于本地用户登录FTP服务器后进入自己主目录,而try1,try2 try3对主目录/home/try分配的权限不同,所以通过FTP访问的权限也不同,try1访问权限为:上传,下载,建目录;try2,try3访问权限为下载,浏览,不能建目录和上传。实现了群组中用户不同访问级别,加强了对FTP服务器的分级安全管理。
连接超时
配置空闲的用户会话的中断时间:如下配置将在用户会话空闲5分钟后被中断,以释放服务器的资源 Idle_session_timeout=300
配置空闲的数据连接的中断时间:如下配置将在数据空闲连接1分钟后被中断,同样也是为了释放服务器的资源 Data_connection_timeout=60
配置客户端空闲时的自动中断和激活连接的时间:如下配置将使客户端空闲1分钟后自动中断连接,并在30秒后自动激活连接 Accept_timeout=60 Connect_timeout=30
接下来,我们将对vsftpd的日志进行介绍。

常见的vsftpd日志解决方案
在vsftpd.conf中有如下内容定义了日志的记录方式: # 表明FTP服务器记录上传下载的情况 xferlog_enable=YES # 表明将记录的上传下载情况写在xferlog_file所指定的文件中,即xferlog_file选项指定的文件中 xferlog_std_format=YES xferlog_file=/var/log/xferlog # 启用双份日志。在用xferlog文件记录服务器上传下载情况的同时, # vsftpd_log_file所指定的文件,即/var/log/vsftpd.log也将用来记录服务器的传输情况 dual_log_enable=YES vsftpd_log_file=/var/log/vsftpd.log
vsftpd的两个日志文件分析如下:
/var/log/xferlog
记录内容举例 Thu Sep 6 09:07:48 2007 7 192.168.57.1 4323279 /home/student/phpMyadmin-2.11.0-all-languages.tar.gz b -i r student ftp 0 * c
/var/log/vsftpd.log
记录内容举例 Tue Sep 11 14:59:03 2007 [pid 3460] CONNECT: Client "127.0.0.1" Tue Sep 11 14:59:24 2007 [pid 3459] [ftp] OK LOGIN;Client "127.0.0.1" ,anon password ”?"
/var/log/xferlog日志文件中数据的分析和参数说明
记录数据 参数名称 参数说明
Thu Sep 6 09:07:48 2007 当前时间 当前服务器本地时间,格式为:
DDD MMM dd hh:mm:ss YYY
7 传输时间 传送文件所用时间单位为秒
192.168.57.1 远程主机名称/IP 远程主机名称/IP
4323279 文件大小 传送文件的大小,单位为byte
/home/student/phpMyadmin-
2.11.0-all-languages.tar.gz
文件名 传输文件名,包括路径
b
传输类型
传输方式的类型,包括两种:
a以ASCII传输 b以二进制文件传输

特殊处理标志
特殊处理的标志位,可能的值包括:
_ 不做任何特殊处理
C 文件是压缩格式
U 文件是非压缩格式
T 文件是tar格式
i
传输方向
文件传输方向,包括两种:
o 从FTP服务器向客户端传输
i 从客户端向FTP服务器传输
r 访问模式 用户访问模式,包括:
a 匿名用户
g 来宾用户
r 真实用户,即系统中的用户
student 用户名 用户名称
ftp 服务名
所使用的服务名称,一般为FTP
0 认证方式
认证方式,包括:
0 无
1 RFC931认证
*
c
认证用户id
完成状态
认证用户的id,如果使用*,则表示无法获得该id
传输的状态:
c 表示传输已完成
i 表示传输示完成

最后,介绍常见的FTP命令,以及FTP数字代码的意义。


常见FTP命令及其功能
FTP命令
功能
FTP命令
功能
ls 显示服务器上的目录
ls [remote-dir][local-file]
显示远程目录remote-dir,并存入本地文件local-file
get remote-file [local-file] 从服务器下载指定文件到客户端
mget remote-files
下载多个远程文件(mget命令允许用通配符下载多个文件)
put local-file [remote-file] 从客户端上传指定文件到服务器
mput local-file
将多个文件上传至远程主机(mput命令允许用通配符上传多个文件)
open 连接FTP服务器
mdelete [remote-file]
删除远程主机文件
close 中断与远程服务器的ftp会话(与open对应)
mkdir dir-name
在远程主机中创建目录
open host[port] 建立指定的ftp服务器连接,可指定连接端口
newer file-name
如果远程主机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件
cd directory 改变服务器的工作目录
rename [from][to]
更改远程主机的文件名
lcd directory 在客户端上(本地)改变工作目录
pwd
显示远程主机的当前工作目录
bye 退出FTP命令状态
quit
同bye,退出ftp会话
ascii 设置文件传输方式为ASCII模式
reget remote-file [local-file]
类似于get,但若local-file存在,则从上次传输中断处续传
binary 设置文件传输方式为二进制模式
rhelp [cmd-name]
请求获得远程主机的帮助
![cmd [args]] 在本地主机中交互shell后退回到ftp环境,如:!ls *.zip
rstatus [file-name]
若未指定文件名,则显示远程主机的状态,否则显示文件状态
accout [password] 提供登录远程系统成功后访问系统资源所需的密码
hash
每传输1024字节,显示一个hash符号(#)
append local-file [remote-file] 将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名
restart marker
从指定的标志marker处,重新开始get或put,如restart 130
bye 退出ftp会话过程
rmdir dir-name
删除远程主机目录
case 在使用mget命令时,将远程主机文件名中的大写转为小写字母
size file-name
显示远程主机文件大小,如:
size idle 7200
cd remote-dir 进入远程主机目录
status
显示当前ftp状态

cdup
delete remote-file dir [remote-dir][local-file]
进入远程主机目录的父目录
删除远程主机文件
显示远程主机目录,并将结果存入本地文件

system
user user-name [password][account]
help [cmd]

显示远程主机的操作系统
向远程主机表明自己的身份,需要密码时,必须输入密码,如:user anonymous my @email
显示ftp内部命令cmd的帮助信息,如help get

FTP数字代码的意义 110 重新启动标记应答。 120 服务在多久时间内ready。 125 数据链路端口开启,准备传送。 150 文件状态正常,开启数据连接端口。 200 命令执行成功。 202 命令执行失败。 211 系统状态或是系统求助响应。 212 目录的状态。 213 文件的状态。 214 求助的讯息。 215 名称系统类型。 220 新的联机服务ready。 221 服务的控制连接端口关闭,可以注销。 225 数据连结开启,但无传输动作。 226 关闭数据连接端口,请求的文件操作成功。 227 进入passive mode。 230 使用者登入。 250 请求的文件操作完成。 257 显示目前的路径名称。 331 用户名称正确,需要密码。 332 登入时需要账号信息。 350 请求的操作需要进一部的命令。 421 无法提供服务,关闭控制连结。 425 无法开启数据链路。 426 关闭联机,终止传输。 450 请求的操作未执行。 451 命令终止:有本地的错误。 452 未执行命令:磁盘空间不足。 500 格式错误,无法识别命令。 501 参数语法错误。 502 命令执行失败。 503 命令顺序错误。 504 命令所接的参数不正确。 530 未登入。 532 储存文件需要账户登入。 550 未执行请求的操作。 551 请求的命令终止,类型未知。 552 请求的文件终止,储存位溢出。 553 未执行请求的的命令,名称不正确。




系统运维
2019-11-07 11:55:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
问题一:ftpusers和user_list两个文件各自的用途是什么?有何关系?
首先请明确一点:ftpusers不受任何配制项的影响,它总是有效,它是一个黑名单!
该文件存放的是一个禁止访问FTP的用户列表,通常为了安全考虑,管理员不希望一些拥有过大权限的帐号(比如root)登入FTP,以免通过该帐号从FTP上传或下载一些危险位置上的文件从而对系统造成损坏。
而user_list则是和vsftpd.conf中的userlist_enable和userlist_deny两个配置项紧密相关的,它可以有效,也可以无效,有效时它可以是一个黑名单,也可以是一个白名单!那么是什么的设置决定了它的作用呢?这就是问题二要解释的。
所以简单总结就是:ftpusers和user_list没有任何关系,ftpusers文件总是生效,user_list则取决于userlist_enable和userlist_deny两项配置。
问题二:vsftpd.conf中的userlist_enable和userlist_deny两个配置项各自起什么作用,两者如何搭配使用?
为了说明这个问题,我们来建立两个测试用户:
tom: 在user_list中
jim:不在user_list中
然后我们分别给两个配置项取不同的值,分4种Case进行测试:
Case 1: userlist_enable=YES, userlist_deny=YES
tom: 拒绝登入
jim: 允许登录
Case 2: userlist_enable=YES, userlist_deny=NO
tom: 允许登录
jim:拒绝登录(如user_list文件开头的注释所述,甚至不会提示输入密码,即无登入提示框,直接拒绝连接)
Case 3: userlist_enable=NO,userlist_deny=NO
tom: 允许登录
jim: 允许登录
Case 4: userlist_enable=NO,userlist_deny=YES
tom: 允许登录
jim: 允许登录
综上实验得出以下结论:
userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户)和出现在user_list文件中的用户以及不在在user_list文件中的用户这三类用户集合进行的设置。
当且仅当userlist_enable=YES时:userlist_deny项的配置才有效,user_list文件才会被使用;当其为NO时,无论userlist_deny项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP
当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入;
当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入);另外需要特别提醒的是:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous

系统运维
2019-11-07 11:50:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
谷歌 ProjectZero 研究小组一名成员周四晚表示,攻击者正在利用谷歌 Android 移动操作系统中的零日漏洞,使他们完全控制至少 18 种不同手机,包括 4 种不同型号的谷歌 Pixel 手机。
谷歌 ProjectZero 研究小组一名成员周四晚表示,攻击者正在利用谷歌 Android 移动操作系统中的零日漏洞,使他们完全控制至少 18 种不同手机,包括 4 种不同型号的谷歌 Pixel 手机。
Maddie Stone 在帖子中说,有证据表明漏洞利用者 NSO Group 或其客户之一正在积极利用该漏洞。漏洞利用几乎不需要定制即可完全扎根易受攻击的手机。可以通过两种方式利用此漏洞:
(1)当目标安装不受信任的应用程序时,
(2)通过将此漏洞与针对chrome浏览器用于呈现内容代码的漏洞攻击结合使用。
Maddie Stone 表示,该漏洞是一个本地特权升级漏洞,它可以完全破坏易受攻击的设备,受此漏洞影响的设备如下:
Pixel 1
Pixel 1 XL
Pixel 2
Pixel 2 XL
华为 P20
红米5A
红米 Note 5
小米A1
Oppo A3
Moto Z3
Oreo LG phones
三星 S7
三星 S8
三星 S9
谷歌 Android 团队表示,谷歌 10 月 Android 安全更新将修补此漏洞,该更新可能会在未来几天内发布给 Pixel 系列手机用户。修补其他设备的时间表尚不清楚。Pixel 3 和 Pixel 3a 设备不受影响。 本文地址: https://www.linuxprobe.com/google-android-bug.html
系统运维
2019-11-07 09:19:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
导读
前面文中已经介绍了docker的安装和容器的创建等,但是创建出来的容器只能通过宿主机进行登录,有时候还是希望直接通过SSH 登录到docker容器中进行一些修改,其实非常简单,只需要将容器中ssh端口映射到宿主机,然后在容器中安装openssh 服务即可。
创建容器时指定映射的端口 docker run --name test -dit -p 8022:22 2c886f766286 /bin/bash
另外在宿主机上也是可以看到对应的端口是否被docker容器监听了 netstat -tunlp tcp6 0 0 :::8022 :::* LISTEN 24209/docker-proxy
登录容器中,修改root密码,安装openssh服务 docker exec -ti test /bin/bash [root@84641e8d0f74 /]#passwd #修改容器中 centos 系统ROOT账户的密码 [root@84641e8d0f74 /]#yum -y install openssh* #安装openssh服务 [root@84641e8d0f74 /]#service sshd start
宿主机添加端口放行 iptables -A INPUT -p tcp --dport 8022 -j ACCEPT service iptables save
远程登录测试一下,登录成功!
为了方便以后使用,可以将这个开启了ssh登录的容器保存为镜像 docker commit 84641e8d0f74 centos_6.6_ssh #容器ID 创建的镜像名 docker images 可以看到该镜像已经创建成功,下次需要新建容器时可直接使用该镜像 原文来自: https://www.linuxprobe.com/docker-ssh.html
系统运维
2019-11-07 09:17:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
进入redis目录下
#cd /env/redis/src
执行客户端命令: [root@app src]# redis-cli
清除数据 127.0.0.1:6379> flushall
OK
(0.94s)
即可完成
系统运维
2019-11-08 13:03:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
文档 http://doc.redisfans.com/key/scan.html
由于每个Redis实例是使用单线程处理所有请求的,故keys命令和其他命令都是在同一个队列排队等待执行的,如果keys命令执行时间长(数量多),则会阻塞其他命令的执行,导致性能问题。
scan命令是在2.8及之后版本提供的,每次scan操作返回匹配的key的一个子集,这样每个scan请求的操作时间很短,多次scan请求之间可以执行其他命令,故减少对其他命令执行的阻塞,直到最后一个scan请求发现没有数据可返回了,则操作完成。由于scan命令需要执行多次,即相当于执行了多个命令,存在多次命令请求和响应周期,故整体执行时间可能要比keys命令长。
命令解释:scan 游标 MATCH <返回和给定模式相匹配的元素> count 每次迭代所返回的元素数量
SCAN命令返回的是一个游标,从0开始遍历,到0结束遍历。
通过scan中的MATCH 参数,可以让命令只返回和给定模式相匹配的元素,实现模糊查询的效果
127.0.0.1:6379> scan 0 match HBY* count 1000
1) "4065"
2) 1) "HBY_QUEUE_1211"
2) "HBY_QUEUE_1218"
3) "HBY_QUEUE_1208"
4) "HBY_QUEUE_1207"
5) "HBY_QUEUE_1205"
6) "HBY_QUEUE_1212"
7) "HBY_QUEUE_1214"
8) "HBY_QUEUE_1210"
9) "HBY_QUEUE_1216"
127.0.0.1:6379> scan 4065 match HBY* count 1000
1) "0"
2) 1) "HBY_QUEUE_1217"
2) "HBY_QUEUE_1209"
3) "HBY_QUEUE_1206"
4) "HBY_QUEUE_1215"
5) "HBY_QUEUE_1213"
如果定义的返回元素数量大于总的keys数量,那一下就可以match到了
127.0.0.1:6379> scan 0 match HBY* count 2000
1) "0"
2) 1) "HBY_QUEUE_1211"
2) "HBY_QUEUE_1218"
3) "HBY_QUEUE_1208"
4) "HBY_QUEUE_1207"
5) "HBY_QUEUE_1212"
6) "HBY_QUEUE_1214"
7) "HBY_QUEUE_1210"
8) "HBY_QUEUE_1216"
9) "HBY_QUEUE_1217"
10) "HBY_QUEUE_1209"
11) "HBY_QUEUE_1206"
12) "HBY_QUEUE_1215"
13) "HBY_QUEUE_1213"
注意:SCAN命令不能保证每次返回的值都是有序的,另外同一个key有可能返回多次,不做区分,需要应用程序去处理。
系统运维
2019-11-08 10:51:00
「深度学习福利」大神带你进阶工程师,立即查看>>>

参考资料: http://www.cnblogs.com/kevingrace/p/6479813.html
我想实现开发环境的代码一旦被push(这里可能也可以是其他请求,比如合并)到gitlab,就会触发jenkins自动构建这个动作。

这种hooks似乎不能针对分支,只要所有分支由变化都可以触发

利用gitlab的webhooks,只需要在jenkins安装gitlab hook plugin,gitlab plugin
安装gitlab plugin后
项目配置里的构建触发器会出现Build when a change is pushed to GitLab. GitLab webhook URL就算是安装成功了
这个就是gitlab回调的地址
gitlab的配置

主要勾选push events这个
以上网上随便找都有教程,坑来了!!!
1.Hook execution failed: URL is blocked Requests to localhost are not allowed
不允许本地请求,这个用管理员账号开启允许请求本地
我的环境是jenkins和gitlab跑再同一台机器上
2.还需要给匿名的用户给任务创建的权限
否则403 anonymous is missing the Job/Build permission




系统运维
2019-11-08 10:47:00
「深度学习福利」大神带你进阶工程师,立即查看>>>

每分钟访问量
每小时访问量
过去1小时状态码为xxx的请求统计
每天请求时间超过0.5秒统计(upstream_response_time)
每天请求时间超过3秒统计(request_time)
每小时IP统计
每天IP统计
每小时请求地址统计
每天请求地址统计
每小时状态码统计
每xx日志量统计
每xx独立IP统计
每天状态码统计
系统运维
2019-11-08 10:08:02
「深度学习福利」大神带你进阶工程师,立即查看>>>
导读
日志的关键性就不用多说了,对于网站的日志来说,如果网站访问量较大,每天产生的日志也是非常庞大的,nginx默认都是将日志写入到指定的日志文件中,如果日志文件变得非常大,那么自然的写入日志就较慢,如果我们需要分析日志,对于几百兆或者几G的文件,分析起来也很不方便,这里我采用的是系统自带日志轮询logrotate 对nginx 日志进行割切。
logrotate配置
logrotate 的主配置文件在/etc/logrotate.conf 主配置文件无需进行调整配置,保持默认即可。
如果使用了一键安装包配置的环境,可能在/etc/logrotate.d 下已经生成了文件nginx ,如果没有,则创建该文件: vim /etc/logrotate.d/nginx /data/weblogs/*.log { weekly rotate 7 missingok dateext nocompress notifempty sharedscripts postrotate [ -e /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` endscript }
配置选项说明:
/data/weblogs/*.log # 需要切割的日志文件,可以指定为某个文件名进行切割
weekly #指定转储周期为每周,对应的 daily:指定转储周期为每天,monthly:指定转储周期为每月
rotate 7 #指定日志文件删除之前转储的次数,0 指没有备份,7 指保留7 个备份
missingok #如果指定的目录不存在,logrotate会报错,此项用来关闭报错
nocompress # 这里是不进行压缩,如果需要将切割的日志进行压缩,可以设置为compress
notifempty #如果是空文件的话,不转储
sharedscripts #所有的日志文件都轮转完毕后统一执行一次 脚本
postrotate/endscript #在转储以后需要执行的 命令 可以放入这个对,这两个关键字必须单独成行
postrotate 中的内容即为:nginx进程发送USR1信号使其重新打开日志并写入,不会重启服务,也不会导致最新写入的日志丢失
如果日志分类存放到不同的目录下可以这样设置: /data/weblogs/*.log /data/weblogs/cnyunwei/*.log { weekly rotate 7 .....
测试是否正确执行 [root@aliyun weblogs]#/usr/sbin/logrotate -f /etc/logrotate.d/nginx
执行上述 命令 后可以查看当前日志文件下生成了www.susecui.cn.log-20160808 的文件,如果是开启了压缩,则会生成www.susecui.cn.log-20160808.gz 的压缩文件
创建任务计划执行命令
如果是设置了每天进行切割日志,那么就需要单独设置计划任务,默认设置为一周切割的情况下不需要设置计划任务,logrotate 主配置文件中已经定义了每周会进行轮询。 crontab -e 10 2 * * 6 /usr/sbin/logrotate -f /etc/logrotate.d/nginx 原文来自: https://www.linuxprobe.com/nginx-logrotate.html
系统运维
2019-11-08 08:35:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
参考 https://blog.csdn.net/qq_27607539/article/details/78974544
https://www.jianshu.com/p/b7cf5539429c
https://blog.csdn.net/rrrfff/article/details/51168376
这里就 配置好了 NAT之后, 虚拟机里面的网络就可以不用配置的,先默认来,默认是 自动获取IP的。
而且同时 共享的虚拟机 也是可以作为其他 虚拟机的虚拟机交换机的
即 比如在还存在虚拟的External交换机的情况。这里更新一下,那块用来共享的网卡就可以作为External交换机。
当配置好 上网共享的虚拟交换机 与 NAT 交换机之后, 电脑会自动为 NAT 配置IP地址的, 前提是NAT不需要改动,就采用默认的即 自动获取IP
之后通过 ipconfig 查看 NAT的IP地址, 那么 如果这时候启动虚拟机就会发现虚拟机也自动分配了IP地址。 可以上网了。
如果修改虚拟机的IP地址, 建议与 NAT的IP同一个网段.

NAT的 上网原理就是 通过共享可以上网的 虚拟交换机,让连接 NAT的 虚拟机可以上网,即 上网的时候 通过 虚拟机交换机 的,类似代理的意思。

需要手动配置
一般来说 按照 以上的步骤或者网上操作都是可以上网的。 但是 一些 网络环境下,发现还是不可以上网。
比如我在公司网络里面 以上配置就不可行。需要手动配置 虚拟机里面的: 指定IP地址, 掩码, 默认网关 这样才可以上网了的。
下面是我这里的例子:

下面是out 交换机的 IP情况

注意 子网掩码与 DNS 因为 后面手动配置需要用到

下面是 inner 配置

为了防止 不能上网,也配置加上了 DNS 与 out 的DNS配置一样。 默认网关是可以不用配置的。 子网掩码 不需要改,一般都是 自动生成了。
下面是我虚拟机Linux了里面的网络配置:
这要 注意 GATEWAY 要与 inner 交换机的 IP一致 ,否则不能 上网。
如果不配置的话,发现可以ping 通过 inner 交换机,其他网络和地址都不能通信。
指定IP地址的话, 需要 与 GATEWAY 同一个网段。 其他 配置 就照搬 inner 交换机里面的即可。



系统运维
2019-11-07 08:45:00
「深度学习福利」大神带你进阶工程师,立即查看>>>

摘要 :随着数据暴增,单服务器开始疲于应对海量用户的访问。自本期《问底》,徐汉彬将带大家开启异地跨集群分布式系统打造,本次关注的重点则是架构从单机到分布式集群的转变。
Web系统的缓存机制的建立和优化
刚刚我们讲完了Web系统的外部网络环境,现在我们开始关注我们Web系统自身的性能问题。我们的Web站点随着访问量的上升,会遇到很多的挑战,解决这些问题不仅仅是扩容机器这么简单,建立和使用合适的缓存机制才是根本。
最开始,我们的Web系统架构可能是这样的,每个环节,都可能只有1台机器。

我们从最根本的数据存储开始看哈。
一、 MySQL数据库内部缓存使用
MySQL的缓存机制,就从先从MySQL内部开始,下面的内容将以最常见的InnoDB存储引擎为主。
1. 建立恰当的索引
最简单的是建立索引,索引在表数据比较大的时候,起到快速检索数据的作用,但是成本也是有的。首先,占用了一定的磁盘空间,其中组合索引最突出,使用需要谨慎,它产生的索引甚至会比源数据更大。其次,建立索引之后的数据insert/update/delete等操作,因为需要更新原来的索引,耗时会增加。当然,实际上我们的系统从总体来说,是以select查询操作居多,因此,索引的使用仍然对系统性能有大幅提升的作用。
2. 数据库连接线程池缓存
如果,每一个数据库操作请求都需要创建和销毁连接的话,对数据库来说,无疑也是一种巨大的开销。为了减少这类型的开销,可以在MySQL中配置thread_cache_size来表示保留多少线程用于复用。线程不够的时候,再创建,空闲过多的时候,则销毁。
其实,还有更为激进一点的做法,使用pconnect(数据库长连接),线程一旦创建在很长时间内都保持着。但是,在访问量比较大,机器比较多的情况下,这种用法很可能会导致“数据库连接数耗尽”,因为建立连接并不回收,最终达到数据库的max_connections(最大连接数)。因此,长连接的用法通常需要在CGI和MySQL之间实现一个“连接池”服务,控制CGI机器“盲目”创建连接数。
建立数据库连接池服务,有很多实现的方式,PHP的话,我推荐使用swoole(PHP的一个网络通讯拓展)来实现。
3. Innodb缓存设置(innodb_buffer_pool_size)
innodb_buffer_pool_size这是个用来保存索引和数据的内存缓存区,如果机器是MySQL独占的机器,一般推荐为机器物理内存的80%。在取表数据的场景中,它可以减少磁盘IO。一般来说,这个值设置越大,cache命中率会越高。
4. 分库/分表/分区。
MySQL数据库表一般承受数据量在百万级别,再往上增长,各项性能将会出现大幅度下降,因此,当我们预见数据量会超过这个量级的时候,建议进行分库/分表/分区等操作。最好的做法,是服务在搭建之初就设计为分库分表的存储模式,从根本上杜绝中后期的风险。不过,会牺牲一些便利性,例如列表式的查询,同时,也增加了维护的复杂度。不过,到了数据量千万级别或者以上的时候,我们会发现,它们都是值得的。
二、 MySQL数据库多台服务搭建
1台MySQL机器,实际上是高风险的单点,因为如果它挂了,我们Web服务就不可用了。而且,随着Web系统访问量继续增加,终于有一天,我们发现1台MySQL服务器无法支撑下去,我们开始需要使用更多的MySQL机器。当引入多台MySQL机器的时候,很多新的问题又将产生。
1. 建立MySQL主从,从库作为备份
这种做法纯粹为了解决“单点故障”的问题,在主库出故障的时候,切换到从库。不过,这种做法实际上有点浪费资源,因为从库实际上被闲着了。
2. MySQL读写分离,主库写,从库读。
两台数据库做读写分离,主库负责写入类的操作,从库负责读的操作。并且,如果主库发生故障,仍然不影响读的操作,同时也可以将全部读写都临时切换到从库中(需要注意流量,可能会因为流量过大,把从库也拖垮)。
3. 主主互备。
两台MySQL之间互为彼此的从库,同时又是主库。这种方案,既做到了访问量的压力分流,同时也解决了“单点故障”问题。任何一台故障,都还有另外一套可供使用的服务。

不过,这种方案,只能用在两台机器的场景。如果业务拓展还是很快的话,可以选择将业务分离,建立多个主主互备。
三、 MySQL数据库机器之间的数据同步
每当我们解决一个问题,新的问题必然诞生在旧的解决方案上。当我们有多台MySQL,在业务高峰期,很可能出现两个库之间的数据有延迟的场景。并且,网络和机器负载等,也会影响数据同步的延迟。我们曾经遇到过,在日访问量接近1亿的特殊场景下,出现,从库数据需要很多天才能同步追上主库的数据。这种场景下,从库基本失去效用了。
于是,解决同步问题,就是我们下一步需要关注的点。
1. MySQL自带多线程同步
MySQL5.6开始支持主库和从库数据同步,走多线程。但是,限制也是比较明显的,只能以库为单位。MySQL数据同步是通过binlog日志,主库写入到binlog日志的操作,是具有顺序的,尤其当SQL操作中含有对于表结构的修改等操作,对于后续的SQL语句操作是有影响的。因此,从库同步数据,必须走单进程。
2. 自己实现解析binlog,多线程写入。
以数据库的表为单位,解析binlog多张表同时做数据同步。这样做的话,的确能够加快数据同步的效率,但是,如果表和表之间存在结构关系或者数据依赖的话,则同样存在写入顺序的问题。这种方式,可用于一些比较稳定并且相对独立的数据表。

国内一线互联网公司,大部分都是通过这种方式,来加快数据同步效率。还有更为激进的做法,是直接解析binlog,忽略以表为单位,直接写入。但是这种做法,实现复杂,使用范围就更受到限制,只能用于一些场景特殊的数据库中(没有表结构变更,表和表之间没有数据依赖等特殊表)。
四、 在Web服务器和数据库之间建立缓存
实际上,解决大访问量的问题,不能仅仅着眼于数据库层面。根据“二八定律”,80%的请求只关注在20%的热点数据上。因此,我们应该建立Web服务器和数据库之间的缓存机制。这种机制,可以用磁盘作为缓存,也可以用内存缓存的方式。通过它们,将大部分的热点数据查询,阻挡在数据库之前。

1. 页面静态化
用户访问网站的某个页面,页面上的大部分内容在很长一段时间内,可能都是没有变化的。例如一篇新闻报道,一旦发布几乎是不会修改内容的。这样的话,通过CGI生成的静态html页面缓存到Web服务器的磁盘本地。除了第一次,是通过动态CGI查询数据库获取之外,之后都直接将本地磁盘文件返回给用户。
在Web系统规模比较小的时候,这种做法看似完美。但是,一旦Web系统规模变大,例如当我有100台的Web服务器的时候。那样这些磁盘文件,将会有100份,这个是资源浪费,也不好维护。这个时候有人会想,可以集中一台服务器存起来,呵呵,不如看看下面一种缓存方式吧,它就是这样做的。
2. 单台内存缓存
通过页面静态化的例子中,我们可以知道将“缓存”搭建在Web机器本机是不好维护的,会带来更多问题(实际上,通过PHP的apc拓展,可通过Key/value操作Web服务器的本机内存)。因此,我们选择搭建的内存缓存服务,也必须是一个独立的服务。
内存缓存的选择,主要有redis/memcache。从性能上说,两者差别不大,从功能丰富程度上说,Redis更胜一筹。
3. 内存缓存集群
当我们搭建单台内存缓存完毕,我们又会面临单点故障的问题,因此,我们必须将它变成一个集群。简单的做法,是给他增加一个slave作为备份机器。但是,如果请求量真的很多,我们发现cache命中率不高,需要更多的机器内存呢?因此,我们更建议将它配置成一个集群。例如,类似redis cluster。
Redis cluster集群内的Redis互为多组主从,同时每个节点都可以接受请求,在拓展集群的时候比较方便。客户端可以向任意一个节点发送请求,如果是它的“负责”的内容,则直接返回内容。否则,查找实际负责Redis节点,然后将地址告知客户端,客户端重新请求。
对于使用缓存服务的客户端来说,这一切是透明的。
内存缓存服务在切换的时候,是有一定风险的。从A集群切换到B集群的过程中,必须保证B集群提前做好“预热”(B集群的内存中的热点数据,应该尽量与A集群相同,否则,切换的一瞬间大量请求内容,在B集群的内存缓存中查找不到,流量直接冲击后端的数据库服务,很可能导致数据库宕机)。

4. 减少数据库“写”
上面的机制,都实现减少数据库的“读”的操作,但是,写的操作也是一个大的压力。写的操作,虽然无法减少,但是可以通过合并请求,来起到减轻压力的效果。这个时候,我们就需要在内存缓存集群和数据库集群之间,建立一个修改同步机制。
先将修改请求生效在cache中,让外界查询显示正常,然后将这些sql修改放入到一个队列中存储起来,队列满或者每隔一段时间,合并为一个请求到数据库中更新数据库。

除了上述通过改变系统架构的方式提升写的性能外,MySQL本身也可以通过配置参数innodb_flush_log_at_trx_commit来调整写入磁盘的策略。如果机器成本允许,从硬件层面解决问题,可以选择老一点的RAID(Redundant Arrays of independent Disks,磁盘列阵)或者比较新的SSD(Solid State Drives,固态硬盘)。

5. NoSQL存储
不管数据库的读还是写,当流量再进一步上涨,终会达到“人力有穷时”的场景。继续加机器的成本比较高,并且不一定可以真正解决问题的时候。这个时候,部分核心数据,就可以考虑使用NoSQL的数据库。NoSQL存储,大部分都是采用key-value的方式,这里比较推荐使用上面介绍过Redis,Redis本身是一个内存cache,同时也可以当做一个存储来使用,让它直接将数据落地到磁盘。
这样的话,我们就将数据库中某些被频繁读写的数据,分离出来,放在我们新搭建的Redis存储集群中,又进一步减轻原来MySQL数据库的压力,同时因为Redis本身是个内存级别的Cache,读写的性能都会大幅度提升。
国内一线互联网公司,架构上采用的解决方案很多是类似于上述方案,不过,使用的cache服务却不一定是Redis,他们会有更丰富的其他选择,甚至根据自身业务特点开发出自己的NoSQL服务。

6. 空节点查询问题
当我们搭建完前面所说的全部服务,认为Web系统已经很强的时候。我们还是那句话,新的问题还是会来的。空节点查询,是指那些数据库中根本不存在的数据请求。例如,我请求查询一个不存在人员信息,系统会从各级缓存逐级查找,最后查到到数据库本身,然后才得出查找不到的结论,返回给前端。因为各级cache对它无效,这个请求是非常消耗系统资源的,而如果大量的空节点查询,是可以冲击到系统服务的。

在我曾经的工作经历中,曾深受其害。因此,为了维护Web系统的稳定性,设计适当的空节点过滤机制,非常有必要。
我们当时采用的方式,就是设计一张简单的记录映射表。将存在的记录存储起来,放入到一台内存cache中,这样的话,如果还有空节点查询,则在缓存这一层就被阻挡了。
系统运维
2019-11-07 00:22:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
win10 的 hyper 配置 虚拟机的 桥接有两种方式。
先看 hyper的虚拟交换机 类型:
外部,内部,专用,通俗地说外部就是桥接,内部就是NAT,专用就是Host-only,这里新建一个外部虚拟交换机
参考 https://blog.csdn.net/czz1141979570/article/details/80302190
参考 https://blog.csdn.net/u010801439/article/details/53193113?utm_source=copy

第一种方式
直接 通过 hyper 选择 外部 类型的 虚拟交换机
参考 https://www.jianshu.com/p/b7cf5539429c
参考 https://cloud.tencent.com/developer/article/1334273
配置好之后,要注意的是, 不同的网络里面的路由器等 配置不一样。
有些 就 虚拟机里面的配置比如 模拟配置 自动获取 IP即可 连接外部网络了。
有些 就不行,必须 static 指定 虚拟机的IP ,同时需要配置好DNS, 网关等信息才可以 去 上网了。
因为此时这种 配置 的IP 会占用 物理网络的IP地址。 配置虚拟机的IP的时候,必须配置一个 别人电脑并没有
使用的IP才可以。否则还是不行。因为 这种会占用物理IP,因此 一些场景下不推荐这样配置。比如公司网络,
以免占用了其他人用到的IP 。
以下是配置的demo
注意 这里的DNS 和 网关配置, 子网掩码,可以参考 你自己的可以上网的电脑上面对应的 DNS,网关,子网 。
否则配置错了就 上不了网

第二种 桥接
参考 https://blog.csdn.net/sinat_36203615/article/details/77969800
参考 https://jingyan.baidu.com/article/948f59241ed06dd80ff5f999.html

注意的是, 桥接的时候,可能 电脑反应比较慢,需要等待一段时间才 会 桥接完成并显示可以上网。
同时要注意有些 网络 下,桥接是不能上网的,此时就不能使用这种方式了。
桥接之后, 同时要配置 桥接的 网关, DNS等 与 之前 可以上网的 虚拟交换机一样。


系统运维
2019-11-06 19:46:00
「深度学习福利」大神带你进阶工程师,立即查看>>> datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) - timedelta(days=1)
系统运维
2019-11-06 17:54:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
/etc/fstab内容主要包括六项:
例如:打印出中间的两行内容
LABEL=/ / ext3 defaults 1 1
/dev/sda2 /mnt/D/ vfat defaults 0 0
第一列:设备名或者设备卷标名,(/dev/sda10 或者 LABEL=/)
第二列:设备挂载目录 (例如上面的“/”或者“/mnt/D/”)
第三列:设备文件系统 (例如上面的“ext3”或者“vfat”)
第四列:挂载参数 (看帮助man mount)
对于已经挂载好的设备,例如上面的/dev/sda2,现在要改变挂载参数,这时可以不用卸载该设备,而可以使用下面的命令(没有挂载的设备,remount 这个参数无效)
#mount /mnt/D/ -o remount,ro (改defaults为ro)
为了安全起见,可以指明其他挂载参数,例如:
noexec(不允许可执行文件可执行,但千万不要把根分区挂为noexec,那就无法使用系统了,连mount 命令都无法使用了,这时只有重新做系统了!
nodev(不允许挂载设备文件)nosuid,nosgid(不允许有suid和sgid属性)
nouser(不允许普通用户挂载)
第五列:指明是否要备份,(0为不备份,1为要备份,一般根分区要备份)
第六列:指明自检顺序。 (0为不自检,1或者2为要自检,如果是根分区要设为1,其他分区只能是2)
系统运维
2019-11-06 17:25:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
7.1.1 Nmap
7.1.2 Masscan
7.2 安全工具-AWVS
Nmap
简介
Nmap是一款网络扫描和主机检测的非常有用的工具。 Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。它可以适用于winodws,linux,mac等操作系统。Nmap是一款非常强大的实用工具

下载安装
https://nmap.org/dist/nmap-7.70-setup.exe
rpm -vhU https://nmap.org/dist/nmap-7.70-1.x86_64.rpm
rpm -vhU https://nmap.org/dist/zenmap-7.70-1.noarch.rpm
rpm -vhU https://nmap.org/dist/ncat-7.70-1.x86_64.rpm
rpm -vhU https://nmap.org/dist/nping-0.7.70-1.x86_64.rpm
https://nmap.org/dist/nmap-7.70.dmg
https://nmap.org/dist/nmap-7.70.tar.bz2
bzip2 -cd nmap-7.70.tar.bz2 | tar xvf -
cd nmap-7.70
./configure
make
su root
make install

常用参数
扫描单个主机
nmap 192.168.1.1

扫描整个子网
nmap 192.168.1.1/24

ip地址列表
nmap -iL ip.txt

ping扫描存活
nmap -sP 192.168.1.0/24

指定端口
nmap -p80,443,1433 192.168.1.1

我常用(所有机器端口) -v 显示详细扫描信息
nmap -sV -Pn 192.168.1.1 -v -n


Nmap脚本
cd /usr/share/nmap/scripts/
nmap -sS -sV --script=vulscan/vulscan.nse target
nmap -sS -sV --script=vulscan/vulscan.nse –script-args vulscandb=scipvuldb.csv target
nmap -sS -sV --script=vulscan/vulscan.nse –script-args vulscandb=scipvuldb.csv -p80 target
nmap -PN -sS -sV --script=vulscan –script-args vulscancorrelation=1 -p80 target
nmap -sV --script=vuln target
nmap -PN -sS -sV --script=all –script-args vulscancorrelation=1 target

Masscan
Masscan这款工具被称为“最快的端口扫描”神器。

安装
yum install git gcc make libpcap-devel.x86_64
git clone https://github.com/robertdavidgraham/masscan
make

单个端口
masscan 10.1.0.0/16 -p443

多端口
masscan 10.1.0.0/16 -p80,443

文本批量扫描
masscan -iL

扫描互联网
masscan 0.0.0.0/0 -p0-65535
安全工具-AWVS
AWVS简介
AWVS是一个自动化的web应用程序安全测试工具,他可以扫描任何可通过web浏览器访问的和遵循HTTP/HTTPS规则的web站点和web应用程序。AWVS可以通过SQL注入攻击漏洞、跨站脚本漏洞等来审核web应用程序的安全性。他可以扫描任何可通过web浏览器访问的和遵循HTTP/HTTPS的web站点和web应用程序。

自动的客户端脚本分析器,允许对 Ajax 和 Web 2.0 应用程序进行安全性测试。
业内最先进且深入的 SQL 注入和跨站脚本测试
高级渗透测试工具,例如 HTTP Editor 和 HTTP Fuzzer
可视化宏记录器帮助您轻松测试 web 表格和受密码保护的区域
支持含有 CAPTHCA 的页面,单个开始指令和 Two Factor(双因素)验证机制
丰富的报告功能,包括 VISA PCI 依从性报告
高速的多线程扫描器轻松检索成千上万个页面
智能爬行程序检测 web 服务器类型和应用程序语言
Acunetix 检索并分析网站,包括 flash 内容、SOAP 和 AJAX
端口扫描 web 服务器并对在服务器上运行的网络服务执行安全检查



AWVS10、12版本 安装
https://pan.baidu.com/s/1d73BuoEV2Ei0WUR6Rz3lBA 提取码: yrfx
https://pan.baidu.com/s/1q2Z5lIBk2oxQei8mmg_2A 提取码: ha7w


AWVS 操作介绍

漏洞测试网站 testphp.vulnweb.com
系统运维
2019-11-06 15:28:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
​​​​​​
列出所有的容器 ID
docker ps -aq
停止所有的容器
docker stop $(docker ps -aq)
删除所有的容器
docker rm $(docker ps -aq)
删除所有的镜像
docker rmi $(docker images -q)
复制文件
docker cp mycontainer:/opt/file.txt /opt/local/docker cp /opt/local/file.txt mycontainer:/opt/
docker 1.13 中增加了docker system prune的命令,针对container、image可以使用docker container prune、docker image prune命令。
docker image prune --force --all或者docker image prune -f -a` : 删除所有不使用的镜像
docker container prune: 删除所有停止的容器
系统运维
2019-11-06 14:38:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
因阿里云ECS在VPC中无法指定路由
ip_net="172.29.2.1"
yum install bridge-utils -y
systemctl stop docker.service
iptables -t nat -F POSTROUTING
iptables -F
ifconfig docker0 down
brctl delbr docker0
brctl addbr docker0
ip addr add ${ip_net}/24 dev docker0
ip link set dev docker0 up
ifconfig docker0 ${ip_net} netmask 255.255.255.0
ifconfig docker0
echo -e "{\n\t \"bip\": \"${ip_net}/24\"\n}" > /etc/docker/daemon.json
systemctl daemon-reload
systemctl start docker.service
系统运维
2019-11-06 11:29:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
摘要:本文从Nginx的概念出发,分别从反向代理的概念、优势、配置代码3个方面介绍了Nginx的特性之一反向代理。 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第一期-宜信支付结算八方数据团队高级技术经理 周恒《Nginx的细枝末节》
分享者:宜信支付结算八方数据团队高级技术经理 周恒
原文首发于支付结算技术团队公众号: 野指针
一、Nginx概念解读
对于新事物的理解,最好的方式就是从概念入手,本文作为《Nginx专题》系列文章的第一篇,先从Nginx的名称开始来分解这个神秘的引擎。
Nginx,是engine X的缩写,发音也是'engine x',2004年由俄罗斯大神伊戈尔·赛索耶夫开发,提供了高性能而易用的HTTP反向代理功能。后期还加入了TCP的反向代理支持。
最初Nginx是为了解决早年的C10K问题而生的。什么是C10K呢?C代表Client客户、10K代表10000,即一台服务器同时保持1万链接。这在当时是一个非常棘手的问题。
通过Google搜索Nginx会得到以下解释: Nginx是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。
从这句话中,我们可以得到下面几个关键: 异步框架 反向代理 负载均衡 HTTP缓存
本专题文章将分别从这几个关键词来解读Nginx的强大之处。本文先介绍Nginx特性之反向代理及其配置实现。​
二、反向代理
2.1 什么是反向代理
代理在生活中非常常见,房屋中介是代理、终端零售是代理、选举代表是代理。这些代理都可以帮助需求方减轻很多工作的复杂度,提升效率和体验。
网络里的代理服务是什么样子,我想各位读者也非常清楚,这里再简单回顾一下:假设我们想在公司上网看B站的视频,而规范的公司出于安全和办公效率的考虑,设置了网络策略,不允许访问视频网站,聪明的程序员不可能被这些事情所打败,只要购买一台云服务,搭建代理服务,把浏览器设置上代理,就可以轻松访问视频网站。这就是常见的代理。
那么现在问题来了:“代理”大家都懂,这里为什么强调是反向代理呢?难道还有正向代理?答案是肯定的。
正向代理就是大家常见的代理,以请求端也就是客户端的角度为正向,用户发出请求经过的代理,称为“正向代理”。这时是用户主动选择使用代理。
反向代理:先看图再解释。
主动权被反转,原来是客户端选择代理,现在是代理选择服务端节点。由于控制权的反转,这样的代理被称为“反向代理”。
2.2 反向代理的优点
1)保护服务安全 隐藏服务节点的IP; 将服务节点置于防火墙之后,避免直接攻击业务节点服务器。
2)服务节点更专注于业务,同时提升性能 由于有反向代理的存在,可以让反向代理服务器去实现比如https、gzip压缩等与业务无关的功能; 提供动静态分离,将静态文件发往静态服务器或本地文件系统,避免业务节点处理这些与业务无关的请求; 提供缓存机制,将一些短时间内不会变化的动态内容,在反向代理服务器这层增加缓存,降低业务服务器的请求量; 由于控制权在代理服务这边,完全可以根据服务节点的性能动态分配请求,做到服务节点性能最佳。
正是由于Ngxin引入了反向代理的特性,让请求和响应都要经过Nginx,因此给Nginx带来了非常多的可能。比如负载均衡、HTTP缓存等。
三、反向代理的配置
Nginx中关于反向代理的配置相当简单。
3.1 配置一个单节点的反向代理 # simple reverse-proxy server { listen 80; server_name big.server.com; access_log logs/big.server.access.log main; # pass requests for dynamic content to rails/turbogears/zope, et al location / { proxy_pass http://127.0.0.1:8080; } }
这里定义的规则是以big.server.com域名来请求Nginx的80端口,会将请求代理到127.0.0.1:8080上。
3.2 配置一组反向代理的服务节点。
1)配置一组反向代理并命名。 upstream big_server_com { server 192.168.0.1:8000; server 192.168.0.1:8001; }
这里定义了upstream,这个upstream可以理解为上传流,之所以叫上传是因为:从服务器获取数据叫下载,向服务器发送数据就叫上传,这里是将数据请求发送到服务节点,所以叫上传。
给这组服务节点命名为big_server_com,其中包括两个节点,分别是:192.168.0.1:8000和192.168.0.1:8001。
2)配置规则:让满足的请求能够反向代理到这组服务节点中。 server { listen 80; server_name big.server.com; access_log logs/big.server.access.log main; location / { proxy_pass http://big_server_com; } }
这里定义的规则是以big.server.com域名来请求Nginx的80端口,请求url是以/为后缀的所有请求,都会转发到前面定义的名字为big_server_com的服务节点组。
四、总结
本文从Nginx的概念出发,分别从反向代理的概念、优势、配置代码3个方面介绍了Nginx的特性之一反向代理。后续文章将继续介绍Nginx的另外三个特性:负载均衡、HTTP缓存、异步框架,敬请期待。
系统运维
2019-11-06 11:06:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
在你的印象中,是不是root用户就可以为所欲为呢?随便一个rm -rf *,一波骚操作走人?可能没那么容易。
来啊,删我啊!
先来个示例,创建一个文本文件test.txt $ touch test.txt
将其权限位修改为777 $ chmod 777 test.txt $ ls -al test.txt -rwxrwxrwx 1 root root 13 Aug 31 15:03 test.txt
然后做一点暂时不告诉你的小操作。最后尝试删除: $ rm test.txt rm: cannot remove ‘test.txt’: Operation not permitted
咦?root用户,777权限位,为什么还删不掉?
i属性
那么我在中间做了一个什么操作呢?实际上只是执行了一条 命令 : chattr +i test.txt
就导致了前面我们看到的效果。 Linux 中的文件除了我们能看到的内容外,还有一些文件属性,其中,i属性用于防止文件被修改,重命名,删除。在执行前面的 命令 之后,我们可以通过下面的方式查看其属性: $ lsattr test.txt ----i--------e-- test.txt
如果想要移除该属性,只需要执行; chattr -i test.txt
这个时候就可以删除啦。当然了,仅有超级用户可以对这个属性进行修改。所以说,root用户为所欲为还是可以的,不过得加点小操作。
文件属性
实际上除了前面说的i属性,还有其他属性,包括:
a 只能以追加的方式打开文件写(适用于日志文件)
A 不更新文件的atime,即访问时间
d dump命令运行时,不进行备份操作
S 文件有更新时便写磁盘,等同于对文件使用sync
还有其他属性就不一一列举了,有兴趣的可以参考man手册。
总结
所以如果你发现有的文件权限位是777,但是用root用户也没法删除,不如使用lsattr看看是不是有i属性。 本文地址: https://www.linuxprobe.com/linux-root-rm.html
系统运维
2019-11-06 11:00:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
命令 不全:在 命令 没有输入完 (引号或括号没有配对),就不小心按下了Enter键,终端会提示出一个>代表命令不完整,这是可以继续输入,也可以ctrl+c终止输入,重新再来。(下面sed命令使用时,还有另外一种命令不全的问题)
Linux 下命令的一些异常情况
命令不全:在命令没有输入完 (引号或括号没有配对),就不小心按下了Enter键,终端会提示出一个>代表命令不完整,这是可以继续输入,也可以ctrl+c终止输入,重新再来。
下面sed命令使用时,还有另外一种命令不全的问题 ct@ehbio:~/ehbio_project$ rename 'ehbio2 >' ct@ehbio:~/ehbio_project$ rename 'ehbio2 > ^C ct@ehbio:~/ehbio_project$
文件名输入错误: 多一个字母、少一个字母、大小写问题 ct@ehbio:~/ehbio_project$ls ehbio2.fa ehbio3.fa ehbio4.fa ehbio.fa second.fa # 重命名没有生效 ct@ehbio:~/ehbio_project$ rename 'ehbio2' 'ehbio5' ebio2.fa ct@ehbio:~/ehbio_project$ ls ehbio2.fa ehbio3.fa ehbio4.fa ehbio.fa second.fa # 仔细看是ehbio2.fa写成了ebio2.fa,更正后即可。 Z8vb3e9jtel4m99ss6e7eZ:~/ehbio_project$ rename 'ehbio2' 'ehbio5' ehbio2.fa ct@ehbio:~/ehbio_project$ ls ehbio3.fa ehbio4.fa ehbio5.fa ehbio.fa second.fa
所在目录不对: 访问的文件不存在于当前目录,而又没有提供绝对路径, 或软连接失效 ct@ehbio:~/ehbio_project$ ls ehbio3.fa ehbio4.fa ehbio5.fa ehbio6.fa ehbio.fa second.fa ct@ehbio:~/ehbio_project$ ls ../data ehbio2.fa first.fa # 当前目录没有ehbio2.fa ct@ehbio:~/ehbio_project$ less ehbio2.fa ehbio2.fa: 没有那个文件或目录 # ehbio2.fa在上一层目录的data目录下 ct@ehbio:~/ehbio_project$ ls ../data/ehbio2.fa ../data/ehbio2.fa # 加上路径依然访问不了 ct@ehbio:~/ehbio_project$ less ../data/ehbio2.fa ../data/ehbio2.fa: 没有那个文件或目录 # 上面的问题是软连接失效,在之前的操作中删掉了原始的ehbio2.fa,所以快捷方式失效 # 正确的访问 ct@ehbio:~/ehbio_project$ tail -n 3 ../data/first.fa ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC CAGGACAGGAGCTA end 本文地址: https://www.linuxprobe.com/linux-learning-command.html
系统运维
2019-11-06 10:59:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
导读
命令 不全:在 命令 没有输入完 (引号或括号没有配对),就不小心按下了Enter键,终端会提示出一个>代表命令不完整,这是可以继续输入,也可以ctrl+c终止输入,重新再来。(下面sed命令使用时,还有另外一种命令不全的问题)
Linux 下命令的一些异常情况
命令不全:在命令没有输入完 (引号或括号没有配对),就不小心按下了Enter键,终端会提示出一个>代表命令不完整,这是可以继续输入,也可以ctrl+c终止输入,重新再来。
下面sed命令使用时,还有另外一种命令不全的问题 ct@ehbio:~/ehbio_project$ rename 'ehbio2 >' ct@ehbio:~/ehbio_project$ rename 'ehbio2 > ^C ct@ehbio:~/ehbio_project$
文件名输入错误: 多一个字母、少一个字母、大小写问题 ct@ehbio:~/ehbio_project$ls ehbio2.fa ehbio3.fa ehbio4.fa ehbio.fa second.fa # 重命名没有生效 ct@ehbio:~/ehbio_project$ rename 'ehbio2' 'ehbio5' ebio2.fa ct@ehbio:~/ehbio_project$ ls ehbio2.fa ehbio3.fa ehbio4.fa ehbio.fa second.fa # 仔细看是ehbio2.fa写成了ebio2.fa,更正后即可。 Z8vb3e9jtel4m99ss6e7eZ:~/ehbio_project$ rename 'ehbio2' 'ehbio5' ehbio2.fa ct@ehbio:~/ehbio_project$ ls ehbio3.fa ehbio4.fa ehbio5.fa ehbio.fa second.fa
所在目录不对: 访问的文件不存在于当前目录,而又没有提供绝对路径, 或软连接失效 ct@ehbio:~/ehbio_project$ ls ehbio3.fa ehbio4.fa ehbio5.fa ehbio6.fa ehbio.fa second.fa ct@ehbio:~/ehbio_project$ ls ../data ehbio2.fa first.fa # 当前目录没有ehbio2.fa ct@ehbio:~/ehbio_project$ less ehbio2.fa ehbio2.fa: 没有那个文件或目录 # ehbio2.fa在上一层目录的data目录下 ct@ehbio:~/ehbio_project$ ls ../data/ehbio2.fa ../data/ehbio2.fa # 加上路径依然访问不了 ct@ehbio:~/ehbio_project$ less ../data/ehbio2.fa ../data/ehbio2.fa: 没有那个文件或目录 # 上面的问题是软连接失效,在之前的操作中删掉了原始的ehbio2.fa,所以快捷方式失效 # 正确的访问 ct@ehbio:~/ehbio_project$ tail -n 3 ../data/first.fa ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC CAGGACAGGAGCTA end 原文来自: https://www.linuxprobe.com/linux-learning-command.html
系统运维
2019-11-06 08:56:00