平淡人生

静待花开,花开常有香相伴;倾听流水,流水总有乐相陪;有缘清风携舟涉碧水,无缘细雨伴君独自行。

Linux md5sum校验文件是否被篡改

因为有些平台日常不会作更新操作,担心文件被非法修改自己又不知道,所以采用linux提供的简单命令来实现文件校验。

先把目录中的所有文件进行MD5,sort参数是排序后存放在md5.txt文件中,这个文件保存好,因为这是你历史的文件的md5,如果目录中某个文件被修改,在校验中就被找出来。

find /data -type f -print0 | xargs -0 md5sum | sort >md5.txt

校验文件是否被修改过,不显示正常的文件采用grep -v OK

root@kiccleaf data]# md5sum -c md5.txt | grep -v OK
/data/g.sh: FAILED
md5sum: WARNING: 1 computed checksum did NOT match


Linux中的chkconfig增加自己想要启动项

总有些需要自己配置启动项的,简单记录一下过程

#先写一个自己需要执行的软件或是其他要执行的事项,这里就拿同步系统时间作为例子
[root@localhost ~]# vim /root/syncDate.sh
#!/bin/bash
/usr/sbin/ntpdate cn.pool.ntp.org>/root/times.log
[root@localhost ~]# chmod +x /root/syncDate.sh

#开始写启动项文件kiccleaf
[root@localhost ~]# vim /etc/init.d/kiccleaf
#!/bin/bash
# chkconfig: 3 88 88
/bin/bash /root/syncDate.sh >/dev/null 2>/dev/null

注意:# chkconfig: 3 88 88 这一行很重要,如果不添加,
执行chkconfig –add kiccleaf 会提示失败

[root@localhost ~]# chkconfig --add kiccleaf
service kiccleaf does not support chkconfig
#以上是失败提醒,未增加# chkconfig: 3 88 88

#增加可执行权限
[root@localhost ~]# chmod +x /etc/init.d/kiccleaf

#添加到chkconfig,开机自启动
[root@localhost ~]# chkconfig --add kiccleaf
[root@localhost ~]# chkconfig --list kiccleaf

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

kiccleaf        0:off   1:off   2:off   3:on    4:off   5:off   6:off
#重启系统,查看结果

[root@localhost ~]# cat /root/times.log
12 Jun 11:38:34 ntpdate[10221]: step time server 203.107.6.88 offset -28799.359688 sec
操作成功

#关闭开机启动

[root@localhost ~]# chkconfig kiccleaf off
[root@localhost ~]# chkconfig --list kiccleaf
kiccleaf        0:off   1:off   2:off   3:off   4:off   5:off   6:off

#从chkconfig管理中删除kiccleaf
[root@localhost ~]# chkconfig --del kiccleaf
#查看列表中是否还存在kiccleaf启动项,结果已经没有
[root@localhost ~]# chkconfig --list kiccleaf
service kiccleaf supports chkconfig, but is not referenced in any runlevel (run 'chkconfig --add kiccleaf')

关于chkconfig更多内容,可以参考:Linux下chkconfig命令详解


linux中rc.local设置开机自启没有生效解决方案

经常在一些小细节方面卡壳,先查看一下文件是否有执行属性

[root@localhost ~]# ll /etc/rc.d/rc.local
-rw-r--r--  1 root root 507 Jun 12 11:01 /etc/rc.d/rc.local

#上面可以看出没有可执行权限,添加以下可执行权限即可
[root@localhost ~]# chmod +x  /etc/rc.d/rc.local
[root@localhost ~]# ll /etc/rc.d/rc.local
-rwxr-xr-x 1 root root 507 Jun 12 11:01 /etc/rc.d/rc.local
#执行后,查看已经增加了可执行权限

想在系统启动后执行的命令可以添加到/etc/rc.d/rc.local文件
比如启动时同步系统时间

#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
#同步系统时间
/usr/sbin/ntpdate cn.pool.ntp.org

FreeBSD升级Nginx

最新nginx版本解决了SSL漏洞,所以需要升级一下nginx版本至最新,以下是FreeBSD下用pkg升级的方法。

root@kiccleaf:~ # nginx -v
nginx version: nginx/1.12.0
root@kiccleaf:~ # pkg upgrade nginx
Updating FreeBSD repository catalogue...
Fetching meta.txz: 100%    944 B   0.9kB/s    00:01    
Fetching packagesite.txz: 100%    6 MiB  95.5kB/s    01:11    
Processing entries: 100%
FreeBSD repository update completed. 33333 packages processed.
The following 2 package(s) will be affected (of 0 checked):

Installed packages to be UPGRADED:
	nginx: 1.12.0_1,2 -> 1.14.0_13,2
	pcre: 8.40_1 -> 8.42

The process will require 178 KiB more space.
2 MiB to be downloaded.

Proceed with this action? [y/N]: y
Fetching nginx-1.14.0_13,2.txz: 100%  416 KiB 425.5kB/s    00:01    
Fetching pcre-8.42.txz: 100%    1 MiB   1.2MB/s    00:01    
Checking integrity... done (0 conflicting)
[1/2] Upgrading pcre from 8.40_1 to 8.42...
[1/2] Extracting pcre-8.42: 100%
[2/2] Upgrading nginx from 1.12.0_1,2 to 1.14.0_13,2...
You may need to manually remove /usr/local/etc/nginx/nginx.conf if it is no longer needed.
===> Creating groups.
Using existing group 'www'.
===> Creating users
Using existing user 'www'.
[2/2] Extracting nginx-1.14.0_13,2: 100%
Message from nginx-1.14.0_13,2:
===================================================================
Recent version of the NGINX introduces dynamic modules support.  In
FreeBSD ports tree this feature was enabled by default with the DSO
knob.  Several vendor's and third-party modules have been converted
to dynamic modules.  Unset the DSO knob builds an NGINX without
dynamic modules support.

