利用grep,cut,awk处理一些文本的简记 Linux
先来案例一波:
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
假设我们有一段需要处理的文本内容如下所示(数量几万行,手工别说了,先使用替换命令将|替换成空格):
[email protected]:cory0212 [email protected]:morris409 [email protected]:marigold [email protected]:jeffrey2 [email protected]:123q123q | [email protected]:dinosaur52197 | [email protected]:goblue20 | [email protected]:Recon1234 | [email protected]:32gunz32 | Premium [email protected]:happily1 | [email protected]:susana123 | [email protected]:silvia231106 | Standard [email protected]:hockey30 | [email protected]:KtnM990175 | Basic [email protected]:arturs2000 |
我们需要从上面这段文本里面提取分离出邮箱和冒号后面竖线|之间的这两部分.如何操作呢?
首先 提取邮箱,我们可以使用grep来配合正则表达式直接提取邮箱,邮箱提取很简单.只需要一条命令:
grep -E -o '([a-zA-Z0-9_\-\.\+]+)*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}' xxx.txt >> goodmail.txt
注:说明一下,使用 grep 的 -o 和 -E 选项进行正则的精确匹配,其中 -o 表示“only-matching”,即“仅匹配”之意。光用它不够,配合 -E 选项使用扩展正则表达式则威力巨大。哈哈,精准,迅速.快狠准!(命令中的xxx.txt问需要处理的文本,>> 表示追加到后面的 goodmail.txt,如果没有则自动创建此文件,如果需要使用grep)命令多次提取同一类型的字符,请使用单大于符号 > ,表示覆盖.写这些,纯粹是为了小白,我自己就是-_-|)
那么,,我们使用cut 来提取邮箱,也很容易的,先来看看cut命令的介绍:
cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的。 (1)其语法格式为: cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file] 使用说明 cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。 如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。 主要参数 -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。 -c :以字符为单位进行分割。 -d :自定义分隔符,默认为制表符。 -f :与-d一起使用,指定显示哪个区域。 -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。
在这里,我们只需要一条命令就可以搞定提取邮箱了,直接提取冒号前面的就行,冒号就是界定符.
cut -d ':' -f 1 xxx.txt >> goodmail.txt
那如何提取邮箱后面的字符呢?
cut -d ':' -f 2 xxx.txt >> goodpwd_bad.txt
说明一下,但是没有第二个冒号,那么cut命令发现没有第二个冒号,那么就会使用默认的换行符,即在第一个冒号后的第一个换行符,那么邮箱后面的就取到了.但是因为这个文本并不是标准格式化的,后面还有一些 类似下面的格式 两个单词之间有空格,而我们只需要前面第一个部分.
frdbcgl9676 Standard archie2002 beaver92 Premium bethany7 Standard webbera1 thunder00
这就简单了,在次在此基础上进行cut操作即可:
cut -d ' ' -f 1 goodpwd_bad.txt > goodpwd.txt #注意,两个单引号之间是个空格,并非就是两个单引号凑一起.
如果用awk来处理,稍稍复杂,这需要你会计算两个字符之间的长度,对于像我这种的不规则的,很不好下手...下面简单的举个例子:
echo abcdefghelloword | awk -v head="ab" -v tail="fg" '{print substr($0, index($0,head)+length(head),index($0,tail)-index($0,head)-length(head))}' #以上关键是计算出开头标记"ab",和结束标记"fg" 在字符串中的位置 #执行结果就是 #cde
其实这三个命令grep,cut,awk,通常是配合管道|和sed命令联合使用,很强大.这就是为啥linux处理文件速度比windows快!
下面附上一些参考文章的链接:
- 理解cut,awk,sort三个命令的分隔符选项: http://blog.csdn.net/u011341352/article/details/52910749
- 多空格&多制表符文本之cut域分割终极方案 : https://sanwen8.cn/p/267AXa4.html
- linux之cut用法: http://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html
- shell脚本抽取文本文件中指定字符串的方法:sed+grep方法、awk+grep方法(必要时可以联合sed以及grep)、grep+cut方法: http://blog.csdn.net/menlinshuangxi/article/details/7979504
- linux grep命令详解: http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html
- 使用 grep 的 -o 和 -E 选项进行正则的精确匹配: http://blog.sina.com.cn/s/blog_7e9efc570101adbv.html
centos开启ssh密钥登录总结 Linux
centos开启SSH的密钥登录相信大家都会吧,而且很多的一键脚本都会配备,比如wdlinux面板的一件安装包都会配备而且支持自定义修改SSH端口,和一键生成密钥,很方便的,但是我们有时候没有必要安装这些一键脚本(比如内存小,不是用来做web服务的等等原因就不细说了);比如我们只是在梯子服务器上安装呢?这就需要我们自己手动了.博主我呢也经常折腾linux服务器,自己的或朋友的,今天抽时间写这篇文章,把我配置SSH密钥过程中遇到的坑都一一道来,
一来是做个总结,二来是方便后人^^.不要再往坑了跳了!跳了的也能尽快出坑!(此处应有掌声 -_-|)
先来看配置SSH的步骤
大致分为以下下几步:
- 本地使用xshell软件生成公钥(不推荐linux端生成,照顾小白)
- 使用非常著名方便小巧的运维工具--lrzsz(点我传送)--来上传公钥到服务端
- 服务端常规配置(会附上详细的步骤shell操作代码)
- 本文的重点--常见的坑的排除,解决方法(附上几种出错的情况以及解决办法)
1.本地使用xshell软件生成公钥:
- 在xshell的工具栏里面找到 工具-新建用户密钥向导 如下图所示:
2.SSH登录服务器,把id_rsa_2048.pub上传到服务器上并注册公钥,配置SSH
- 上传可以参考我这篇文章 lrzsz(点我传送) ,如果安装好了lrzsz,只需要一条命即可把pub文件上传到服务器,输入:
rz
然后在弹出的窗口选择上传的文件即可,如果出现报错,暂时关闭防火墙即可.- 其实使用sftp也可以在xshell里直接传文件,但是我不常用没有做,抱歉,但是教程网上有的,搜索一下即可.
3.服务端注册公钥.pub文件到系统,并分配好权限,权限没设置好后面登录会出问题的,这就是其中的一个坑,很多人都被坑过...具体步骤如下代码 :
就是把id_rsa_2048.pub的内容替换到/root/.ssh/下: [root@test ~]# ls -a . .. id_rsa_2048.pub [root@test ~]# mkdir .ssh [root@test ~]# chmod 700 .ssh/ [root@test ~]# cd .ssh/ [root@test .ssh]# cat ../id_rsa_2048.pub > ./authorized_keys [root@test .ssh]# ls authorized_keys [root@test .ssh]# chmod 600 authorized_keys [root@test ~]# diff id_rsa_2048.pub .ssh/authorized_keys [root@test ~]#
最后的diff命令来比较两个文件,确保文件内容相同。
4.接下来配置server的ssh服务(/etc/ssh/sshd_config)只允许使用密钥登录不允许口令登录(小提示:sshd重启完先不要关闭当前的ssh链接,以防万一):
[root@test~]:# vi /etc/ssh/sshd_config #然后在vi界面用i来insert修改,找个空,回车一下,粘贴下面的代码 PasswordAuthentication no # 不允许口令登录 PubkeyAuthentication yes # 使用key登录 AuthorizedKeysFile .ssh/authorized_keys # key的名字 #然后Esc,输入冒号:wq,保存退出
service sshd restart #重启ssh服务
现在暂时不修改端口,不然修改完端口很多童鞋就直接exit了,就GG了,因为很多人的iptables规则没有设置就退出了,结果就进不去了,要是vps有控制台还好,可以通过控制台的VNC修改配置文件.要是没有就麻烦了.
这时候,xshell新开一个窗口,输入你的服务器IP,端口,默认22,然后回车链接,在弹出的对话框输入用户名,root,然后选择public key,在用户密钥里选择刚刚生成的那个,默认名字是id_rsa_2048,然后在下面输入刚刚设置的密钥密码,登录,看是否正常,如果正常登录,就OK了,然后就可以去修改端口,修改防火墙了:
修改端口,直接,vi /etc/ssh/sshd_config,增加一行,Port 3211 #端口请随意,但要记住.
然后防火墙增加一条规则允许 32211端口链接,命令大概如下,具体的请自行酌情修改:
iptables -A INPUT -p tcp --dport 3211 -j ACCEPT /*允许包从3211端口进入*/ iptables -A OUTPUT -p tcp --sport 3211 -m state --state ESTABLISHED -j ACCEPT /*允许从3211端口进入的包返回*/ service iptables save /*保存配置*/ service iptables restart /*重启iptables*/
下面说一下常见的坑(错误),如何爬出来:
这时候,请先检查存放authorized_keys的文件的权限,是否为600或者是644,如果不知道怎么看,那就直接执行下面的命令一次好了:
chmod 600 .ssh/authorized_keys 即可或者 644 也行. #600权限即-rw-------
注:执行这些命令的前提是,默认你是root账户,且在root目录下.如果不是,请自行调整用户和目录.不懂得可以留言/评论/发邮件.
然后再次登录,成功就不说了,没成功请继续往下看:
没成功就请查看登录日志,具体的命令如下(centos为例,其他的linux目录可能不一样,请注意):
cat /var/log/secure
如果出现如图所示的 xxx because account is locked :
这种有可能是用户被锁定了,于是查看状态 准备解锁用户,命令如下: pam_tally2 --user root #root为你需要登录的账号 pam_tally2 -r -u root #root为你需要登录的账号 通过pam_tally2 --user 指令发现没有锁定,都是0, [root@test~]# pam_tally2 --user root Login Failures Latest failure From root 0 [root@test~]# pam_tally2 -r -u root Login Failures Latest failure From root 0 那就有可能是sshd没开启PAM 修改/etc/ssh/sshd_config 配置后 ,再次登录测试,应该能解决问题
2.如果按照上面这些修改完还是登录不进去,并且查看日志,大概内容如下:
Mar 29 01:36:12 localhost sshd[2645]: Received disconnect from 192.123.123.123: 11: Bye Bye Mar 29 01:49:48 localhost sshd[2031]: Received signal 15; terminating. Mar 29 01:49:48 localhost sshd[2704]: Server listening on 0.0.0.0 port 22. Mar 29 01:49:48 localhost sshd[2704]: Server listening on :: port 22. Mar 29 01:50:12 localhost sshd[2707]: Received disconnect from 192.123.123.123: 0: Mar 29 01:50:43 localhost sshd[2784]: Received disconnect from 192.123.123.123: 0: Mar 29 01:52:21 localhost sshd[2812]: Received disconnect from 192.123.123.123: 0:
出错的是直接就断开了连接,并且没有任何错误提示,请检查服务器的selinux和iptables是否开启,iptables前面讲过,开放想相应端口,
如果还是连接不上,那就检查selinux, 使用下面的代码检查selinux 是否开启 :
查看SELinux状态: 1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: enabled 2、getenforce ##也可以用这个命令检查 关闭SELinux: 1、临时关闭(不用重启机器): setenforce 0 ##设置SELinux 成为permissive模式 ##setenforce 1 设置SELinux 成为enforcing模式 2、修改配置文件需要重启机器: 修改/etc/selinux/config 文件 将SELINUX=enforcing改为SELINUX=disabled 重启机器即可 #reboot
目前就写这么多,欢迎补充,交流!
我们下次再会.
MySQL order by 排序小计 技术文章
在使用 MySQL 排序的时候,
我想把 考号(字段 kh) 里面从左数第三个(包含第三个)取两个数为 11 的所有结果的 分数(字段 fs)进行 降序排列,可是我用order by出现这样的结果:
前面的有比较小的值(越小不应该在最后么),后面才是按照降序排列的(数据有几千条)...很尴尬, 同样,我如果用升序排列,则前面的是按照升序的排序的,可是最后的几行就不是的...最后的几行有比较小的分数(不应该是越到最后越是最大的分数么),特么真是太尴尬...
MySQL 代码如下:
SELECT kh, xm, fs FROM score WHERE SUBSTRING(kh, 3, 2) = '11' ORDER BY fs DESC
出现类似如下图的结果(这是使用降序的时候),请问该如何写 MySQL 语句?
解决办法:我发现我的 FS 字段是 varchar 的 我改成 int 整形在排序也对了,你说的使用 ORDER BY abs(fs) desc 也可以..我不知道 ABS(X)这个函数...
漏洞练习平台总结 渗透测试
漏洞及渗透练习平台:
WebGoat漏洞练习环境
https://github.com/WebGoat/WebGoat
https://github.com/WebGoat/WebGoat-Legacy
Damn Vulnerable Web Application(漏洞练习平台)
https://github.com/RandomStorm/DVWA
数据库注入练习平台
https://github.com/Audi-1/sqli-labs
用node编写的漏洞练习平台,like OWASP Node Goat
https://github.com/cr0hn/vulnerable-node
花式扫描器 :
端口扫描器Nmap
https://github.com/nmap/nmap
本地网络扫描器
https://github.com/SkyLined/LocalNetworkScanner
子域名扫描器
https://github.com/lijiejie/subDomainsBrute
漏洞路由扫描器
https://github.com/jh00nbr/Routerhunter-2.0
迷你批量信息泄漏扫描脚本
https://github.com/lijiejie/BBScan
Waf类型检测工具
https://github.com/EnableSecurity/wafw00f
信息搜集工具 :
社工插件,可查找以email、phone、username的注册的所有网站账号信息
https://github.com/n0tr00t/Sreg
Github信息搜集,可实时扫描查询git最新上传有关邮箱账号密码信息
https://github.com/sea-god/gitscan
github Repo信息搜集工具
https://github.com/metac0rtex/GitHarvester
WEB:
webshell大合集
https://github.com/tennc/webshell
渗透以及web攻击脚本
https://github.com/brianwrf/hackUtils
web渗透小工具大合集
https://github.com/rootphantomer/hack_tools_for_me
XSS数据接收平台
https://github.com/firesunCN/BlueLotus_XSSReceiver
XSS与CSRF工具
https://github.com/evilcos/xssor
Short for command injection exploiter,web向命令注入检测工具
https://github.com/stasinopoulos/commix
数据库注入工具
https://github.com/sqlmapproject/sqlmap
Web代理,通过加载sqlmap api进行sqli实时检测
https://github.com/zt2/sqli-hunter
新版中国菜刀
https://github.com/Chora10/Cknife
.git泄露利用EXP
https://github.com/lijiejie/GitHack
浏览器攻击框架
https://github.com/beefproject/beef
自动化绕过WAF脚本
https://github.com/khalilbijjou/WAFNinja
http命令行客户端,可以从命令行构造发送各种http请求(类似于Curl)
https://github.com/jkbrzt/httpie
浏览器调试利器
https://github.com/firebug/firebug
一款开源WAF
https://github.com/SpiderLabs/ModSecurity
windows域渗透工具:
windows渗透神器
https://github.com/gentilkiwi/mimikatz
Powershell渗透库合集
https://github.com/PowerShellMafia/PowerSploit
Powershell tools合集
https://github.com/clymb3r/PowerShell
Fuzz:
Web向Fuzz工具
https://github.com/xmendez/wfuzz
HTTP暴力破解,撞库攻击脚本
https://github.com/lijiejie/htpwdScan
漏洞利用及攻击框架:
msf
https://github.com/rapid7/metasploit-framework
Poc调用框架,可加载Pocsuite,Tangscan,Beebeeto等
https://github.com/erevus-cn/pocscan
Pocsuite
https://github.com/knownsec/Pocsuite
Beebeeto
https://github.com/n0tr00t/Beebeeto-framework
漏洞POC&EXP:
ExploitDB官方git版本
https://github.com/offensive-security/exploit-database
php漏洞代码分析
https://github.com/80vul/phpcodz
Simple test for CVE-2016-2107
https://github.com/FiloSottile/CVE-2016-2107
CVE-2015-7547 POC
https://github.com/fjserna/CVE-2015-7547
JAVA反序列化POC生成工具
https://github.com/frohoff/ysoserial
JAVA反序列化EXP
https://github.com/foxglovesec/JavaUnserializeExploits
Jenkins CommonCollections EXP
https://github.com/CaledoniaProject/jenkins-cli-exploit
CVE-2015-2426 EXP (windows内核提权)
https://github.com/vlad902/hacking-team-windows-kernel-lpe
use docker to show web attack(php本地文件包含结合phpinfo getshell 以及ssrf结合curl的利用演示)
https://github.com/hxer/vulnapp
php7缓存覆写漏洞Demo及相关工具
https://github.com/GoSecure/php7-opcache-override
XcodeGhost木马样本
https://github.com/XcodeGhostSource/XcodeGhost
中间人攻击及钓鱼
中间人攻击框架
https://github.com/secretsquirrel/the-backdoor-factory
https://github.com/secretsquirrel/BDFProxy
https://github.com/byt3bl33d3r/MITMf
Inject code, jam wifi, and spy on wifi users
https://github.com/DanMcInerney/LANs.py
可扩展的中间人代理工具
https://github.com/intrepidusgroup/mallory
wifi钓鱼
https://github.com/sophron/wifiphisher
密码破解:
密码破解工具
https://github.com/shinnok/johnny
本地存储的各类密码提取利器
https://github.com/AlessandroZ/LaZagne
二进制及代码分析工具:
二进制分析工具
https://github.com/devttys0/binwalk
系统扫描器,用于寻找程序和库然后收集他们的依赖关系,链接等信息
https://github.com/quarkslab/binmap
rp++ is a full-cpp written tool that aims to find ROP sequences in PE/Elf/Mach-O (doesn't support the FAT binaries) x86/x64 binaries.
https://github.com/0vercl0k/rp
Windows Exploit Development工具
https://github.com/lillypad/badger
二进制静态分析工具(python)
https://github.com/bdcht/amoco
Python Exploit Development Assistance for GDB
https://github.com/longld/peda
对BillGates Linux Botnet系木马活动的监控工具
https://github.com/ValdikSS/billgates-botnet-tracker
木马配置参数提取工具
https://github.com/kevthehermit/RATDecoders
Shellphish编写的二进制分析工具(CTF向)
https://github.com/angr/angr
针对python的静态代码分析工具
https://github.com/yinwang0/pysonar2
一个自动化的脚本(shell)分析工具,用来给出警告和建议
https://github.com/koalaman/shellcheck
基于AST变换的简易Javascript反混淆辅助工具
https://github.com/ChiChou/etacsufbo
EXP编写框架及工具:
二进制EXP编写工具
https://github.com/t00sh/rop-tool
CTF Pwn 类题目脚本编写框架
https://github.com/Gallopsled/pwntools
an easy-to-use io library for pwning development
https://github.com/zTrix/zio
跨平台注入工具( Inject JavaScript to explore native apps on Windows, Mac, Linux, iOS and Android.)
https://github.com/frida/frida
隐写:
隐写检测工具
https://github.com/abeluck/stegdetect
各类安全资料:
域渗透教程
https://github.com/l3m0n/pentest_study
python security教程(原文链接http://www.primalsecurity.net/tutorials/python-tutorials/)
https://github.com/smartFlash/pySecurity
data_hacking合集
https://github.com/ClickSecurity/data_hacking
mobile-security-wiki
https://github.com/exploitprotocol/mobile-security-wiki
书籍《reverse-engineering-for-beginners》
https://github.com/veficos/reverse-engineering-for-beginners
一些信息安全标准及设备配置
https://github.com/luyg24/IT_security
APT相关笔记
https://github.com/kbandla/APTnotes
Kcon资料
https://github.com/knownsec/KCon
ctf及黑客资源合集
https://github.com/bt3gl/My-Gray-Hacker-Resources
ctf和安全工具大合集
https://github.com/zardus/ctf-tools
《DO NOT FUCK WITH A HACKER》
https://github.com/citypw/DNFWAH
各类CTF资源
近年ctf writeup大全
https://github.com/ctfs/write-ups-2016
https://github.com/ctfs/write-ups-2015
https://github.com/ctfs/write-ups-2014
fbctf竞赛平台Demo
https://github.com/facebook/fbctf
ctf Resources
https://github.com/ctfs/resources
各类编程资源:
大礼包(什么都有)
https://github.com/bayandin/awesome-awesomeness
bash-handbook
https://github.com/denysdovhan/bash-handbook
python资源大全
https://github.com/jobbole/awesome-python-cn
git学习资料
https://github.com/xirong/my-git
安卓开源代码解析
https://github.com/android-cn/android-open-project-analysis
python框架,库,资源大合集
https://github.com/vinta/awesome-python
JS 正则表达式库(用于简化构造复杂的JS正则表达式)
https://github.com/VerbalExpressions/JSVerbalExpressions
Python:
python 正则表达式库(用于简化构造复杂的python正则表达式)
https://github.com/VerbalExpressions/PythonVerbalExpressions
python任务管理以及命令执行库
https://github.com/pyinvoke/invoke
python exe打包库
https://github.com/pyinstaller/pyinstaller
py3 爬虫框架
https://github.com/orf/cyborg
一个提供底层接口数据包编程和网络协议支持的python库
https://github.com/CoreSecurity/impacket
python requests 库
https://github.com/kennethreitz/requests
python 实用工具合集
https://github.com/mahmoud/boltons
python爬虫系统
https://github.com/binux/pyspider
ctf向 python工具包
https://github.com/P1kachu/v0lt
科学上网:
科学上网工具
https://github.com/XX-net/XX-Net
福利:
微信自动抢红包动态库
https://github.com/east520/AutoGetRedEnv
微信抢红包插件(安卓版)
https://github.com/geeeeeeeeek/WeChatLuckyMoney
神器
https://github.com/yangyangwithgnu/hardseed
LInux远程文件传输效率工具-lrzsz Linux
wget
tar xf lrzsz-0.12.20.tar.gz
cd lrzsz-0.12.20
#当前目录下有个INSTALL,详细讲述了如果安装
./configure && make && sudo make install #如果你不需要特别自定义,这条指令就够了
echo $? # 如果结果是0,就表示你安装成功了
error while loading shared libraries: libsodium.so.18: cannot open shared Linux
昨晚在部署环境编译pureFTP的时候,报错:
error while loading shared libraries: libsodium.so.18: cannot open shared
百度,Google一阵总算找到解决方法:
首先确认libsodium.so.18在你得系统里是否存在,直接一行命令就搞定:
cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/lib
/usr/lib
/usr/lib64
/usr/local/lib
或者是下面的find命令:
find / -name "libsodium.so.18" ,我的系统返回的是存在的,一般的系统都存在的....
/usr/lib/libsodium.so.18 ...那既然存在好报错,那就软连接到另一个 libsodium.so 上,具体命令如下:
ln -sf /usr/lib/libsodium.so /usr/lib/libsodium.so.18
最后一定要记得
ldconfig
注:参考链接--
http://www.jb51.net/LINUXjishu/268747.html
下面记录一下.使用acme.sh安装ssl证书时需要注意的,按照作者的步骤clone或者wget,curl且运行完脚本后,请reboot一下vps,
不然你执行acme.sh --可能会提示找不到命令,如果不重启,也可以,切换到acme.sh的安装目录,
cd /root/.acme.sh/ ,然后执行, ./acme.sh --参数 .推荐重启一下,方便.
如果在安装证书过程中出错,Verifying invalid这类的最好就换一种方式验证域名.作者那里有提到.
在安装证书前,域名切记不要被Google或者是火狐报毒...不然是不能通过的,不能颁发证书的.更多的使用方法去作者的github主页看,很详细.
Linux Find 命令精通指南(转) Linux
简单介绍这一无处不在的命令的强大的方面以及混乱的方面。
2008 年 7 月发布
Linux find 命令是所有 Linux 命令中最有用的一个,同时也是最混乱的一个。它很难,因为它的语法与其他 Linux 命令的标准语法不同。但是,它很强大,因为它允许您按文件名、文件类型、用户甚至是时间戳查找文件。使用 find 命令,您不但可以找到具这些属性任意组合的文件,还可以对它找到的文件执行操作。
本文的目的是,通过概述 find 命令的用途和潜能,简化该命令的学习和使用。同时,它将针对 find 命令的某些最强大但最混乱的方面提供一个基本的指南和参考。
[注意:本文使用的 find 版本是 GNU 版本,因此,某些细节可能与其他版本的 find 有所不同。]
基本格式
开始之前,我们先来看一下 find 命令的基本结构:
find start_directory test options criteria_to_match action_to_perform_on_results
在以下命令中, find 将开始在当前目录(用“.”表示)中查找任何扩展名为“java”的文件:
find . -name "*.java"
下面是该命令所找到的命令的缩略清单:
find . -name "*.java" ./REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java ./REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java ..
[注意:如果您从本文剪切并粘贴来运行该 find 命令,您可能需要使用自己的键盘替换双引号 (“”) 才能得出正确的结果。]
以下命令将执行相同的操作。在这两种情况下,您都需要对通配符进行转义以确保它传递到 find 命令并且不由 shell 解释。因此,请将您的搜索字符串放到引号里,或者在它前面加上反斜线:
find . -name \*.java
尽管 find 的所有参数均为可选,但是如果您未指定从哪里开始搜索,搜索默认将在当前目录中开始。如果您不指定要匹配的测试连接、选项或值,您的结果将不完整或者无区别。
运行以下三个 find 命令将得出同样的结果 — 当前目录和所有子目录中的所有文件(包括隐藏文件)的完整清单:
find find . find . -print
这类似于运行一个带 -la 选项的 ls 命令。如果您希望上述命令的输出包含完整的路径名(或许是为了备份),您将需要指定起始目录的完整路径:
find /home/bluher -name \*.java /home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java /home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java/ ...
您还可以在搜索字符串中指定多个起始目录。如果以具有相应权限的用户身份运行,以下命令将下到 /usr、/home /tmp 目录查找所有 jar 文件:
find /usr /home /tmp -name "*.jar"
但是,如果您没有相应的权限,您在开始浏览许多系统目录时将生成错误消息。以下是一个示例:
find: /tmp/orbit-root: Permission denied
您可以通过附加您的搜索字符串来避免混乱的输出,如下所示:
find /usr /home /tmp -name "*.jar" 2>/dev/null
这会将所有错误消息发送到空文件,因此提供清理器输出。
默认情况下,find 是区分大小写的。对于不区分大小写的 find,将 -iname 测试替换为 -name 测试。
find downloads -iname "*.gif" downloads/.xvpics/Calendar05_enlarged.gif downloads/lcmgcfexsmall.GIF
除文件名外,您还可以按类型搜索文件。例如,您可以使用以下命令查找一个目录中的所有子目录:
find . -type d
您可以使用以下命令查找您的/usr 目录中的所有符号链接:
find /usr -type l
这可能会列出 3,000 多个链接。以下的任何一个命令使用根权限运行都将列出 /usr 目录中的链接以及它所指向的文件:
# find /usr/bin -type l -name "z*" -exec ls -l {} \; lrwxrwxrwx 1 root root 8 Dec 12 23:17 /usr/bin/zsh -> /bin/zsh lrwxrwxrwx 1 root root 5 Dec 12 23:17 /usr/bin/zless -> zmore lrwxrwxrwx 1 root root 9 Dec 12 23:17 /usr/bin/zcat -> /bin/zcat
find /usr/bin -type l -name "z*" -ls
但是,第二个更短的命令将列出更多的文件,以及目录和 inode 信息:在本文后面的部分中,我们将讨论 -exec 和 -ls 操作的用法。
其他 find 可以找到的文件类型包括:
• b — 块(缓存)特殊
• c — 字符(未缓存)特殊
• p — 命名管道 (FIFO)
• s — 套接字
使用根作为 find 命令的起点会极大地降低系统的速度。如果您必须运行这样一个命令,您可以在非高峰时段或晚上运行它。您可以使用以下语法将输出重定向到一个文件:
find / -print > masterfilelist.out
如果您错误地输入一个 find 命令,生成大量不必要的输出,只需按 CTRL-C 中断该命令,这将停止最近执行的命令。
在具多个文件系统的企业网络上,限制 find 查找的文件也是一个特别好用的方法。尽可能多地使用选项和测试以减少系统上的负载。用于此目的的两个最有用的选项是 -xdev 和 -mount。它们通过阻止 find 下到其他文件系统(如 MS-DOS、CD-ROM 或 AFS)上的目录中缩短了搜索范围。这将搜索限制为同一类型的文件系统作为起始目录。
如果运行 mount 命令,双引导系统上的用户可以使用这些选项。假设涉及 Windows 分区,您可以使用类似以下的命令安装它:
mount -t vfat /dev/sda1 /mnt/msdos
您使用的实际命令取决于您的系统设置。您可以通过运行 df 或执行以下命令验证该分区已安装:
find /mnt/msdos -name "*.txt" 2> /dev/null
您应该看到 MS Windows 分区上列出了很多的文件。现在,运行以下带 -mount 或 -xdev 选项的命令:
find / -name "*.txt" -mount 2> /dev/null
或者
find / -name "*.txt" -xdev 2> /dev/null
还可以使用 -fstype 测试明确告知 find 在哪个文件系统中查找,如以下示例中所示:
find / -name "*.txt" -fstype vfat 2> /dev/null
查找时间
find 命令有几个用于根据您系统的时间戳搜索文件的选项。这些时间戳包括
• mtime — 文件内容上次修改时间
• atime — 文件被读取或访问的时间
• ctime — 文件状态变化时间
mtime 和 atime 的含义都是很容易理解的,而 ctime 则需要更多的解释。由于 inode 维护着每个文件上的元数据,因此,如果与文件有关的元数据发生变化,则 inode 数据也将变化。这可能是由一系列操作引起的,包括创建到文件的符号链接、更改文件权限或移动了文件等。由于在这些情况下,文件内容不会被读取或修改,因此 mtime 和 atime 不会改变,但 ctime 将发生变化。
这些时间选项都需要与一个值 n 结合使用,指定为 -n、n 或 +n。
• -n 返回项小于 n
• +n 返回项大于 n
• n 返回项正好与 n 相等
下面,我们来看几个例子,以便于理解。以下命令将查找在最近 1 小时内修改的所有文件:
find . -mtime -1 ./plsql/FORALLSample ./plsql/RegExpDNASample /plsql/RegExpSample
用 1 取代 -1 运行同一命令将查找恰好在 1 小时以前修改的所有文件:
find . -mtime 1
上述命令不会生成任何结果,因为它要求完全吻合。以下命令查找 1 个多小时以前修改的所有文件:
find . -mtime +1
默认情况下,-mtime、-atime 和 -ctime 指的是最近 24 小时。但是,如果它们前面加上了开始时间选项,则 24 小时的周期将从当日的开始时间算起。您还可以使用 mmin、amin 和 cmin 查找在不到 1 小时的时间内变化了的时间戳。
如果您在登录到您的帐户后立即运行以下命令,您将找到在不到 1 分钟以前读取的所有文件:
find . -amin -1 ./.bashrc /.bash_history ./.xauthj5FCx1
应该注意的是,使用 find 命令查找文件本身将更改该文件的访问时间作为其元数据的一部分。
您还可以使用 -newer、-anewer 和 –cnewer 选项查找已修改或访问过的文件与特定的文件比较。这类似于 -mtime、-atime 和 –ctime。
• -newer 指内容最近被修改的文件
• -anewer 指最近被读取过的文件
• -cnewer 指状态最近发生变化的文件
要查找您的主目录中自上一个 tar 文件以来以某种方式编辑过的所有文件,使用以下命令:
find . -newer backup.tar.gz
按大小查找文件
-size 选项查找满足指定的大小条件的文件。要查找所有大于 5MB 的用户文件,使用
find / -size +5000000c 2> /dev/null /var/log/lastlog /var/log/cups/access_log.4 /var/spool/mail/bluher
结尾的“c”以字节为单位报告我们的结果。默认情况下,find 以 512 字节块的数量报告大小。如果我们将“c”替换为“k”,我们还会看到以千字节的数量报告的结果,如果使用“w”,则会看到以两字节字的数量报告的结果。
-size 选项经常用于搜索所有零字节文件并将它们移至 /tmp/zerobyte 文件夹。以下命令恰好可以完成这一任务:
find test -type f -size 0 -exec mv {} /tmp/zerobyte \;
-exec 操作允许 find 在它遇到的文件上执行任何 shell 命令。在本文的后面部分,您将看到其用法的更多示例。大括号允许移动每个空文件。
选项 -empty 还可用于查找空文件:
find test -empty test/foo test/test
按权限和所有者查找
要监视您的系统安全离不开 find 命令。您可以使用符号或八进制表示法查找面向广大用户开放的文件,如下所示:
find . -type f -perm a=rwx -exec ls -l {} \;
或者
find . -type f -perm 777 -exec ls -l {} \; -rwxrwxrwx 1 bluher users 0 May 24 14:14 ./test.txt
在这一部分中,在上面和下面的命令中,我们使用了 -exec ls -l 操作,因此,您可以看到返回的文件的实际权限。以下命令将查找可由“other”和组写入的文件:
find plsql -type f -perm -ug=rw -exec ls -l {} \; 2>/dev/null
或者
find plsql -type f -perm -220 -exec ls -l {} \; 2>/dev/null -rw-rw-rw- 1 bluher users 4303 Jun 7 2004 plsql/FORALLSample/doc/otn_new.css -rw-rw-rw- 1 bluher users 10286 Jan 12 2005 plsql/FORALLSample/doc/readme.html -rw-rw-rw- 1 bluher users 22647 Jan 12 2005 plsql/FORALLSample/src/config.sql ..
下一个命令将查找由用户、组或二者共同写入的文件:
find plsql -type f -perm /ug=rw -exec ls -l {} \; 2>/dev/null, or, find plsql -type f -perm /220 -exec ls -l {} \; 2>/dev/null -rw-r--r-- 1 bluher users 21473 May 3 16:02 plsql/regexpvalidate.zip -rw-rw-rw- 1 bluher users 4303 Jun 7 2004 plsql/FORALLSample/doc/otn_new.css -rw-rw-rw- 1 bluher users 10286 Jan 12 2005 plsql/FORALLSample/doc/readme.html -rw-rw-rw- 1 bluher users 22647 Jan 12 2005 plsql/FORALLSample/src/config.sql
您可能会看到以下命令在 Web 和较早的手册中引用过:
find . -perm +220 -exec ls -l {} \; 2> /dev/null
+ 符号的作用与 / 符号相同,但是现在新版 GNU findutils 中不支持使用该符号。
要查找您的系统上所有人都可以写入的所有文件,使用以下命令:
find / -wholename '/proc' -prune -o -type f -perm -0002 -exec ls -l {} \; -rw-rw-rw- 1 bluher users 4303 Jun 7 2004/home/bluher/plsql/FORALLSample/doc/otn_new.css -rw-rw-rw- 1 bluher users 10286 Jan 12 2005 /home/bluher/plsql/FORALLSample/doc/readme.html ...
第 4 个权限将在稍后进行讨论,但最后一个字段中的“2”是文件权限中的“other”字段,也称为写入位。我们在权限模式 0002 前面使用了破折号,以指明我们希望看到为 other 设置了写权限的文件,无论其他权限设置为什么。
上述命令还引入了三个新概念。针对文件模式“/proc”使用 -wholename 测试,如果该模式已找到,-prune 可防止 find 下到该目录中。布尔类型“-o”使 find 可以针对其他目录处理该命令的其余部分。由于每个表达式之间有一个假设的隐式 and 运算符 (-a),因此,如果左侧的表达式计算结果为 false, and 之后的表达式将不进行计算;因此需要 -o 运算符。Find 还支持布尔类型 -not、!,就像使用括号强行优先一样。
系统管理员经常使用 find 通过用户或组的名称或 ID 搜索特定用户或组的常规文件:
[root] $ find / -type f -user bluher -exec ls -ls {} \;
下面是这样一个命令的高度精简的输出示例:
4 -rw-r--r-- 1 bluher users 48 May 1 03:09 /home/bluher/public_html/.directory 4 -rw-r--r-- 1 bluher users 925 May 1 03:09 /home/bluher/.profile
您还可以使用 find 按组查找文件:
[root] $ find / -type f -group users
find / -type d -gid 100
该命令将列出由 ID 为 100 的组拥有的目录。要找到相应的 uid 或 gid,您可以针对 /etc/passwd 或 /etc/group 文件运行 more 或 cat 命令。
除了查找特定已知用户和组的文件外,您还会发现它对于查找没有这些信息的文件也很有用。下一个命令将识别未列在 /etc/passwd 或 /etc/group 文件中的文件:
find / -nouser -o -nogroup
上述命令可能不会在您的系统上生成实际的结果。但是,它可用于识别或许在经常移动后没有用户或组的文件。
好了,现在我们可以解决本部分开始时提到的格外重要的权限了。
SGID 和 SUID 是特殊访问权限标志,可以分配给基于 UNIX 的操作系统上的文件和目录。设置它们是为了允许访问计算机系统的普通用户使用临时提升的权限执行二进制可执行文件。
find / \( -perm -2000 -o -perm -4000 \) -ls 167901 12 -rwsr-xr-x 1 root root 9340 Jun 16 2006 /usr/bin/rsh 167334 12 -rwxr-sr-x 1 root tty 10532 May 4 2007 /usr/bin/wall
在上述命令中,您可以看到转义括号的使用。您还可以看到权限的不同。第一个文件设置了 SGID 权限,第二个文件设置了 SUID 权限。上述命令中的最后的操作与带 -exec ls -dils 操作的 find 效果类似。
控制 find
与 Linux 中的许多命令不同,find 不需要 -r 或 -R 选项即可下到子目录中。它默认情况下就这样操作。但是,有时您可能希望限制这一行为。因此,选项 -depth、-maxdepth 和 -mindepth 以及操作 -prune 就派上用场了。
我们已经看到了 -prune 是多么有用,下面让我们来看看 -depth、-maxdepth 和 -mindepth 选项。
-maxdepth 和 -mindepth 选项允许您指定您希望 find 搜索深入到目录树的哪一级别。如果您希望 find 只在目录的一个级别中查找,您可以使用 maxdepth 选项。
通过运行以下命令在目录树的前三个级别中查找日志文件,您可以看到 -maxdepth 的效果。使用该选项较之不使用该选项所生成的输出要少得多。
find / -maxdepth 3 -name "*log"
您还可以让 find 在至少下至目录树三个级别的目录中查找:
find / -mindepth 3 -name "*log"
-depth 选项确保先在一个目录中进行查找,然后才在其子目录中进行查找。以下命令提供了一个示例:
find -name "*test*" -depth ./test/test ./test ./localbin/test ./localbin/test_shell_var ./localbin/test.txt ./test2/test/test ./test2/test ./test2
find 世界
我们已经看过了 find 命令的一些更加有用以及有点难懂的功能,但是 find 还可以执行更多的任务。例如,有多个选项可以使 find 与较低的 UNIX 版本和其他操作系统相兼容并允许您执行打印输出到多个文件等操作。阅读本文后,您现在已经有了理解 find 参考指南的背景,我鼓励您深入研究这一强大、有用的工具。
原文:http://www.oracle.com/technetwork/cn/topics/calish-find-096463-zhs.html
搭建 nginx + mysql + php-fpm 环境(CentOS 6) Linux
前言:这几天帮朋友部署一个项目,一开始为了方便,(我懒-_-|),使用一键lanmp脚本部署,结果项目测试的时候bug一大堆...,声明:这不是说这些一键脚本不好,客观的来说,这些脚本用来建站,普通的单纯的站,一般没问题的,也很方便,但是部署项目,如果对这个脚本不是特别了解,特别了解,特别了解!重要的是说三遍...千万不要用,老实的手动部署环境吧....于是本想写一篇的,但是发现有人写了...就转载过来,存着当笔记吧.
本文档介绍如何使用一台普通配置的云服务器ECS实例搭建LNMP平台的web环境。
- Linux:自由和开放源码的类UNIX操作系统。
- Nginx:轻量级网页服务器、反向代理服务器。
- MySQL:关系型数据库管理系统。
- PHP:主要适用于Web开发领域的一种脚本语言。
适用对象
适用于熟悉Linux操作系统,刚开始使用阿里云进行建站的个人用户。
基本流程
使用云服务器 ECS 搭建LNMP平台的操作步骤如下:
- 准备编译环境
- 安装nginx
- 安装mysql
- 安装php-fpm
- 测试访问
步骤一:准备编译环境
1、系统版本说明
# cat /etc/redhat-release CentOS release 6.5 (Final)
注:这是本文档实施时参考的系统版本。您的实际使用版本可能与此不同,下文中的nginx,mysql,及php版本,您也可以根据实际情况选择相应版本。
2、关闭SELINUX
修改配置文件,重启服务后永久生效。
# sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
命令行设置立即生效。
# setenforce 0
3、安全组设置
在ECS安全组放行需访问的端口和访问白名单,下面的示例表示允许所有IP访问服务器的80端口。您可以根据实际情况放行允许访问的客户端IP。
步骤二:安装nginx
Nginx是一个小巧而高效的Linux下的Web服务器软件,是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,已经在一些俄罗斯的大型网站上运行多年,目前很多国内外的门户网站、行业网站也都在是使用Nginx,相当稳定。
1、下载源码包解压编译。
# wget http://nginx.org/download/nginx-1.10.2.tar.gz # tar xvf nginx-1.10.2.tar.gz -C /usr/local/src # yum groupinstall "Development too # yum -y install gcc wget gcc-c++ automake autoconf libtool libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed pcre-devel openssl-devel # cd /usr/local/src/nginx-1.10.2 # ./configure \ --prefix=/usr/local/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --http-client-body-temp-path=/var/tmp/nginx/client \ --http-proxy-temp-path=/var/tmp/nginx/proxy \ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi \ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ --http-scgi-temp-path=/var/tmp/nginx/scgi \ --user=nginx \ --group=nginx \ --with-pcre \ --with-http_v2_module \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_stub_status_module \ --with-http_auth_request_module \ --with-mail \ --with-mail_ssl_module \ --with-file-aio \ --with-ipv6 \ --with-http_v2_module \ --with-threads \ --with-stream \ --with-stream_ssl_module # make && make install # mkdir -pv /var/tmp/nginx/client2、添加SysV启动脚本。
# vim /etc/init.d/nginx #!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /etc/nginx/nginx.conf # config: /etc/sysconfig/nginx # pidfile: /var/run/nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/etc/nginx/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval killall -9 nginx } restart() { configtest || return $? stop sleep 1 start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac3、赋予脚本执行权限。
# chmod +x /etc/init.d/nginx
4、添加至服务管理列表,设置开机自启。
# chkconfig --add nginx # chkconfig nginx on5、启动服务。
# service nginx start
6、浏览器访问可看到默认欢迎页面。
步骤三:安装mysql
1、准备编译环境。
# yum groupinstall "Server Platform Development" "Development tools" -y # yum install cmake -y2、准备mysql数据存放目录。
# mkdir /mnt/data # groupadd -r mysql # useradd -r -g mysql -s /sbin/nologin mysql # id mysql uid=497(mysql) gid=498(mysql) groups=498(mysql)3、更改数据目录属主属组。
# chown -R mysql:mysql /mnt/data
4、解压编译官网下载稳定版的源码包。
# tar xvf mysql-5.6.24.tar.gz -C /usr/local/src # cd /usr/local/src/mysql-5.6.24 # cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/mnt/data \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DWITH_LIBWRAP=0 \ -DMYSQL_TCP_PORT=3306 \ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci # make && make install5、修改安装目录的属组为mysql。
# chown -R mysql:mysql /usr/local/mysql/
6、初始化数据库。
# /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mnt/data/
注:在CentOS 6.5版操作系统的最小安装完成后,在/etc目录下会存在一个my.cnf,需要将此文件更名为其他的名字,如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的MySQL的正确配置,造成无法启动。
7、拷贝配置文件和启动脚本。
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # chmod +x /etc/init.d/mysqld # cp support-files/my-default.cnf /etc/my.cnf8、设置开机自动启动。
# chkconfig mysqld on # chkconfig --add mysqld9、修改配置文件中的安装路径及数据目录存放路径。
# echo -e "basedir = /usr/local/mysql\ndatadir = /mnt/data\n" >> /etc/my.cnf
10、设置PATH环境变量。
# echo "export PATH=$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.sh # source /etc/profile.d/mysql.sh11、启动服务。
# service mysqld start # mysql -h 127.0.0.1步骤四:安装php-fpm
Nginx本身不能处理PHP,作为web服务器,当它接收到请求后,不支持对外部程序的直接调用或者解析,必须通过FastCGI进行调用。如果是PHP请求,则交给PHP解释器处理,并把结果返回给客户端。PHP-FPM是支持解析php的一个FastCGI进程管理器。提供了更好管理PHP进程的方式,可以有效控制内存和进程、可以平滑重载PHP配置。
1、安装依赖包。
# yum groupinstall "X Software Development" # yum install libmcrypt libmcrypt-devel mhash mhash-devel libxml2 libxml2-devel bzip2 bzip2-devel2、解压官网下载的源码包,编译安装。
# tar xvf php-5.6.23.tar.bz2 -C /usr/local/src # cd /usr/local/src/php-5.6.23 # ./configure --prefix=/usr/local/php \ --with-config-file-scan-dir=/etc/php.d \ --with-config-file-path=/etc \ --with-mysql=/usr/local/mysql \ --with-mysqli=/usr/local/mysql/bin/mysql_config \ --enable-mbstring \ --with-freetype-dir \ --with-jpeg-dir \ --with-png-dir \ --with-zlib \ --with-libxml-dir=/usr \ --with-openssl \ -enable-xml \ --enable-sockets \ --enable-fpm \ --with-mcrypt \ --with-bz2 # make && make install3、添加php和php-fpm配置文件。
# cp /usr/local/src/php-5.6.23/php.ini-production /etc/php.ini # cd /usr/local/php/etc/ # cp php-fpm.conf.default php-fpm.conf # sed -i 's@;pid = run/php-fpm.pid@pid = /usr/local/php/var/run/php-fpm.pid@' php-fpm.conf4、添加php-fpm启动脚本。
# cp /usr/local/src/php-5.6.23/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm # chmod +x /etc/init.d/php-fpm5、添加php-fpm至服务列表并设置开机自启。
# chkconfig --add php-fpm # chkconfig --list php-fpm # chkconfig php-fpm on6、启动服务。
# service php-fpm start
7、添加nginx对fastcgi的支持,首先备份默认的配置文件。
# cp /etc/nginx/nginx.conf /etc/nginx/nginx.confbak # cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf编辑/etc/nginx/nginx.conf,在所支持的主页面格式中添加php格式的主页,类似如下:
location / { root /usr/local/nginx/html; index index.php index.html index.htm; }取消以下内容前面的注释:
location ~ \.php$ { root /usr/local/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; }重新载入nginx的配置文件。
# service nginx reload
在/usr/local/nginx/html/新建index.php的测试页面,内容如下。
# cat index.php <?php $conn=mysql_connect('127.0.0.1','root',''); if ($conn){ echo "LNMP platform connect to mysql is successful!"; }else{ echo "LNMP platform connect to mysql is failed!"; } phpinfo(); ?>
浏览器访问测试,如看到以下内容则表示LNMP平台构建完成。
原文地址:https://help.aliyun.com/document_detail/50700.html
推荐安全且匿名的邮箱 ProtonMail 网络安全
以前,我们一直想寻找安全靠谱的邮箱服务,Gmail 是首选,原因主要有几个:
-
Google 这个大品牌的背书
-
安全确实做得很好,关于这点我们尤其在意前端安全是否做得足够,比如对抗 XSS/CSRF 的策略,这在邮箱攻击里是常用的手法。另外在很多安全细节上很具备前瞻性,如:全域 HTTPS 策略、Cookie 策略、内容分离策略、账号风控策略、图片安全策略、恶意内容对抗策略、等等
-
漏洞奖金计划很良心,基本是这种风气的鼻祖
这次,我们推荐的 ProtonMail 邮箱,虽然我们不能保证上面几点达到 Gmail 的层级,但是整体来说,我们还是觉得挺靠谱的,尤其有下面这几个特点。
-
开源,这点就已经让人多少放心些
-
点对点加密策略,这种对称加密算法几乎可以完美对抗中间人劫持(MITM),包括对 PGP 的支持,在我们看来也是一种很漂亮的方案
-
注册再也不需要你的个人任何隐私,比如手机号,这意味着,几乎完全一个匿名邮件是可以的
-
服务器坐落在瑞士,一个重视隐私且中立的国家,法律这方面很有保障,服务器的安全建设等级据说也很高
-
你可以选择是否开启更强的登陆日志记录,默认不会记录 IP
-
也有不错的漏洞奖金计划
-
在安全性上,对比我们上面提到 Gmail 的做法,ProtonMail 的做法更加让我们感到惊讶,这种做法能感受到 ProtonMail 在安全及隐私这方面的极致态度。我们这先不展开,因为我们计划去夺一轮漏洞奖金再说
-
支持 TOR 网络下的邮件服务,这下真可以做到完全匿名了。不要和我们提黑天鹅事件,我们懂
-
有对应移动端的 App
-
用户体验也是 ProtonMail 的极致追求
-
免费,但是你可以付费得到更好的服务,比如可以自定义域名,如果你想支持 ProtonMail 发展得更好,可以付费升级,也可以捐助
-
斯诺登也有在用这个服务...
-
创始团队出自大名鼎鼎的 CERN(欧洲核子研究组织),科学家,怪不得命名了 ProtonMail(质子邮箱),TED 及 Wikipedia 上可以看到他们的介绍,包括演讲
之前,我们确实有犹豫是否推荐这个邮箱服务,你们知道,有些东西并不是越多人知道越好,尤其是我朝特殊的情况。但我们相信,进化的步伐是永远不会停止的,我们不需要作恶,但是我们至少需要知道如何对抗很多藏在阴暗处的作恶。
我们这篇推荐不是在给 ProtonMail 做背书,是否使用,看你。
希望 ProtonMail 越来越好,也希望这个互联网越来越好。
ProtanMail 官网:
https://protonmail.com/
TOR地址:https://protonirockerxow.onion/。
一套实用的渗透测试岗位面试题,你会吗? 渗透测试
1.拿到一个待检测的站,你觉得应该先做什么?
-
收集信息
whois、网站源IP、旁站、C段网站、服务器系统版本、容器版本、程序版本、数据库类型、二级域名、防火墙、维护者信息另说...
2.mysql的网站注入,5.0以上和5.0以下有什么区别?
-
5.0以下没有information_schema这个系统表,无法列表名等,只能暴力跑表名。
-
5.0以下是多用户单操作,5.0以上是多用户多操做。
3.在渗透过程中,收集目标站注册人邮箱对我们有什么价值?
-
丢社工库里看看有没有泄露密码,然后尝试用泄露的密码进行登录后台。
-
用邮箱做关键词进行丢进搜索引擎。
-
利用搜索到的关联信息找出其他邮进而得到常用社交账号。
-
社工找出社交账号,里面或许会找出管理员设置密码的习惯 。
-
利用已有信息生成专用字典。
-
观察管理员常逛哪些非大众性网站,拿下它,你会得到更多好东西。
4.判断出网站的CMS对渗透有什么意义?
-
查找网上已曝光的程序漏洞。
-
如果开源,还能下载相对应的源码进行代码审计。
5.一个成熟并且相对安全的CMS,渗透时扫目录的意义?
-
敏感文件、二级目录扫描
-
站长的误操作比如:网站备份的压缩文件、说明.txt、二级目录可能存放着其他站点
6.常见的网站服务器容器。
-
IIS、Apache、nginx、Lighttpd、Tomcat
7.mysql注入点,用工具对目标站直接写入一句话,需要哪些条件?
-
root权限以及网站的绝对路径。
8.目前已知哪些版本的容器有解析漏洞,具体举例。
-
IIS 6.0
/xx.asp/xx.jpg "xx.asp"是文件夹名
-
IIS 7.0/7.5
默认Fast-CGI开启,直接在url中图片地址后面输入/1.php,会把正常图片当成php解析
-
Nginx
版本小于等于0.8.37,利用方法和IIS 7.0/7.5一样,Fast-CGI关闭情况下也可利用。
空字节代码 xxx.jpg%00.php
-
Apache
上传的文件命名为:test.php.x1.x2.x3,Apache是从右往左判断后缀
-
lighttpd
xx.jpg/xx.php,不全,请小伙伴们在评论处不吝补充,谢谢!
9.如何手工快速判断目标站是windows还是linux服务器?
-
linux大小写敏感,windows大小写不敏感。
10.为何一个mysql数据库的站,只有一个80端口开放?
-
更改了端口,没有扫描出来。
-
站库分离。
-
3306端口不对外开放
11.3389无法连接的几种情况。
-
没开放3389 端口
-
端口被修改
-
防护拦截
-
处于内网(需进行端口转发)
12.如何突破注入时字符被转义?
-
宽字符注入
-
hex编码绕过
13.在某后台新闻编辑界面看到编辑器,应该先做什么?
-
查看编辑器的名称版本,然后搜索公开的漏洞。
14.拿到一个webshell发现网站根目录下有.htaccess文件,我们能做什么?
-
能做的事情很多,用隐藏网马来举例子:
插入
<FilesMatch "xxx.jpg"> SetHandler application/x-httpd-php </FilesMatch>
.jpg文件会被解析成.php文件。 -
具体其他的事情,不好详说,建议大家自己去搜索语句来玩玩。
15.注入漏洞只能查账号密码?
-
只要权限广,拖库脱到老。
16.安全狗会追踪变量,从而发现出是一句话木马吗?
-
是根据特征码,所以很好绕过了,只要思路宽,绕狗绕到欢,但这应该不会是一成不变的。
17.access 扫出后缀为asp的数据库文件,访问乱码。如何实现到本地利用。
-
迅雷下载,直接改后缀为.mdb。
18.提权时选择可读写目录,为何尽量不用带空格的目录?
-
因为exp执行多半需要空格界定参数
19.某服务器有站点A,B 为何在A的后台添加test用户,访问B的后台。发现也添加上了test用户?
-
同数据库。
20.注入时可以不使用and 或or 或xor,直接order by 开始注入吗?
-
and/or/xor,前面的1=1、1=2步骤只是为了判断是否为注入点,如果已经确定是注入点那就可以省那步骤去。
21:某个防注入系统,在注入时会提示:
系统检测到你有非法注入的行为。
已记录您的ip xx.xx.xx.xx
时间:2016:01-23
提交页面:test.asp?id=15
提交内容:and 1=1
如何利用这个防注入系统拿shell?
-
在URL里面直接提交一句话,这样网站就把你的一句话也记录进数据库文件了 这个时候可以尝试寻找网站的配置文件 直接上菜刀链接。具体文章参见:http://ytxiao.lofter.com/post/40583a_ab36540。
22.上传大马后访问乱码时,有哪些解决办法?
-
浏览器中改编码。
23.审查上传点的元素有什么意义?
-
有些站点的上传文件类型的限制是在前端实现的,这时只要增加上传类型就能突破限制了。
24.目标站禁止注册用户,找回密码处随便输入用户名提示:“此用户不存在”,你觉得这里怎样利用?
-
先爆破用户名,再利用被爆破出来的用户名爆破密码。
-
其实有些站点,在登陆处也会这样提示
-
所有和数据库有交互的地方都有可能有注入。
25.目标站发现某txt的下载地址为http://www.test.com/down/down.php?file=/upwdown/1.txt,你有什么思路?
-
这就是传说中的下载漏洞!在file=后面尝试输入index.php下载他的首页文件,然后在首页文件里继续查找其他网站的配置文件,可以找出网站的数据库密码和数据库的地址。
26.甲给你一个目标站,并且告诉你根目录下存在/abc/目录,并且此目录下存在编辑器和admin目录。请问你的想法是?
-
直接在网站二级目录/abc/下扫描敏感文件及目录。
27.在有shell的情况下,如何使用xss实现对目标站的长久控制?
-
后台登录处加一段记录登录账号密码的js,并且判断是否登录成功,如果登录成功,就把账号密码记录到一个生僻的路径的文件中或者直接发到自己的网站文件中。(此方法适合有价值并且需要深入控制权限的网络)。
-
在登录后才可以访问的文件中插入XSS脚本。
28.后台修改管理员密码处,原密码显示为*。你觉得该怎样实现读出这个用户的密码?
-
审查元素 把密码处的password属性改成text就明文显示了
29.目标站无防护,上传图片可以正常访问,上传脚本格式访问则403.什么原因?
-
原因很多,有可能web服务器配置把上传目录写死了不执行相应脚本,尝试改后缀名绕过
30.审查元素得知网站所使用的防护软件,你觉得怎样做到的?
-
在敏感操作被拦截,通过界面信息无法具体判断是什么防护的时候,F12看HTML体部 比如护卫神就可以在名称那看到
<hws>内容<hws>
。
31.在win2003服务器中建立一个 .zhongzi文件夹用意何为?
-
隐藏文件夹,为了不让管理员发现你传上去的工具。
32、sql注入有以下两个测试选项,选一个并且阐述不选另一个的理由:
A. demo.jsp?id=2+1 B. demo.jsp?id=2-1
选B,在 URL 编码中 + 代表空格,可能会造成混淆
33、以下链接存在 sql 注入漏洞,对于这个变形注入,你有什么思路?
demo.do?DATA=AjAxNg==
DATA有可能经过了 base64 编码再传入服务器,所以我们也要对参数进行 base64 编码才能正确完成测试
34、发现 demo.jsp?uid=110 注入点,你有哪几种思路获取 webshell,哪种是优选?
有写入权限的,构造联合查询语句使用using INTO OUTFILE,可以将查询的输出重定向到系统的文件中,这样去写入 WebShell
使用 sqlmap –os-shell 原理和上面一种相同,来直接获得一个 Shell,这样效率更高
通过构造联合查询语句得到网站管理员的账户和密码,然后扫后台登录后台,再在后台通过改包上传等方法上传 Shell
35、CSRF 和 XSS 和 XXE 有什么区别,以及修复方式?
XSS是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。修复方式:对字符实体进行转义、使用HTTP Only来禁止JavaScript读取Cookie值、输入时校验、浏览器与Web应用端采用相同的字符编码。
CSRF是跨站请求伪造攻击,XSS是实现CSRF的诸多手段中的一种,是由于没有在关键操作执行时进行是否由用户自愿发起的确认。修复方式:筛选出需要防范CSRF的页面然后嵌入Token、再次输入密码、检验Referer
XXE是XML外部实体注入攻击,XML中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。修复方式:XML解析库在调用时严格禁止对外部实体的解析。
36、CSRF、SSRF和重放攻击有什么区别?
CSRF是跨站请求伪造攻击,由客户端发起
SSRF是服务器端请求伪造,由服务器发起
重放攻击是将截获的数据包进行重放,达到身份认证等目的
37、说出至少三种业务逻辑漏洞,以及修复方式?
密码找回漏洞中存在密码允许暴力破解、存在通用型找回凭证、可以跳过验证步骤、找回凭证可以拦包获取等方式来通过厂商提供的密码找回功能来得到密码
身份认证漏洞中最常见的是会话固定攻击和 Cookie 仿冒,只要得到 Session 或 Cookie 即可伪造用户身份
验证码漏洞中存在验证码允许暴力破解、验证码可以通过 Javascript 或者改包的方法来进行绕过
38、圈出下面会话中可能存在问题的项,并标注可能会存在的问题?
get /ecskins/demo.jsp?uid=2016031900&keyword=”hello world”
HTTP/1.1Host:*******.com:82User-Agent:Mozilla/ 5.0 Firefox/40Accept:text/css,*/*;q=0.1
Accept-Language:zh-CN;zh;q=0.8;en-US;q=0.5,en;q=0.3
Referer:http://*******.com/eciop/orderForCC/
cgtListForCC.htm?zone=11370601&v=145902
Cookie:myguid1234567890=1349db5fe50c372c3d995709f54c273d;
uniqueserid=session_OGRMIFIYJHAH5_HZRQOZAMHJ;
st_uid=N90PLYHLZGJXI-NX01VPUF46W;
status=True
Connection:keep-alive
39、找一类你最擅长的漏洞,谈下绕过漏洞修复后的方案?
40、你常用的渗透工具有哪些,最常用的是哪个?
41、描述一个你深入研究过的 CVE 或 POC。
42、谈谈你经常关注的安全平台?