存档

‘运维’ 分类的存档

非root用户启动和运行redis

2018年5月30日 没有评论

    redis之前爆出过一个漏洞,攻击者可藉此漏洞获取系统root权限。在之前的文章里,我们了解了如何增强redis的安全性。我们还可以使用非root用户来运行redis,进而进一步提升系统安全性。

  1. 以root身份正常安装redis
  2. 切换非root用户登入系统,比如test
  3. 拷贝redis默认配置文件到test的根目录(或其他test有访问权限的目录):

    sudo copy /etc/redis/6379.conf /home/test/

  4. 修改test下配置文件的属主:

    sudo chown test.test /home/test/6379.conf

  5. 修改配置文件中redis运行使用到的相关文件和目录的路径,可通过grep 6379 /home/test/6379.conf查找这些文件和目录,将这些路径修改到test用户根目录下

    pidfile /home/test/run/redis_6379.pid
    logfile /home/test/log/redis_6379.log
    dir /home/test/lib/redis/6379

  6. 创建这些文件和目录

    mkdir -p /home/test/run/ /home/test/log  /home/test/lib/redis/6379

  7. 启动redis

    /usr/local/bin/redis-server /home/test/6379.conf

分类: Redis, 安全, 开发 标签:

wtail:可以多屏输出的多文件跟踪查看工具

2017年5月17日 没有评论

tail是我们常用到的文件跟踪查看工具,-n可以查看末尾n行,-f可以实时跟踪文件(描述符)的最新变化。当然也可以同时查看多个文件,但是多文件的输出是混杂在一起的,没那么直观。

现在好了,我们有了wtail。这是一个可以在同一个终端窗口中同时输出多个被跟踪文件数据的工具,每个文件可以在单独的小屏幕中输出,即一个窗口分屏输出。

  1. 安装
    • wtail依赖libncurses,某些机器上可能没有这个库,需要手动安装:

      wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.0.tar.gz

      tar xzvf ncurses-6.0.tar.gz && cd ncurses-6.0

      ./configure && make && make install

    • 下载wtail源码包,解压,make && make install
  2. 使用
    • wtail *.log
分类: Shell, 工具, 运维 标签: , ,

使用rsync进行文件同步

2017年4月25日 没有评论
  1. rysnc是什么
    1. 这是一个linux平台上通用的文件同步工具,可以在本地目录或本地与服务器之间进行文件同步
    2. 安全:支持自定义端口,支持口令配置
    3. 高效:只传输差异部分,支持压缩传输
    4. 易用:支持通配符,支持exclude来排除特定文件
  2. 安装
    1. 大多数linux服务器默认安装有rsync
    2. 如果没有,简单运行yum -y install rsync就ok了
  3. 简单示例
    1. 同步的前提是两端服务器都安装了rsync
    2. push方式:rsync /localDir/file user@remoteServerAddress:/remoteDir
    3. pull方式:rsync user@remoteServerAddress:/remoteDir/file /localDir
    4. 上述两条命令实际上是通过ssh来通信的,所以如果对端服务器用户配置了密码的话需要输入密码
    5. rsync还支持通过rync协议来通信,有两种命令方式可以使用该协议
      1. 在服务器和路径之间使用双冒号,比如

        rsync /localDir/file user@remoteServerAddress::/remoteDir

      2. 显式使用,如

        rsync rsync://user@remoteServerAddress[:remoteServerPort]/remoteDir/file /localDir

  4. 以daemon方式配置和运行
    1. rsync可以在一端或者两端以daemon进程形式来运行,通过配置rsyncd.conf来定制同步业务
    2. 这里列举一个简单的配置文件/etc/rsyncd.conf:

      #global settings
      pid file = /var/rsync/rsync.pid
      port = 873
      lock file = /var/rsync/lock.log
      log file = /var/rsync/rsync.log

      #module settings
      [SyncFiles]
      path=/data/files/
      use chroot = no
      max connections = 5
      read only = yes
      write only = no
      list = no
      uid = nobody
      gid = nobody
      incoming chmod = 644
      auth users = syncUser
      secrets file = /etc/rsync.pass
      strict modes = yes
      hosts allow = 192.168.1.119
      hosts deny = *
      ignore errors = yes
      timeout = 120

    3. 授权文件/etc/rsync.pass格式

      syncUser:_password_

    4. 注意事项:需要chmod 600 /etc/rsync.pass
    5. 启动进程:rsync –daemon,可将此命令加入/etc/rc.local
    6. 客户端同步命令:

      rsync -az –password-file=./sync_auth rsync://syncUser@remoteServerAddress[:remoteServerPort]/SyncFiles/* /localDir

    7. 由于同步用户配置了权限,客户端每次rsync操作都需要输入密码,可以通过–password-file选项来指定密码文件,这样就可免去输入密码了,如上面命令所示。该密码文件的格式很简单,单行文本写入密码即可,同样需要chmod 600 ./sync_auth
  5. 检测文件是否需要同步
    1. -i参数:可以对对端文件的变更进行摘要,据此可以判断是否需要同步
    2. -n参数:尝试同步操作但不传输文件
    3. 结合起来,-in就可以根据输出来判断是否需要同步了
  6. 其他:
    1. –delete参数支持删除文件的同步
    2. -L支持软链接目标目录的同步
    3. 如果写入的目录没有权限,会报以下错误,执行chown -R nobody.nobody /data/files/修改权限即可解决

      rsync: mkstemp failed: Permission denied (13)

