docker、centos7开启ftp和sftp

前言:Centos7中默认已经安装了sshd服务(sftp),但是如果以CentOS为基础镜像时,sftp服务可能是不存在的,所以需要安装ssh。

一.安装ssh

开启ssh服务需要root权限,先用root账户登陆。在centos7中ssh服务默认是已经被安装了的。通过命令rpm -qa | grep openssh 查看是否安装了ssh服务
在这里插入图片描述
显示上面三个,说明存在,则可以跳过本步骤。
如果不存在或者不全,安装 : yum install openssh-server
安装好后在ssh配置文件里进行配置 :vi /etc/ssh/sshd_config
在这里插入图片描述
在这里插入图片描述

然后esc+:wq 保存退出。
修改完后用/bin/systemctl start sshd.service开启ssh服务,这个命令没有回显
开启后用 ps -e | grep sshd检查一下ssh服务是否开启
再用netstat -an | grep 22检查一下22端口是否开启
将ssh服务添加到自启动列表中:systemctl enable sshd.service

二.安装ftp

1、安装并启动FTP服务

1.1 安装vsftpd

使用 yum 安装 vsftpd
yum install -y vsftpd

1.2 启动vsftpd

安装完成后, 启动vsftpd服务 :
service vsftpd start
启动后, 可以看到系统已经监听了 21 端口(Ubuntu下命令为: lsof -i:21)
netstat -nltp | grep 21
此时, 访问ftp://IPaddr 就可浏览主机上的 /var/ftp目录了

2、配置 FTP 权限

2.1 了解 vsftpd 配置

vsftpd 的配置目录为 /etc/vsftpd, 包含下列的配置文件 :
a. vsftpd.conf 为主要配置文件
b. ftpusers 配置禁止访问 FTP 服务器的用户列表
c. user_list 配置用户访问控制

2.2 阻止匿名访问和切换根目录

匿名访问和切换目录都会给服务器带来安全风险, 我们把这两个功能关闭.
编辑 /etc/vsftpd/vsftpd.conf, 找到下面两处配置并修改:

禁用匿名用户 YES 改为NO
anonymous_enable=NO
禁止切换根目录 删除或#
chroot_local_user=YES

编辑完成后保存配置, 重新启动 FTP 服务
service vsftpd restart
2.3 创建 FTP 用户

创建一个用户 ftpuser
useradd ftpuser
为用户 ftpuser 设置密码
passwd ftpuser 或 echo “new_password” | passwd ftpuser --stdin

2.4 限制该用户仅能通过FTP访问

限制用户 ftpuser 只能通过 FTP 访问服务器, 而不能直接登录服务器
usermod -s /sbin/nologin ftpuser

2.5 为用户分配主目录

为用户 ftpuser创建主目录并约定
/data/ftp:为主目录, 该目录不可上传文件
/data/ftp/pub:文件只能上传到该目录下
在/data中创建相关的目录 mkdir -p /data/ftp/pub
设置访问权限 chmod a-w /data/ftp && chmod 777 -R /data/ftp/pub
设置为用户的主目录 usermod -d /data/ftp ftpuser

3、OK

至此, FTP服务已经搭建完成, 可以使用各种第三方客户端来测试访问FTP服务器 访问前, 记得关闭防火墙 service
firewalld stop 如果需要使用root登录连接FTP服务, 需要配置 /etc/vsftpd/user_list 和
/etc/vsftpd/ftpusers, 将文件中的root注释

三.配置SFTP

SFTP通过SSH在计算机之前建立安全的链接用作文件传输;通过SFTP可以很方便的将文件传输到你的服务器。
本文将在CentOS 7上通过OPENSSH配置SFTP服务。

1、创建用户组 sftp

groupadd sftp

2、创建用户 agree

useradd -g sftp -s /sbin/nologin -M agree

-g 指定用户所属组,必须已经存在,
-s /sbin/nogin 禁止ssh登录
-M 不要自动创建用户的宿主目录
agree添加的用户名

3、创建密码

