BoxCore

Start


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 站点地图

  • 搜索

LNMP1.4脚本分析

发表于 2017-10-25 | | 阅读次数

/bin/lnmp 分析

1
2
#获取vhost列表:
ls /usr/local/nginx/conf/vhost/ | grep ".conf$" | sed 's/.conf//g'

JAVA基础

发表于 2017-10-15 | | 阅读次数

编程语言学习

发表于 2017-10-15 | | 阅读次数

今天心血来潮想复习java了,毕竟好久忘记了,这里有个编译语言的分类,用来记录复习的每一章java吧。

也给自己一个期限,2017年前完成(20171015 ~ 20171231)

Linux网络命令之ssh安全控制fail2ban

发表于 2017-10-12 | | 阅读次数

一、安装

1
2
sudo yum install fail2ban # CentOS/RHEL/Fedora上安装fail2ban
sudo apt-get install fail2ban # ubuntu,Debian 或 Linux Mint

二、配置

新建文件/etc/fail2ban/jail.local 用来配置其安全规则

sudo vi /etc/fail2ban/jail.local

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[DEFAULT]
# 以空格分隔的列表,可以是 IP 地址、CIDR 前缀或者 DNS 主机名
# 用于指定哪些地址可以忽略 fail2ban 防御
ignoreip = 127.0.0.1 172.31.0.0/24 10.10.0.0/24 192.168.0.0/24
# 客户端主机被禁止的时长(秒)
bantime = 86400
# 客户端主机被禁止前允许失败的次数
maxretry = 5
# 查找失败次数的时长(秒)
findtime = 600
mta = sendmail
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=your@email.com, sender=fail2ban@email.com]
# Debian 系的发行版
logpath = /var/log/auth.log
# Red Hat 系的发行版
logpath = /var/log/secure
# ssh 服务的最大尝试次数
maxretry = 3

三、常用命令

1
2
3
4
5
6
7
8
9
10
11
12
sudo service fail2ban restart # Debian, Ubuntu 或 CentOS/RHEL 6
sudo systemctl restart fail2ban # 在 Fedora 或 CentOS/RHEL 7:
sudo fail2ban-client status # 检验fail2ban状态
sudo fail2ban-client status ssh-iptables # 检验一个特定监狱的状态,会显示出被禁止IP地址列表
sudo fail2ban-client ping # 验证fail2ban成功运行,你可以看到“pong(嘭)”作为响应
sudo tail -f /var/log/fail2ban.log # 该文件记录在fail2ban中发生的任何敏感事件
sudo iptables --list -n # 检测当前iptables来验证禁止规则
sudo iptables -D fail2ban-SSH -s 192.168.1.8 -j DROP # 从fail2ban中解锁某个IP地址

注意,如果你停止了Fail2ban 服务,那么所有的IP地址都会被解锁。当你重启 Fail2ban,它会从/etc/log/secure(或 /var/log/auth.log)中找到异常的IP地址列表,如果这些异常地址的发生时间仍然在禁止时间内,那么Fail2ban会重新将这些IP地址禁止。

3.1 设置 Fail2ban 自动启动

1
2
sudo chkconfig fail2ban on
sudo systemctl enable fail2ban

压缩命令之rar、unrar

发表于 2017-10-12 | | 阅读次数

rar是一个商业软件,但有时候我们需要在linux 下做批量操作,这时候就需要用到命令,下面我们来说说rar、unrar在命令行下的一些操作,希望对你们有所帮助!

一、安装winrar

winrar从v5开始,只提供window和linux版的,而linux版只提供二进制文件,这样我们就可以直接在命令行进行操作。比如在terminal下压缩文件a.xls到文件 a.xls.rar中,语法如下:

rar a ‘a.xls.rar’ ‘a.xls’ #

使用起来非常简单,类似linux下的tar

参考:

  • http://blog.csdn.net/randomlife/article/details/113102

其他常用的rar语法:

1
rar -p a target.rar files.. # 带密码压缩rar,会询问2次密码

二、配置

2.1 key配置

WinRAR, RAR for Unix and OS X now use the same registration key format, so you can use the same key with current WinRAR and RAR versions for all mentioned platforms.
so Yes, it is possible.

Further, it also states where to copy the key:

If you use RAR/Unix and RAR for OS X, you should copy rarreg.key to your home directory or to one of the following directories: /etc, /usr/lib, /usr/local/lib, /usr/local/etc. You may rename it to .rarreg.key or .rarregkey, if you wish, but rarreg.key is also valid.

参考:https://superuser.com/questions/1089501/how-to-transfer-winrar-key-to-linux

分享我的rarreg.key:

1
2
3
4
5
6
7
8
9
10
11
RAR registration data
Admin
Unlimited Company License
UID=1d7426b0b166c91c21ab
641221225021abd0925f7c70456ecd71f724a7f5a00b0a0f7d19ee
45c5e20951dae2857c2960fce6cb5ffde62890079861be57638717
7131ced835ed65cc743d9777f2ea71a8e32c7e593cf66794343565
b41bcf56929486b8bcdac33d50ecf773996076c281ccab247f6153
ed97a3e4a4cb9bffbf35ed364a5cc6908fd2cdc84e9f53a33cf463
9d85cd75291397987399f5159745c84654dfd11e471ec7a360b22a
bbaf66105e62e8afa2d5d154b0c164b1f5377d2975460025531542

然后复制或添加软链接到配置目录,你可能要执行这样的命令:

1
ln -sfv /workspace/bin/winrar/rarreg.key /usr/local/etc/rarreg.key # mac

homebrew的安装与使用

发表于 2017-10-12 | | 阅读次数

homebrew是mac下非常不错的包管理软件,类似centos下的yum吧,下面说说他的安装及基础使用。

一、安装homebrew

二、配置homebrew

2.1 修改homebrew镜像

默认的,homebrew是使用github作为代码源,同步的时候会比较慢,所以就有了备选方案 - 使用USTC提供的homebrew镜像。具体操作可以看这篇文章《替换及重置Homebrew默认源》

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
替换brew.git:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
替换homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
重置brew.git:
cd "$(brew --repo)"
git remote set-url origin https://github.com/Homebrew/brew.git
重置homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://github.com/Homebrew/homebrew-core.git

三、常用homebrew工具

  • brew install inetutils: inetutils里面包含ftp工具,具体可以看一看GNU软件包列表,里面介绍了inetutils网络工具组包含了ftp,telnet,rsh,rlogin,tftp。所以,mac只要安装inetutils就可以了。

Linux文件操作命令之文件属性chattr

发表于 2017-10-10 | | 阅读次数

Linux chattr命令用于改变文件属性。通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性。

这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:

  • a:让文件或目录仅供附加用途。
  • b:不更新文件或目录的最后存取时间。
  • c:将文件或目录压缩后存放。
  • d:将文件或目录排除在倾倒操作之外。
  • i:不得任意更动文件或目录。
  • s:保密性删除文件或目录。
  • S:即时更新文件或目录。
  • u:预防以外删除。

语法

chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录…]

参数

-R 递归处理,将指定目录下的所有文件及子目录一并处理。
-v<版本编号> 设置文件或目录版本。
-V 显示指令执行过程。
+<属性> 开启文件或目录的该项属性。
-<属性> 关闭文件或目录的该项属性。
=<属性> 指定文件或目录的该项属性。

实例

  1. 用chattr命令防止系统中某个关键文件被修改:
    chattr +i /etc/resolv.conf
    lsattr /etc/resolv.conf
    会显示如下属性
    —-i——– /etc/resolv.conf
  1. 让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:
    chattr +a /var/log/messages

参考

  • (总结)Linux的chattr与lsattr命令详解

Linux网络命令之防火墙控制iptables

发表于 2017-10-10 | | 阅读次数

配置防火墙规则文件: /etc/sysconfig/iptables

启动和关闭防火墙: service iptables restart|start|stop

在防火墙中,来往的数据流被称为IP压缩(本文下面也称数据流为IP压缩)。防火墙有三条缺省规则链来过滤IP压缩,分别为:

INPUT:所有以主机为目的地的IP压缩
OUTPUT:所有以主机为源的IP压缩
FORWARD:所有经过主机,但是既不是以主机为源,也不是以主机为目的地的压缩

而我们最关注的是INPUT规则,这样可以屏蔽一些黑客行为,或者局域网共享。下面以centOS 6.5的默认规则为例子,讲解下各条规则大概的意思:

-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

-m 选项: 装入一个模块(state)。state 模块能够查看一个压缩并判断它的状态是 NEW、ESTABLISHED 还是 RELATED。
NEW 指內进的压缩属于不是由主机主导的新增连接。
ESTABLISHED 及 RELATED 指內进的压缩隶属于一条现存的连接,或者与现存的连接有关系。

这条规则的意思是:以本主机为目的地的IP压缩,如果隶属于现有的连接,则接受(accept)

-A INPUT -p icmp -j ACCEPT

表示接受icmp协议的IP压缩,icmp协议主要是ping,很多同学在局域网能ping通一台机器,但是无法通过web访问,就是因为开启了icmp协议,但是http等协议没有开,后面会讲解如何解决这个问题

-A INPUT -i lo -j ACCEPT

这条规则表示接受那些来自本机(localhost或者127.0.0.1的IP压缩)

-A INPUT -m state –state NEW -m tcp  -p tcp –dport 22 -j ACCEPT

表示表示接受不是由本机引导的新增的,基于端口号22的连接(句子有点长,仔细体会哈)。22端口是ssh连接用的,所以如果你想远程操作机器,需要开启端口22

-A INPUT -j REJECT –reject-with icmp-host-prohibited

表示拒绝来自已经被禁止的主机的icmp的IP压缩

-A FORWARD -j REJECTED –reject-with icmp-host-prohibited

表示拒绝经过本机且源自那些已经被禁止的主机的icmp的IP压缩

下面再详细说说各个参数的意思:

-A:表示添加一条规则(add)

相应的还有:-P(设置规则的缺省值,比如-P INPUT ACCEPT表示没有以本机为目的地的IP压缩默认是接受的)

-F(清楚所有存在的规则,好添加新的规则)

-j:表示满足规则执行的相应的操作,意为jump,比如 ……-j ACCEPT就表示满足相应的规则就接受

-i:界面的意思(interface),lo是本机的意思(localhost)

注意,编辑完iptables文件之后,使用service iptables restart重启防火墙,可以使用命令:iptables -L查看规则是否生效

或者使用命令行

(1)重启后永久性生效:

开启:chkconfig iptables on
关闭:chkconfig iptables off

(2)即时生效,重启后失效:

开启:service iptables start
关闭:service iptables stop

比如局域网中搭建了一台centOS作为服务器,并且建立了LAMP或者LNMP环境,想让局域网中的其他人都能通过web访问该机器,那么先得固定机器的IP地址,将BOOTPROTO改成static,然后将IPADDR设置一个固定的IP(比如192.168.1.22),在设置子网掩码NETMASK(比如255.255.255.0),NETWORK和GATAWAY和DNS等也设置好,然后就是信任来自本局域网的访问了,添加下面的规则到iptables中,再重启防火墙即可。具体如何配置网络看这里:CentOS网络配置详解

-A INPUT -i eth0 -j ACCEPT                                       #eth0是你的网卡号,用ifconfig -a命令查看你自己的网卡号

或者你想信任来自一系列IP的访问,可以用斜线记法规定IP的范围,比如:

-A INPUT -s 192.168.1.0/24 -j ACCEPT                #即接受来自192.168.1.0-192.168.1.255的ip区段的IP压缩

或者为每一个IP添加一条规则,但是当IP比较多时会很麻烦,比如

-A INPUT -s 192.168.1.22 -j ACCEPT

打开80端口的规则

-A INPUT -p tcp –dport 80 -j ACCEPT

参考

  • https://www.awaimai.com/1650.html

Linux查看服务器基础信息

发表于 2017-10-10 | | 阅读次数

一、查看系统信息

  • who: 查看服务器当前登陆的用户
  • who /var/log/wtmp
  • arp: 查看服务器mac信息
  • cat /var/log/secure : 查看最近有谁登陆过服务器,也可以看ssh登陆失败日志
  • finger: 需要安装该命令才可以使用,用于查看并显示指定帐号的用户相关信息

lastlog

cat /var/log/lastlog

lastlog文件在每次有用户登录时被查询。可以使用lastlog命令检查某特定用户上次登录的时间,并格式化输出上次登录日志/var/log/lastlog的内容

另外,可加一些参数,例如,”last -u 102”命令将报告UID为102的用户;”last -t 7”命令表示限制为上一周的报告。

查看LINUX发行版的名称及其版本号的命令

1
2
3
cat /etc/issue
lsb_release -a
cat /etc/redhat-release # 针对redhat,Fedora

二、系统配置

2.1 修改主机名称

centos 7 修改主机名称

hostnamectl set-hostname fastdfs-1
要永久修改主机名,你可以修改静态主机名:hostnamectl --static set-hostname [主机名]

通过文件配置主机名:
需要修改2个文件: /etc/hostsname 和 /etc/hosts

