学习总结篇——常用工具

前言

收集整理自己用的一些工具和安装使用过程中的一些坑

Linux

一、Supervisor(进程管理)

介绍

Supervisor是用Python开发的一个client/server服务,
是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。
它可以很方便的监听、启动、停止、重启一个或多个进程。
用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,
很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

Ubuntu 安装和使用 Supervisor 会遇到很多坑

安装

sudo apt install supervisor

配置

默认配置文件

使用echo_supervisord_conf生成supervisor默认的配置文件,
supervisor的配置参数较多,可以参考官方配置文档——Supervisor 4.1.0 documentation
echo_supervisord_conf > /etc/supervisor/supervisord.conf

[unix_http_server]
file=/tmp/supervisor.sock   ;UNIX socket 文件,supervisorctl 会使用
;chmod=0700                 ;socket文件的mode,默认是0700
;chown=nobody:nogroup       ;socket文件的owner,格式:uid:gid

;[inet_http_server]         ;HTTP服务器,提供web管理界面
;port=127.0.0.1:9001        ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
;username=user              ;登录管理后台的用户名
;password=123               ;登录管理后台的密码

[supervisord]
logfile=/tmp/supervisord.log ;日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB        ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
logfile_backups=10           ;日志文件保留备份数量默认10,设为0表示不备份
loglevel=info                ;日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false               ;是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024                  ;可以打开的文件描述符的最小值,默认 1024
minprocs=200                 ;可以打开的进程数的最小值,默认 200

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通过HTTP的方式连接supervisord