passwd agree

4、 创建目录,-d 创建多级目录

mkdir -p /sftp

5、 修改用户宿主目录 ,指定/sftp登录默认目录

usermod -d /sftp agree (docker中可以修改为/aase,不修改的话,也不影响下面的上传目录)

6、修改配置文件 sshd_config

vi /etc/ssh/sshd_config

将下面这行注释
Subsystem sftp /usr/libexec/openssh/sftp-server
然后在末行加入:
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /sftp (对应docker容器目录为/aase)
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no

说明:

Match Group sftp 匹配sftp用户组中的用户
ChrootDirectory %h 只能访问默认的用户目录(自己的目录),本文采用的自定义的目录

7、设置目录权限

chown root:sftp /sftp (我的docker容器服务目录为aase)
chmod 755 /sftp

8、上传目录

设置用户可以上传的目录, 该用户下允许用户上传删除修改文件及文件夹

mkdir -p /sftp/upload (对应docker容器目录为/aase/workspace)
chown agree:sftp /sftp/upload (对应docker容器目录为/aase/workspace)
chmod 755 /sftp/upload(对应docker容器目录为/aase/workspace)

9、启动sshd.service

systemctl start sshd.service

10、测试

sftp agree@127.0.0.1

11、解决报错问题

1.出现Received message too long 1416128883

这个错误,网上好多说是把.bash_profile .vimrc .gnomerc 这三个文件里的cat 、echo去掉,可是我的电脑里这三个文件根本不存在,创建用户时不是/bin/bash,感觉不是这个的问题。水平有限,未能根本解决。可以修改他的限制。
把test用户的 /sbin/nologing改为/bin/bash
usermod -s /bin/bash test

2.如果出现安全类的问题

建议修改 /etc/selinux/config 中SELINUX 为 disabled,
然后把防火墙关闭

  1. 重启后生效
    开启: chkconfig iptables on
    关闭: chkconfig iptables off

  2. 即时生效,重启后失效
    开启: service iptables start
    关闭: service iptables stop

12、使用私钥登录

1、生成秘钥

ssh-keygen -t rsa
在这里插入图片描述
输入ssh-keygen -t rsa表示生成RSA密码,可以存放位置,如果不输入位置,使用默认值,home下的本用户名下的.ssh下,中间出现要求输入密码的,可以输入,也可以不输入,如果输入则要记住该密码。

2、修改openssh服务器端配置

在安装位置的etc目录下找到文件sshd_config,例如我的文件位置在/etc/sshd_config,修改以下两项

AuthorizedKeysFile .ssh/authorized_keys

PasswordAuthentication no

第一个参数用于说明公钥文件位置,第二个是强制使用密钥访问,而不是用户名及密码,当然第二个参数可以保持yes,这样可以有两种方式访问。

3、重启openss

net stop opensshd

net start opensshd

这样在/home/username/.ssh/下生成两个文件id_rsa及id_rsa.pub,其中id_rsa是私钥,id_rsa.pub是公钥,私钥是客户端用的,公钥该名称id_rsa.pub为authorized_keys

4、登录

如果sftp在docker容器内,则需要把生成的私钥复制出来

docker cp 容器id :容器内私钥路径 宿主机路径

sftp -oIdentityFile=私钥地址 -oPort=端口 用户名@ip #此时的私钥地址就是宿主机路径
样例 sftp -oIdentityFile=/tmp/.ssh/id_rsa -oPort=23 agree@192.168.57.10

四.docker

1.Failed to get D-Bus connection: Operation not permitted

1.1 docker容器配置ssh时可能会遇到:Failed to get D-Bus connection: Operation not permitted

容器启动时用如下命令:docker run --privileged -itd 容器名称 /usr/sbin/init,然后执行docker exec -it 容器id /bin/bash

1.2 以包含ftp/sftp的镜像为基础镜像时

dockerfile最后添加 & /usr/sbin/sshd -D

例如: CMD sh startup.sh & /usr/sbin/sshd -D

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值