centos 6修改主机名称

vi /etc/sysconfig/network
修改项目:HOSTNAME

使用sysctl修改:

sysctl kernel.hostname=your.name

其他系统修改

  • debain/ubuntu修改地址:/etc/hostname

2.2 修改系统语言

配置文件地址:/etc/sysconfig/i18n

Linux流程控制语句之if

发表于 2017-10-10 | | 阅读次数

语法:

if ….; then
  ….
elif ….; then
  ….
else
  ….
fi

[ -f “somefile” ] :判断是否是一个文件
[ -x “/bin/ls” ] :判断/bin/ls是否存在并有可执行权限
[ -n “$var” ] :判断$var变量是否有值
[ “$a” = “$b” ] :判断$a和$b是否相等
-r file     用户可读为真
  -w file     用户可写为真
  -x file     用户可执行为真
  -f file     文件为正规文件为真
  -d file     文件为目录为真
  -c file     文件为字符特殊文件为真
  -b file     文件为块特殊文件为真
  -s file     文件大小非0时为真
  -t file     当文件描述符(默认为1)指定的设备为终端时为真

含条件选择的shell脚本 对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。基本的if条件命令选项有: - eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
-ne —比较两个参数是否不相等
-lt —参数1是否小于参数2
-le —参数1是否小于等于参数2
-gt —参数1是否大于参数2
-ge —参数1是否大于等于参数2
-f — 检查某文件是否存在(例如,if [ -f “filename” ])
-d — 检查目录是否存在
几乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。 ##################################################################
判断文件是否存在

#!/bin/sh
YACCESS=date -d yesterday +%Y%m%d
FILE=”access_$YACCESS.log.tgz”
cd /data/nginx/logs
if [ -f “$FILE” ];then
echo “OK”
else
echo “error $FILE” > error.log
mail -s “$FILE backup fail” xxxx@yyyy.com <error.log
fi

###############

#!/bin/sh

#
DIR=/data/img_cache
DAY=date +"%Y-%m-%d %H:%M"
NUM=ls $DIR |wc -l
DIRNAME=ls $DIR| grep leveldb | head -n 1 | awk '{print $NF}'
if [[ $NUM -gt 3 ]];then
rm -rf $DIR/$DIRNAME
echo “———$DAY—-($DIR)———————–” >> /tmp/img_cache.log
echo “$DIRNAME Deleted successful” >> /tmp/img_cache.log
fi
补充:文件测试操作:
返回true,如果:
-e 文件存在
-a 文件存在(已被弃用)
-f 被测文件是一个regular文件(正常文件,非目录或设备)
-s 文件长度不为0
-d 被测对象是目录
-b 被测对象是块设备
-c 被测对象是字符设备
-p 被测对象是管道
-h 被测文件是符号连接
-L 被测文件是符号连接
-S(大写) 被测文件是一个socket
-t 关联到一个终端设备的文件描述符。用来检测脚本的stdin[-t0]或[-t1]是一个终端
-r 文件具有读权限,针对运行脚本的用户
-w 文件具有写权限,针对运行脚本的用户
-x 文件具有执行权限,针对运行脚本的用户
-u set-user-id(suid)标志到文件,即普通用户可以使用的root权限文件,通过chmod +s file实现
-k 设置粘贴位
-O 运行脚本的用户是文件的所有者
-G 文件的group-id和运行脚本的用户相同
-N 从文件最后被阅读到现在,是否被修改
f1 -nt f2 文件f1是否比f2新
f1 -ot f2 文件f1是否比f2旧
f1 -ef f2 文件f1和f2是否硬连接到同一个文件
二元比较操作符,比较变量或比较数字
整数比较:
-eq 等于 if [ “$a” -eq “$b” ]
-ne 不等于 if [ “$a” -ne “$b” ]
-gt 大于 if [ “$a” -gt “$b” ]
-ge 大于等于 if [ “$a” -ge “$b” ]
-lt 小于 if [ “$a” -lt “$b” ]
-le 小于等于 if [ “$a” -le “$b” ]
< 小于(需要双括号) (( “$a” < “$b” ))
<= 小于等于(…) (( “$a” <= “$b” ))

大于(...)                      (( "$a" > "$b" ))

= 大于等于(…) (( “$a” >= “$b” ))
字符串比较:
= 等于 if [ “$a” = “$b” ]
== 与=等价
!= 不等于 if [ “$a” = “$b” ]
< 小于,在ASCII字母中的顺序:
if [[ “$a” < “$b” ]]
if [ “$a” \< “$b” ] #需要对<进行转义
大于
-z 字符串为null,即长度为0
-n 字符串不为null,即长度不为0

二、语法

在“判断条件”这个字段里可以直接写入bash下的命令、也可以写成条件测试
在判断条件中要进行条件测试:

条件测试方式:

“[ expression ]”一个中括弧里写表达式,
“[[ expression ]]”两个中括弧里写上表达式
“test expression”
“bash命令”

条件测试的类型:

整数测试

expression:[ 数值1 比较符 数值2 ]
比较符一般有以下几种:
大于:-gt(greater than),大于等于:-ge(greater equal),小于:-lt(less than),小于等于:le(less equal),不等于:-ne(not equal)

字符测试

"\>":大于
"\<":小于
"=="或者"=":等于
"=~":判断左边的字符串能否被右边的模式所匹配,通常用于[[ expression ]]

单目测试:

-z:格式为"[ -z $STRING ]",表示为空值时则为真,不为空值时则为假
-n:格式为"[ -n $STRING ]",表示为空值时则为假,不为空值时则为真

文件、目录测试

-d:测试目录是否存在
-f:测试档案是否存在

组合条件测试:

当有多个测试条件时,我们可以把这些测试条件组合起来使用:

-a:逻辑与
-o:逻辑或
!:逻辑非,这是单目操作

当是bash命令之间组合测试时,则:
&&:逻辑与
||:逻辑或
!:逻辑非

三、例子

1、写一个脚本来测试一个用户是不是管理员,如果是管理员则显示“用户名 is admin”,如果是系统用户刚显示“用户名 is system user”,否则显示“用户名 is common user”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
#
Uid=`id -u $1 &> /dev/null`
if [ -z $Uid ];then
echo "No such user $1;"
exit 8
fi
if [ $Uid -eq '0' ];then
echo "$1 is admin."
elif [ $Uid -gt '0' -a $Uid -lt '500' ];then //这里用到了逻辑与运算
echo "$1 is system user."
elif [ $Uid -ge '500' ];then
echo "$1 is common user."
fi

2、写一个脚本测试一个用户的shell是不是/bin/bash,如果是那输出“用户名 is bash user.”,否则输出“用户名 is no bash user.”

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
#
Bash=`grep "^$1\>" /etc/passwd | cut -d: -f7`
if [ -z $Bash ];then
echo "No such user $1."
exit 9
fi
if [ $Bash == "/bin/bash" ];then
echo "$1 is bash user."
else
echo "$1 is not bash user."
fi

3、写一个备份脚本,传递参数“gzip,bzip2,xz”给脚本,让脚本调用相应的压缩工具对备份文件进行压缩,当用户没有给定参数时,则调用gzip进行压缩。把/etc目录下的所有文件归档压缩后备份到/backup目录下,备份的文件名为”etc-日期-时间”的形式,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
#
Com=$1
[ -z /backup ] || mkdir /backup &> /dev/null //当无/backup时则建立
if [ -z $Com ];then
Com=gzip
fi
if [ $Com == 'gzip' ];then
tar zcf /backup/etc-`date +%F-%H:%M:%S.tar.gz` /etc/* &> /dev/null
[ $? == 0 ] && echo "Backup etc finished.(gzip)."
elif [ $Com == 'bzip2' ];then
tar jcf /backup/etc-`date +%F-%H:%M:%S.tar.bz2` /etc/* &> /dev/null
[ $? == 0 ] && echo "Backup etc finished.(bz2)."
elif [ $Com == 'xz' ];then
tar Jcf /backup/etc-`date +%F-%H:%M:%S.tar.xz` /etc/* &> /dev/null
[ $? == 0 ] && echo "Backup etc finished.(xz)."
else
echo "Usage:`basename $0` {[gzip|bzip2|xz]}"
exit=7
fi

此脚本在centos5.8上不tar不能调用xz压缩工具进行工作,man tar发现选项里没有“J”选项,但在centos 6.2上能正常工作,应该是tar版本问题。

4 判断上一个语句是否正常执行

1…131415…26
Zack Hwang

Zack Hwang

Go

257 日志
42 分类
76 标签
RSS
Links
  • 小白博客
  • 我的书单
© 2018 Zack Hwang
由 Hexo 强力驱动
主题 - NexT.Muse
又拍云