分类: Shell, 运维 标签: , , ,

Redis低版本无法向前兼容高版本RDB文件

2016年9月26日 没有评论

今天做了一个操作导致Redis无法启动。

在部署某一程序的过程中,先是单独安装了3.2.3版本的redis,安装完成后ps一下,redis已经启动。然后又使用安装包部署程序,安装包中包含一个2.8.13版本的redis,直接把之前装的3.2.3的redis给覆盖掉了。程序安装完成后发现redis进程没了,而且通过service redis_6379 restart无法启动。

怎么回事?查看/var/log/redis_6379.log发现如下错误:

[31934] 26 Sep 11:31:47.087 # Can’t handle RDB format version 7
[31934] 26 Sep 11:31:47.087 # Fatal error loading the DB: Invalid argument. Exiting.

哦,当前版本的redis无法处理version=7的RDB格式,这才明白是兼容性问题,但这种“向前兼容”一般很难做到的。

解决办法:删除rdb文件/var/lib/redis/6379/dump.rdb,重启redis就行了。

2017.11.08:今天在redis官网上看到一篇文章,是介绍redis rdb文件版本历史的,参这里。详细介绍了各版本的演进历史,并说明了高版本rdb文件回退到低版本的方法,有需要的朋友可以了解一下。

分类: Redis, 运维 标签: ,

一个简单的cnzz数据采集与监控方案

2016年6月8日 2 条评论
  1. 场景
    • 有多个网站需要监控
    • 每个网站的cnzz数据只能分别通过密码来查看
  2. 方案
    • 使用casperjs定时批量抓取每个网站的cnzz数据截图,对于监控来说,一般只抓取概要图和趋势图就行了
    • 将抓取的数据按日期保存在web服务器的html目录里,命名方式为cnzz/DATE/SiteID_overview.png和cnzz/DATE/SiteID_trends.png
    • 写个简单的php页面,通过SiteID枚举出当前日期下的各网站的概要图和趋势图
  3. 实现方法
分类: js, 监控 标签: , ,

linux下制作二进制 bin文件

2016年3月24日 没有评论

制做方法是使用cat 命令将执行脚本和打包文件同时放到一个.bin的文件里。这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。
例:制作安装apache、mysql的安装脚本包
1.将源码包先打包
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz

2.编写脚本如下:
# cat install.sh
#!/bin/bash
dir_tmp=/root/installapache
mkdir $dir_tmp
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null
cd $dir_tmp
tar zxf packages.tar.gz
tar jxf httpd-2.0.63.tar.bz2
cd  httpd-2.0.63
./configure –prefix=/tmp/apache2
make
make install
cd $dir_tmp
tar zxf mysql-5.0.33.tar.gz
cd mysql-5.0.33
./configure –with-charset=gbk –with-extra-charsets=binary,latin1,gb2312 –localstatedir=/home/db –with-mysqld-ldflags=-all-static -enable-assembler –with-innodb –prefix=/tmp/mysql5
make
make install
exit 0

#cat install.sh packages.tar.gz >install.bin