; [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run  ; 程序启动命令
autostart=true       ; 在supervisord启动的时候也自动启动
startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3       ; 启动失败自动重试次数,默认是3
user=tomcat          ; 用哪个用户启动进程,默认是root
priority=999         ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB  ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20   ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程

;包含其它配置文件
[include]
files = /etc/supervisor/conf.d/*.conf    ;可以指定一个或多个以.conf结束的配置文件

进程配置文件

进程管理配置参数,不建议全都写在supervisord.conf文件中
应该每个进程写一个配置文件放在include指定的目录下包含进supervisord.conf文件中。
/etc/supervisor/supervisord.conf(上面)中的include参数设置的目录
使用命令新建配置,name自己随便取,最好和程序名相同,方便后续使用命令

sudo vi /etc/supervisor/conf.d/name.conf

按照如下模板写入配置文件(只是小部分配置,)

[program:ssr]
user = root
command = python /home/ubuntu/shadowsocksr/shadowsocks/server.py -p 1234 -k 567890 -m aes-256-cfb -O auth_sha1_v4 -o http_simple
autostart = true
autorestart = true
stopasgroup = true
killasgroup = true
redirect_stderr = true
stdout_logfile = /home/ubuntu/shadowsocksr/shadowsocks/supervisor.log 

运行

启动 Supervisord

supervisord -c /etc/supervisor/supervisord.conf

supervisorctl操作命令

supervisorctl status  #查看所有进程的状态
supervisorctl stop  #停止
supervisorctl start  #启动
supervisorctl restart #重启
supervisorctl update #配置文件修改后可以使用该命令加载新的配置
supervisorctl reload #重新启动配置中的所有程序

开机启动

systemctl enable supervisor.service

Synchronizing state of supervisor.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable supervisor

如上提示则执行下面命令

/lib/systemd/systemd-sysv-install enable supervisor

报错处理


/usr/lib/python2.7/dist-packages/supervisor/options.py:298: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
  'Supervisord is running as root and it is searching '
  • 解决办法:
    以上报错由于用supervisord 直接启动supervisor 所以会引起报错,所以第一次启动的时候要加上配置文件
    如果提示找不到文件,-c后面的参数改成你的supervisord.conf配置文件所在位置

supervisord -c /etc/supervisor/supervisord.conf


Error: Another program is already listening on a port that one of our HTTP servers is configured to use.  Shut this program down first before starting supervisord.
For help, use /usr/bin/supervisord -h
  • 解决办法:

find / -name supervisor.sock
unlink /name/supervisor.sock

注意第二个命令的name 替换成你自己第一条命令查找出来的路径
如下

root@dylan:~# find / -name supervisor.sock
/run/supervisor.sock
root@dylan:~# unlink /run/supervisor.sock

unix:///var/run/supervisor/supervisor.sock no such file

  • 解决办法一:目录权限不够

sudo chmod 777 /run

sudo chmod 777 /var/log

  • 解决办法二:安装好supervisor没有开启服务,直接使用supervisorctl报的错
    执行如下命令,如果提示找不到文件,-c后面的参数改成你的supervisord.conf配置文件所在位置

supervisord -c /etc/supervisor/supervisord.conf


Unlinking stale socket /var/run/supervisor/supervisor.sock

  • 解决办法:

unlink /var/run/supervisor/supervisor.sock


二、 ShadowsocksR

介绍

ShadowsocksR WIKI 地址:shadowsocks-rss Wiki
ShadowsocksR的wiki的单用户服务端配置:shadowsocks-rss单用户服务端 Wiki
windows客户端下载地址:windows客户端
Android客户端下载地址: Android客户端

下载安装配置

git clone -b manyuser https://github.com/shadowsocksr-backup/shadowsocksr.git #将github上的ShadowsocksR源码存档克隆到本地
cd shadowsocksr #进入shadowsocksr根目录
./initcfg.sh  #shadowsocksr初始化配置
cd shadowsocks    #进入单用户版目录
python server.py -p 443 -k password -m aes-256-cfb -O auth_sha1_v4 -o http_simple #快速运行
#这里的选项都可以改,不明白选项的含义的话建议只改端口号和密码,即修改443和password

自启动

使用supervisor来管理ShadowsocksR进程的自启动,意外停止恢复自启动。
使用方法见 0x01

三、Tmux终端复用

介绍

我们在linux服务器上的工作一般都是通过一个远程的终端连接软件连接到远端系统进行操作,例如使用xshell或者SecureCRT工具通过ssh进行远程连接。在使用过程中,如果要做比较耗时的操作,例如有时候进行编译,或者下载大文件需要比较长的时间,一般情况下是下班之后直接运行希望第二天早上过来运行完成,这样就不用耽误工作时间。但是网络有时候不稳定,可能在半夜会出现连接断掉的情况,一旦连接断掉,我们所执行的程序也就中断,我们当然可以写一个脚本后台运行,但是还是不方便。那么有没有一种工具可以解决这样的问题呢。这就是我们这里要提到的tmux了。其实类似tmux的工具还有很多。例如gnu screen等。tmux刚好可以解决我们描述的问题,当我们在tmux中工作的时候,即使关掉SecureCRT的连接窗口,再次连接,进入tmux的会话我们之前的工作仍然在继续。

tmux是一个linux下面的工具,在使用之前需要安装,就像安装linux下的其他工具一样方便。首先我们通过SecureCRT连接登入远程的linux机器,我们将此时的环境称为终端环境。如果这个机器上并没有安装tmux,我们需要安装。例如在CentOs上是yum install tmux,完成之后我们就可以使用tmux命令了。tmux中有3种概念,会话,窗口(window),窗格(pane)。会话有点像是tmux的服务,在后端运行,我们可以通过tmux命令创建这种服务,并且可以通过tmux命令查看,附加到后端运行的会话中。一个会话可以包含多个窗口,一个窗口可以被分割成多个窗格(pane)。

安装

Ubuntu:

sudo apt install tmux

使用

tmux的会话

  • tmux new -s session1 # 新建会话, -(s其实是session的头字母)
  • ctrl+b d # 退出会话,回到shell的终端环境
  • tmux ls # 终端环境下查看会话列表
  • ctrl+b s # 会话环境查看会话列表
  • tmux a -t session1 # 从终端环境进入会话
  • tmux kill-session -t session1 # 终端环境中销毁会话,其中session1是要销毁的会话名。
  • ctrl+b : # 会话环境中进入命令模式,注意按组合键之后再按一个冒号键
    kill-session -t session1 # 输完回车即可在会话环境中销毁会话。

tmux的window

一个tmux的会话中可以有多个窗口(window),每个窗口又可以分割成多个pane(窗格)。
我们工作的最小单位其实是窗格。默认情况下在一个window中,只有一个大窗格,占满整个窗口区域。
我们在这个区域工作。

ctrl+b c # 创建新窗口

切换window

  • ctrl+b p (previous的首字母) 切换到上一个window。
  • ctrl+b n (next的首字母) 切换到下一个window。
  • ctrl+b 0 切换到0号window,依次类推,可换成任意窗口序号
  • ctrl+b w (windows的首字母) 列出当前session所有window,通过上、下键切换窗口
  • ctrl+b l (字母L的小写)相邻的window切换

ctrl+b & # 关闭当前window,会给出提示是否关闭当前窗口,按下y确认即可。

tmux的pane

tmux的一个窗口可以被分成多个pane(窗格),可以做出分屏的效果。
分屏之后光标停留在哪个pane上,表示该pane是活动的,另外一般情况下当前pane会被绿色的线条围起来。
一般分屏之后当前窗口名字会重置为默认窗口名字。通过多次分屏操作,我们可以得到各种样子的分屏效果

ctrl+b % # 垂直分屏(组合键之后按一个百分号),用一条垂线把当前窗口分成左右两屏。

ctrl+b " # 水平分屏(组合键之后按一个双引号),用一条水平线把当前窗口分成上下两屏。

切换pane

  • ctrl+b o # 依次切换当前窗口下的各个pane。
  • ctrl+b Up|Down|Left|Right # 根据按箭方向选择切换到某个pane。
  • ctrl+b Space (空格键) # 对当前窗口下的所有pane重新排列布局,每按一次,换一种样式。
  • ctrl+b z # 最大化当前pane。再按一次后恢复。

四、open-vm-tools

介绍

kali与win10主机间不能文件互通,但是在新版本中,
VMware自带的vmware-tools已经没效果,
官方建议是安装open-vm-tools-desktop来代替其跟物理机交互。

安装

如果之前安装过VM Tools,运行下面命令,回车即可删除

vmware-uninstall-tools.pl

安装open-vm-tools-desktop,记得替换源,这里不赘述。

apt-get install open-vm-tools-desktop fuse

reboot

报错解决

E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the probl

mv /usr/bin/localedef /usr/bin/localedef.old
dpkg --configure -a
reboot  #(重启生效)

Windows

一、Sublime Text3

详见之前的文章:
Sublime Text3使用指南

参考文章

ubuntu下搭建SSR服务端教程
Ubuntu 安装和使用 Supervisor(进程管理)
tmux 终端复用详解


   转载规则


《学习总结篇——常用工具》 dylan 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Apache Flink 任意 Jar 包上传致 RCE 漏洞复现 Apache Flink 任意 Jar 包上传致 RCE 漏洞复现
0x00 漏洞概述Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任务。可部署在各种集群环境,对各种大小的
2019-11-17
下一篇 
Wordpress 后台GetShell总结 Wordpress 后台GetShell总结
0x00 前言Wordpress后台Getshell的方法网上公开了很多,在此记录总结一下 相比于前台,wordpress后台的防御的就低得多Wordpress的插件和主题功都可以上传和线编辑很容易就可以插入木马getshell ?auth
2019-11-06
  目录