To load a module at runtime, include the new `load_module'
directive in the main context, specifying the path to the shared
object file for the module, enclosed in quotation marks.  When you
reload the configuration or restart NGINX, the module is loaded in.
It is possible to specify a path relative to the source directory,
or a full path, please see
https://www.nginx.com/blog/dynamic-modules-nginx-1-9-11/ and
http://nginx.org/en/docs/ngx_core_module.html#load_module for
details.

Default path for the NGINX dynamic modules is

/usr/local/libexec/nginx.
===================================================================
root@kiccleaf:~ # nginx -v
nginx version: nginx/1.14.0

FreeBSD 升级PHP版本

使用到的命令
pkg update 更新下软件库的信息,这样可以知道软件库中个套件的最新版本。
pkg upgrade 是升级你安装的套件
pkg info 显示软件包信息

第一步升级PHP版本

root@kiccleaf:~ # php -v  #查看升级前PHP版本
PHP 7.1.4 (cli) (built: Nov 25 2017 01:17:11) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.4, Copyright (c) 1999-2017, by Zend Technologies

root@kiccleaf:~ # pkg upgrade php71
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
The following 2 package(s) will be affected (of 0 checked):

Installed packages to be UPGRADED:
	php71: 7.1.4 -> 7.1.12
	pcre: 8.37_4 -> 8.40_1

The process will require 84 KiB more space.
3 MiB to be downloaded.

Proceed with this action? [y/N]: y   #同意更新
Fetching php71-7.1.12.txz: 100%    2 MiB 103.2kB/s    00:21    
Fetching pcre-8.40_1.txz: 100%    1 MiB 165.7kB/s    00:07    
Checking integrity... done (0 conflicting)
[1/2] Upgrading pcre from 8.37_4 to 8.40_1...
[1/2] Extracting pcre-8.40_1: 100%
[2/2] Upgrading php71 from 7.1.4 to 7.1.12...
You may need to manually remove /usr/local/etc/php-fpm.d/www.conf if it is no longer needed.
[2/2] Extracting php71-7.1.12: 100%
root@kiccleaf:~ # php -v  #查看升级后版本
PHP 7.1.12 (cli) (built: Nov 25 2017 01:17:11) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.4, Copyright (c) 1999-2017, by Zend Technologies

第二步升级下PHP扩展

pkg upgrade -y php71-ctype php71-dom php71-filter php71-hash php71-iconv php71-json php71-mysqli php71-opcache php71-pdo php71-pdo_mysql php71-pdo_sqlite php71-phar php71-posix php71-session php71-simplexml php71-sqlite3 php71-tokenizer php71-xml php71-xmlreader php71-xmlwriter


发现大量的TIME_WAIT解决办法

netstat -ae|grep mysql

tcp        0      0 kiccleaf:46464      188.*.*.*:mysql    TIME_WAIT   root       0         
tcp        0      0 kiccleaf:42952      188.*.*.*:mysql    TIME_WAIT   root       0         
tcp        0      0 kiccleaf:46597      188.*.*.*:mysql    TIME_WAIT   root       0         
tcp        0      0 kiccleaf:45692      188.*.*.*:mysql    TIME_WAIT   root       0         
tcp        0      0 kiccleaf:44282      188.*.*.*:mysql    TIME_WAIT   root       0

—此处省略N行

tcp 0 0 kiccleaf:45692 188.*.*.*:mysql TIME_WAIT root 0
tcp 0 0 kiccleaf:44282 188.*.*.*:mysql TIME_WAIT root 0

发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决:
vim /etc/sysctl.conf

编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

然后执行 /sbin/sysctl -p 让参数生效。

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

修改之后,再用
netstat -ae|grep mysql

到此突然间系统的性能提升了,访问的网站程序速度也越顺畅了。


看看谁一直在猜你的Linux系统密码

首先找到/var/log/btmp 这上文件看看是否比较大这里记录了很多登录错误的信息,那么用一句话来列出到底是哪个IP经常在猜你系统的密码吧!

查看恶意ip试图登录次数:

lastb | awk '{ print $3}' | sort | uniq -c | sort -n

Linux可以利用iptables 防火墙把它屏蔽掉

#封IP的命令
iptables -I INPUT -s *.*.*.* -j DROP
#保存上述规则
service iptables save

另外建议还是把ssh的22端口改成其他端口吧!

收集了一些log下文件的解释

以下介绍的是20个位于/var/log/ 目录之下的日志文件。其中一些只有特定版本采用,如dpkg.log只能在基于Debian的系统中看到。

/var/log/messages — 包括整体系统信息,其中也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。
/var/log/dmesg — 包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用dmesg查看它们。
/var/log/auth.log — 包含系统授权信息,包括用户登录和使用的权限机制等。
/var/log/boot.log — 包含系统启动时的日志。
/var/log/daemon.log — 包含各种系统后台守护进程日志信息。
/var/log/dpkg.log – 包括安装或dpkg命令清除软件包的日志。
/var/log/kern.log – 包含内核产生的日志,有助于在定制内核时解决问题。
/var/log/lastlog — 记录所有用户的最近信息。这不是一个ASCII文件,因此需要用lastlog命令查看内容。
/var/log/maillog /var/log/mail.log — 包含来着系统运行电子邮件服务器的日志信息。例如,sendmail日志信息就全部送到这个文件中。
/var/log/user.log — 记录所有等级用户信息的日志。
/var/log/Xorg.x.log — 来自X的日志信息。
/var/log/alternatives.log – 更新替代信息都记录在这个文件中。
/var/log/btmp – 记录所有失败登录信息。使用last命令可以查看btmp文件。例如,”last -f /var/log/btmp | more“。
/var/log/cups — 涉及所有打印信息的日志。
/var/log/anaconda.log — 在安装Linux时,所有安装信息都储存在这个文件中。
/var/log/yum.log — 包含使用yum安装的软件包信息。
/var/log/cron — 每当cron进程开始一个工作时,就会将相关信息记录在这个文件中。
/var/log/secure — 包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里。
/var/log/wtmp或/var/log/utmp — 包含登录信息。使用wtmp可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等。
/var/log/faillog – 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中。

除了上述Log文件以外, /var/log还基于系统的具体应用包含以下一些子目录:

/var/log/httpd/或/var/log/apache2 — 包含服务器access_log和error_log信息。
/var/log/lighttpd/ — 包含light HTTPD的access_log和error_log。
/var/log/mail/ – 这个子目录包含邮件服务器的额外日志。
/var/log/prelink/ — 包含.so文件被prelink修改的信息。
/var/log/audit/ — 包含被 Linux audit daemon储存的信息。
/var/log/samba/ – 包含由samba存储的信息。
/var/log/sa/ — 包含每日由sysstat软件包收集的sar文件。
/var/log/sssd/ – 用于守护进程安全服务。


linux 查看系统信息命令(比较全)

收集常用的Linux基本系统信息命令

 uname -a # 查看内核/操作系统/CPU信息
 head -n 1 /etc/issue # 查看操作系统版本
 cat /proc/cpuinfo # 查看CPU信息
 hostname # 查看计算机名
 lspci -tv # 列出所有PCI设备
 lsusb -tv # 列出所有USB设备
 lsmod # 列出加载的内核模块
 env # 查看环境变量资源
 free -m # 查看内存使用量和交换区使用量
 df -h # 查看各分区使用情况
 du -sh <目录名> # 查看指定目录的大小
 grep MemTotal /proc/meminfo # 查看内存总量
 grep MemFree /proc/meminfo # 查看空闲内存量
 uptime # 查看系统运行时间、用户数、负载
 cat /proc/loadavg # 查看系统负载磁盘和分区
 mount | column -t # 查看挂接的分区状态
 fdisk -l # 查看所有分区
 swapon -s # 查看所有交换分区
 hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
 dmesg | grep IDE # 查看启动时IDE设备检测状况网络
 ifconfig # 查看所有网络接口的属性
 iptables -L # 查看防火墙设置
 route -n # 查看路由表
 netstat -lntp # 查看所有监听端口
 netstat -antp # 查看所有已经建立的连接
 netstat -s # 查看网络统计信息进程
 ps -ef # 查看所有进程
 top # 实时显示进程状态用户
 w # 查看活动用户
 id <用户名> # 查看指定用户信息
 last # 查看用户登录日志
 cut -d: -f1 /etc/passwd # 查看系统所有用户
 cut -d: -f1 /etc/group # 查看系统所有组
 crontab -l # 查看当前用户的计划任务服务
 chkconfig –list # 列出所有系统服务
 chkconfig –list | grep on # 列出所有启动的系统服务程序
 rpm -qa # 查看所有安装的软件包

FreeBSD下更改csh为bash后root无法登录解决办法

FreeBSD下为了判断一个进程是否存在,执行了chsh -s /bin/bash命令,不巧的是刚好断线,于是再次链接时没办法su root进去管理权限了。可悲的事情,只好请机房来帮忙操作。

chsh -s /bin/bash

查看/etc/passwd内容时发现

root:*:0:0:Charlie &:/root:/bin/bash
这一句被改了
原来是
root:*:0:0:Charlie &:/root:/bin/csh

利用cat命令查看/etc/passwd

kiccleaf# cat /etc/passwd
# $FreeBSD: src/etc/master.passwd,v 1.40.22.2.2.1 2012/03/03 06:15:13 kensmith Exp $
#
root:*:0:0:Charlie &:/root:/bin/bash

原来的内容是:

kiccleaf# cat /etc/passwd
# $FreeBSD: src/etc/master.passwd,v 1.40.22.2.2.1 2012/03/03 06:15:13 kensmith Exp $
#
root:*:0:0:Charlie &:/root:/bin/csh

结果FreeBSD的/bin/目录下并没有bash这个命令存在,于是登录时错误提示:

login:/bin/bash:No such file or directory

把root的shell改成了bash,而导致进不去系统了,可以通过以下几种方式解决:

系统启动时,选择“4”,进入“单用户”模式,输入“boot -s”进入单用户的提示符“#”,依次键入如下命令:

  fsck -p
  mount -u /
  mount -a -t ufs
  swapon -a
  chsh -s /bin/csh

然后就重启系统吧,这样就可以重新登录root管理帐号了。


Linux注销其他登录用户或注销登录意外被断开用户

经常在操作Linux的时候,偶尔会发生断网或是在智能多线路环境中操作服务器时,时常被断开,但用户登录的进程又在,并没有退出。
简单的方法实现已经登录的用户注销操作

[root@kiccleaf ~]# who
root     pts/1        2014-06-04 12:07 (27.115.*.*)
root     pts/2        2014-06-04 13:31 (58.247.*.*)
root     pts/3        2014-06-04 13:42 (58.246.*.*)
root     pts/4        2014-06-04 13:56 (140.207.*.*)
root     pts/5        2014-06-04 14:01 (140.207.*.*)
#结束掉一些登录的用户
[root@kiccleaf ~]# pkill -kill -t pts/1