这样就生成install.bin的安装文件,该文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到。
最主要的是下面这句,是将二进制文件从.bin文件里分离出来
sed -n -e ‘1,/^exit 0$/!p’ $0 > “${dir_tmp}/packages.tar.gz” 2>/dev/null

安装的时候直接执行
sh install.bin
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。

 

分类: Shell, 运维 标签: , ,

查找linux大文件

2016年2月18日 没有评论

cd path_to_be_searched;

du -sh *

du可以快速统计指定目录下文件的大小,-s选项可汇总子目录所占的磁盘空间。

Linux的优点就是在于有这么多实用工具,让看似复杂的事情,一条命令就可以解决。

分类: Shell, 监控 标签: ,

安装redis需要注意的几点信息

2016年1月25日 没有评论
  • 建议将redis部署在linux系统上。除了各平台上反复的测试外,官方在linux上做了所有的重要的压力测试,并且linux也是应用最多的生产环境。
  • 将linux内核参数overcommit memory设置为1.添加vm.overcommit_memory = 1到/etc/sysctl.conf,重启系统,或者执行sysctl vm.overcommit_memory=1使该配置立即生效。
  • 禁用内核transparent huge pages特性,因为该参数会给redis的内存使用和延迟处理带来负面影响。禁用方法:echo never > /sys/kernel/mm/transparent_hugepage/enabled.
  • 系统要创建swap分区,建议分区大小和物理内存大小保持一致。redis可能偶尔会消耗太多内存,如果没有swap交换分区,redis很有可能会由于内存耗尽而崩溃,或者被内核OOM killer杀掉。
  • 通过设置redis.conf中的maxmemory参数明确的限制redis可占用的内存空间。这样当redis使用的内存达到限定值时会给出报错信息,而不是失败退出。
  • 如果redis应用在一个写频繁的环境中,redis执行存盘操作(rdb或aof)时,有可能会占用正常状态下2倍的内存空间,额外占用的内存空间和存盘时被改动的key的数量相关。这种场景下需要合理的调整内存配置。
  • redis本身可工作在守护模式下,如果使用其他的工具来守护redis,请将redis.conf中的daemonize设置为no。
  • 即便你禁用了持久化配置(如save “”),redis在执行复制操作时仍会保存rdb快照,除非使用试验中的diskless复制特性。意思是,如果不使用diskless复制,你仍需关注redis的内存配置和系统磁盘使用情况。
  • 使用复制功能时,要么主redis开启了持久化功能,要么主redis不可以在崩溃后自动重启。否则,如果主redis关闭了持久化功能,并且崩溃时自动重启了,重启后的主redis已不含数据,它还会将备redis的数据清空。这样所有的数据都没了。
  • 默认情况下,redis监听所有的网卡,且没有任何认证机制,这会带来一定的安全隐患,需要根据实际情况正确配置redis的安全参数
分类: Redis, 运维 标签:

修改ssh端口的方法及相关事项

2015年12月30日 没有评论
  1. ssh的配置文件为/etc/ssh/sshd_config ,其中的Port即是开放端口,这一行默认是注释掉的。去掉注释,并改成其他端口
  2. 远程修改ssh端口是风险较高的操作,可能会导致无法连上服务器,原因在于系统防火墙可能不允许要更改的端口
  3. 较安全的修改流程为:
    • 去掉sshd_config中默认Port行前边的注释,并新加一个拷贝行,在新加行配置想要更改的端口
    • 在防火墙中添加规则,放行要更改的ssh端口,重启防火墙
    • 重启ssh,尝试使用新端口登录ssh
    • 新端口登录ssh成功,在sshd_config中重新打开默认Port行的配置,并重启ssh
  4. 可能会被扫描和攻击,检测方法为查看系统日志/var/log/secure。如果被非法扫描或攻击,该日志文件会提示扫描ip及频繁登录失败的信息。在防火墙中禁止扫描ip即可。
分类: 安全 标签: ,

磁盘空间不足导致redis无法正常运行

2015年12月21日 没有评论

如果redis配置了后台存盘操作(配置文件中开启了save选项),并且redis运行内存占用较大,若系统磁盘空间不足,会导致redis无法正常运行。后台报错如下:

(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

所以,线上系统不仅要监控redis内存使用情况,也需要关注磁盘使用情况!

分类: Redis, 监控, 资料 标签: ,