使用ssh登录linux 内部docker容器

#拉取docker ubuntu 镜像
docker pull ubuntu
#查看镜像ID
docker images

[root@VM_0_4_centos ~]# docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu                      latest              4e2eef94cd6b        4 weeks ago         73.9 MB

#通过镜像 IMAGE ID 创建docker容器,将32端口映射到docker 22端口,用于ssh登录,81映射到80作为web备用端口

docker run -it -d --name=ubuntu -p 32:22 -p 81:80 4e2eef94cd6b /bin/bash
获取docker容器 CONTAINER ID
docker ps

[root@VM_0_4_centos ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                            NAMES
24cade70f910        4e2eef94cd6b        "/bin/bash"              2 hours ago         Up 2 hours          0.0.0.0:32->22/tcp, 0.0.0.0:81->80/tcp                                                           ubuntu
#进入docker容器
docker exec -it 24cade70f910 /bin/bash
apt update
#然后通过passwd命令修改root的密码。
passwd
#安装openssh-server:  
apt install -y openssh-server
#安装vim
apt install -y vim
vim /etc/ssh/sshd_config

 添加PermitRootLogin yes 
 修改UsePAM no
保存
重启ssh
service ssh start
然后通过ssh工具 使用32端口即可登录,如果你使用阿里云或者腾讯云,需要登录服务商后台安全策略放行32等其他端口

Linux下编译安装以及配置PHP环境 Nginx Swoole

yum update
#安装编译工具
yum -y install gcc gcc-c++ pcre openssl openssl-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel pcre pcre-devel libxslt libxslt-devel bzip2 bzip2-devel make
#php下载以及安装https://www.php.net/downloads
wget -c  http://www.php.net/distributions/php-7.2.33.tar.gz
#解压安装包
tar -zxvf php-7.2.33.tar.gz
#进入目录开始编译安装
cd php-7.2.33
#配置
./configure --prefix=/usr/local/php7.2
make && make install
#安装成功后配置PHP环境变量
方法一、建立软链接
ln -s /usr/local/php7.2/bin/php /usr/bin/php

方法二
vi ~/.bash_profile

增加
alias php=/usr/local/php7.2/bin/php

source ~/.bash_profile
#增加配置文件

查看配置文件目录
php -i |grep php.ini

[root@7c73e1180bfb lib]# php -i |grep php.ini
Configuration File (php.ini) Path => /usr/local/php7.2/lib


将编译目录配置文件拷贝到对应目录
cp php.ini-production /usr/local/php7.2/lib/php.ini
#编译安装swoole
#Swoole 扩展是按照 PHP 标准扩展构建的。使用 phpize 来生成编译检测脚本,./configure 来做编译配置检测,make 进行编译,make install 进行安装。

#下载页面 https://github.com/swoole/swoole-src/releases

#下载源码
wget -c https://github.com/swoole/swoole-src/archive/v4.4.18.tar.gz

#解压 tar -zxvf v4.4.18.tar.gz

#进入解压目录
cd swoole-src-4.4.18/

生成configure文件
/usr/local/php7.2/bin/phpize

########注意################
#执行出错提示未安装
[root@7c73e1180bfb swoole-src-4.4.18]# phpize
Configuring for:
PHP Api Version:         20170718
Zend Module Api No:      20170718
Zend Extension Api No:   320170718
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.


#安装 autoconf

yum install autoconf
#重试上一步
/usr/local/php7.2/bin/phpize

#编译配置检测
./configure --with-php-config=/usr/local/php7.2/bin/php-config

# make 进行编译,make install 进行安装。
make && make install

#安装目录
[root@7c73e1180bfb swoole-src-4.4.18]# make install
Installing shared extensions:     /usr/local/php7.2/lib/php/extensions/no-debug-non-zts-20170718/
Installing header files:          /usr/local/php7.2/include/php/

#php配置文件中引入swoole扩展
vi /usr/local/php7.2/lib/php.ini

新增一行数据
extension=swoole
或者
#extension = "/usr/local/php7.2/lib/php/extensions/no-debug-non-zts-20170718//swoole.so"

#查看扩展是否已经引用成功
php -m

deepin切换root身份运行

默认禁用root帐户,需要加密码才能用。sudo passwd root可以设置root密码或者打开终端(即Terminal) 输入sudo -s -H 也行。注意H 一定要是大写。这样可以直接进入root

lnmp 1.6安装tinkphp 5.0以上防跨目录设置问题,lnmp中遇到open_basedir配置无效问题。

在使用LNMP包安装PHP时,发现直接修改php.ini的配置是无法生效的,其原因竟然是因为nginx的配置文件,覆盖了php.ini的配置。
——————————————————————–
LNMP 1.4上如果不想用防跨目录还需要将 /usr/local/nginx/conf/fastcgi.conf 里面的fastcgi_param PHP_ADMIN_VALUE “open_basedir=$document_root/:/tmp/:/proc/”; 删除或注释,需要重启nginx。
LNMP 1.4上也可以直接使用lnmp1.4/tools/ 目录下的 ./remove_open_basedir_restriction.sh 进行移除。

lnmp 开启php错误打印

php –ini
Configuration File (php.ini) Path: /usr/local/php/etc
Loaded Configuration File: /usr/local/php/etc/php.ini
Scan for additional .ini files in: /usr/local/php/conf.d
Additional .ini files parsed: (none)

vi /usr/local/php/etc/php.ini

在文件中查找 ‘display_errors’   查找到 display_errors = Off 或者 display_errors = On, Off为关闭错误提示,On为打开错误提示,根据需求修改即可。

也可在php文件中加入以下代码

 

//禁用错误报告
error_reporting(0);
//报告运行时错误
error_reporting(E_ERROR | E_WARNING | E_PARSE);
//报告所有错误
error_reporting(E_ALL);

 

给sftp创建新用户、默认打开和限制在某个目录

一、环境:

CentOS 6.8
使用 FileZilla 进行 sftp 连接

二、背景

给外包的工作人员提供我司服务器的某一目录的访问(包括读写)权限,方便他们部署代码文件。

之所以是某一目录的访问,是因为 SFTP 的用户登录后,默认是能看到整个系统的文件目录,这样很不安全。

题外话:如果是针对 ftp 的用户权限管理,推荐使用 vsftpd,可通过 yum 直接安装。

三、正文

1、创建新用户

adduser sftpuser1

useradd 和 adduser 的区别
useradd 只会添加一个用户,并没有创建它的主目录,除了添加一个新用户之外什么都没有。这个用户甚至不能登录,因为没有密码。所以这里选择 adduser。

2、设置该用户密码

passwd sftpuser1

回车后再输入密码即可

3、禁止该用户登录 SSH

因为我们只想该用户使用 SFTP,并不需要该用户能登录 SSH,威胁安全。

usermod -s /bin/false sftpuser1

sftpuser1的 shell 改成 /bin/false。

4、修改该用户的家目录

usermod -d /data/wwwroot/user1/ sftpuser1

这样每次用户访问服务器都会默认打开/data/wwwroot/user1/,但还是可以跳出这个访问其它目录,需要进行下面一步的操作。

5、设置 sshd_config:

打开sshd_config文件

vi /etc/ssh/sshd_config

找到 Subsystem sftp 这一行,修改成:

Subsystem sftp internal-sftp
UsePAM yes
Match user sftpuser1
ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user1/

将上面的 sftpuser1 和 /data/wwwroot/user1/ 替换成你需要的。

多个用户请重复配置这三行:
Match user sftpuser2
ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user2/

这样可以为不同的用户设置不同的限制目录。

6、重新启动 sshd 服务:

/etc/init.d/sshd restart

现在用 SFTP 软件使用sftpuser1用户登录,就可以发现目录已经被限定、锁死在/data/wwwroot/user1/了。


四、可能遇到的问题

1、修改sshd_config文件后重启 sshd,报错:Directive ‘UseDNS’ is not allowed within a Match block

语法错误,原因未知,只需要把两段配置的位置互调就不报错了。

修改前:

Subsystem sftp internal-sftp
UsePAM yes
Match user sftpuser1
ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user1/

UseDNS no
AddressFamily inet
PermitRootLogin yes
SyslogFacility AUTHPRIV
PasswordAuthentication yes

修改后:

UseDNS no
AddressFamily inet
PermitRootLogin yes
SyslogFacility AUTHPRIV
PasswordAuthentication yes

Subsystem sftp internal-sftp
UsePAM yes
Match user sftpuser1
ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user1/

注:当你出现这个错误的时候,sftp 肯定是连不上了。如果你习惯用 FileZilla 去修改配置文件,那么此时你得不情愿的切换到
shell,去用 vi/vim 去修改它了。

2、新用户通过 sftp 访问时,权限不全,只能读不能写

我试着用 root 账号去把该用户的家目录权限改成 777,但是会出现该用户 sftp 登陆不了的情况。(报错:Server unexpectedly closed network connection)

google 了原因如下:

给新用户的家目录的权限设定有两个要点:

1、由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是 root
2、由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(最大权限 755)

如果违反了上面的两条要求,那么就会出现新用户访问不了 sftp
的情况。

所以/data/wwwroot/user1/及上级的所有目录属主一定要是
root,并且组权限和公共权限不能有写入权限,如果一定需要有写入权限,那们可以在/data/wwwroot/user1/下建立 777 权限的文件夹

mkdir /data/wwwroot/user1/upload
chown -R sftpuser1:root /data/wwwroot/user1/upload

这样sftpuser1用户就可以在/data/wwwroot/user1/upload里随意读写文件了。

lnmp nginx服务器反向代理配置

首先添加域名
lnmp vhost add
添加域名t2.com
添加成功后,去/usr/local/nginx/conf/vhost  找到t2.com.conf文件,删除里面的内容,新加内容如下:
server
{
listen 80;
server_name t2.com;

location / {
proxy_pass https://www.googls.com;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

 

nginx -t 检测配饰是否有误

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

 

successful 代表修改配置没有问题

lnmp nginx restart  命令重启nginx服务即可

linux iptables 查看并对外开放端口(防火墙拦截处理)

查看端口是否可访问:telnet ip 端口号 (如本机的35465:telnet localhost 35465)

开放的端口位于/etc/sysconfig/iptables中

查看时通过 more /etc/sysconfig/iptables 命令查看

如果想开放端口(如:8889)

(1)通过vi /etc/sysconfig/iptables 进入编辑增添一条-A INPUT -p tcp -m tcp –dport 8889 -j ACCEPT 即可

(2)执行 /etc/init.d/iptables restart 命令将iptables服务重启

#(3)保存 /etc/rc.d/init.d/iptables save

 

注:如若不想修改iptables表,可以直接输入下面命令:

iptables -I INPUT -p tcp –dport 8889 -j ACCEPT

附:参考自:http://www.cnblogs.com/alimac/p/5848372.html

若/etc/sysconfig/iptables不存在,

原因:在新安装的linux系统中,防火墙默认是被禁掉的,一般也没有配置过任何防火墙的策略,所有不存在/etc/sysconfig/iptables文件。

解决:

  1. 在控制台使用iptables命令随便写一条防火墙规则,如:iptables -P OUTPUT ACCEPT
  2. 使用service iptables save进行保存,默认就保存到了/etc/sysconfig目录下的iptables文件中
一、概要
1、防火墙分类
①包过滤防火墙(pack filtering)在网络层对数据包进行选择过滤,采用访问控制列表(Access control table-ACL)检查数据流的源地址,目的地址,源和目的端口,IP等信息。
②代理服务器型防火墙
2、iptables基础
①规则(rules):网络管理员预定义的条件
②链(chains): 是数据包传播的路径
③表(tables):内置3个表filter表,nat表,mangle表分别用于实现包过滤网络地址转换和包重构的功能
④filter表是系统默认的,INPUT表(进入的包),FORWORD(转发的包),OUTPUT(处理本地生成的包),filter表只能对包进行授受和丢弃的操作。
⑤nat表(网络地址转换),PREROUTING(修改即将到来的数据包),OUTPUT(修改在路由之前本地生成的数据包),POSTROUTING(修改即将出去的数据包)
⑥mangle表,PREROUTING,OUTPUT,FORWORD,POSTROUTING,INPUT
3、其它
iptables是按照顺序读取规则
防火墙规则的配置建议
Ⅰ 规则力求简单
Ⅱ 规则的顺序很重要
Ⅲ 尽量优化规则
Ⅳ 做好笔记
二、配置
1、iptables命令格式
iptables [-t 表] -命令 匹配 操作 (大小写敏感)
动作选项
ACCEPT          接收数据包
DROP             丢弃数据包
REDIRECT      将数据包重新转向到本机或另一台主机的某一个端口,通常功能实现透明代理或对外开放内网的某些服务
SNAT             源地址转换
DNAT             目的地址转换
MASQUERADE       IP伪装
LOG               日志功能
2、定义规则
①先拒绝所有的数据包,然后再允许需要的数据包
iptalbes -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
②查看nat表所有链的规则列表
iptables -t nat -L
③增加,插入,删除和替换规则
iptables [-t 表名] <-A|I|D|R> 链名 [规则编号] [-i|o 网卡名称] [-p 协议类型] [-s 源ip|源子网] [–sport 源端口号] [-d 目的IP|目标子网] [–dport 目标端口号] [-j 动作]
参数:-A 增加
-I 插入
-D 删除
-R 替换

三、例子
①iptables -t filter -A INPUT -s 192.168.1.5 -i eth0 -j DROP
禁止IP为192.168.1.5的主机从eth0访问本机②iptables -t filter -I INPUT 2 -s 192.168.5.0/24 -p tcp –dport 80 -j DROP
禁止子网192.168.5.0访问web服务③iptables -t filter -I INPUT 2 -s 192.168.7.9 -p tcp –dport ftp -j DROP
禁止IP为192.168.7.9访问FTP服务
④iptables -t filter -L INPUT
查看filter表中INPUT链的规则
⑤iptables -t nat -F
删除nat表中的所有规则
⑥iptables -I FORWARD -d wwww.playboy.com -j DROP
禁止访问www.playboy.com网站
⑦iptables -I FORWARD -s 192.168.5.23 -j DROP
禁止192.168.5.23上网

crontab定时备份mySQL数据库

[sh]

#!/bin/bash
#Shell Command For Backup MySQL Database Everyday Automatically By Crontab

USER=root
PASSWORD=”123456″
DATABASE=”test”
HOSTNAME=”192.168.156.61″

BACKUP_DIR=/home/firefoxbug/mysql_back/ #备份文件存储路径
LOGFILE=/home/firefoxbug/mysql_back/data_backup.log #日记文件路径
DATE=`date ‘+%Y%m%d-%H%M’` #日期格式(作为文件名)
DUMPFILE=$DATE.sql #备份文件名
ARCHIVE=$DATE.sql.tgz #压缩文件名
OPTIONS=”-h$HOSTNAME -u$USER -p$PASSWORD $DATABASE”
#mysqldump -help

#判断备份文件存储目录是否存在,否则创建该目录
if [ ! -d $BACKUP_DIR ] ;
then
mkdir -p “$BACKUP_DIR”
fi

#开始备份之前,将备份信息头写入日记文件
echo ” ” >> $LOGFILE
echo ” ” >> $LOGFILE
echo “———————————————–” >> $LOGFILE
echo “BACKUP DATE:” $(date +”%y-%m-%d %H:%M:%S”) >> $LOGFILE
echo “———————————————– ” >> $LOGFILE

#切换至备份目录
cd $BACKUP_DIR
#使用mysqldump 命令备份制定数据库,并以格式化的时间戳命名备份文件
mysqldump $OPTIONS > $DUMPFILE
#判断数据库备份是否成功
if [[ $? == 0 ]]; then
#创建备份文件的压缩包
tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
#输入备份成功的消息到日记文件
echo “[$ARCHIVE] Backup Successful!” >> $LOGFILE
#删除原始备份文件,只需保 留数据库备份文件的压缩包即可
rm -f $DUMPFILE
else
echo “Database Backup Fail!” >> $LOGFILE
fi
#输出备份过程结束的提醒消息
echo “Backup Process Done”

[/sh]

 

crontab -e #编辑定时任务

 

0 22 * * * /backup/bkdb.sh

意思是每天在22:00执行shell脚本/backup/bkdb.sh

———————
作者:谢谢俊东不用谢
来源:CSDN
原文:https://blog.csdn.net/u012865381/article/details/75258527
版权声明:本文为博主原创文章,转载请附上博文链接!

linux查看占用端口程序 结束掉进程

前言

在OS X中使用GAE引擎来科学上网比如goagent或者wallproxy,可能会在启动过程中出现如下报错然后导致服务启动不成功。

原因

其实就是因为你曾启动过相同或者类似的服务占用了这个端口,一般来讲,在Mac上直接用Python启动的话,会导致退出不完整,你不能通过点击GUI的“退出”按钮来一步到位,后台的Python进程还是存在的,而它就是一直占用端口不释放的元凶。

解决办法

一个是改掉默认的80878086端口,另一个,就是干掉占用端口的程序。

前者立竿见影,但缺点是你总不能一天换一个的吧,如果说是因为其他应用占用端口还好说,那要是因为退出不完整呢?所以,后者才是治标治本的解决办法。但是想要找到这个占用端口的程序,就要引入下面的内容了:

lsof命令

简介

lsof(list open files)命令是一个列出当前系统打开文件的工具。在类UNIX环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以我们使用它来找出占用了端口的程序,看看它究竟是不是冲突是不是错误。

lsof -i 用以显示符合条件的进程情况

所以,我们使用如下命令即可查找出占用了某个端口的程序和其对应的PID

然后使用下面的命令干掉对应的进程: