ubuntu创建sftp+ftp+apache服务器以及实际工程中的应用

一、需求分析

上一篇简单写了如何搭建ftp和sftp服务器,还是很简单的,但是现在公司有了具体的需求,需要搭建一个ftp和sftp服务器,创建一个用户,能同时使用这两个服务,公司开发一个项目,有windows客户端(ftp上传)和Android的app(sftp上传),现在需要在这两个终端上通过这两个协议上传视频、图片等文件至服务器的指定文件夹下,然后apache能够访问到该文件夹,然后下载、播放和查看该视频/图片文件。总结起来就是,sftp和ftp共用一个用户,app和客户端上传文件时使用这一个用户上传,上传的路径是同一个文件夹,然后apache能够访问。画出图如下所示:

二、创建sftp服务器

进入root模式(下面的操作默认都是在root用户下)


  
  
  1. #安装openssh- server
  2. apt- get install -y openssh- server

创建sftp的组sftp-users和用户user1


  
  
  1. #创建sftp-users组
  2. groupadd sftp-users
  3. #创建sftp用户登录目录volume
  4. mkdir /home/volume
  5. #创建sftp用户user1,并且绑定其主目录为刚才创建的目录
  6. useradd -d /home/volume user1
  7. #设置用户user1的密码
  8. passwd user1
  9. #输入两次密码
  10. #将用户user1添加到组sftp-users中,并且设置不能telnet
  11. #注:-a参数表示append,linux在创建用户时会默认创建一个和用户同名的组
  12. #加上-a参数表示alice不退出原来的名为alice的组的情况下,加入sftp-users组中
  13. usermod -a -G sftp-users -s /bin/ false user1

创建ssh用户组及用户管理


  
  
  1. #创建ssh-users组
  2. groupadd ssh-users
  3. #将当前的ubuntu系统管理员加入到ssh-users组中
  4. usermod -a -G ssh-users admin
  5. #创建sftp的根目录并修改相应权限(将admin改为管理员名字)
  6. mkdir /home/volume
  7. mkdir /home/volume/vod
  8. chown admin:sftp-users /home/volume/vod
  9. #因为要上传文件到vod目录,且所有用户共享,所以vod必须要给777权限
  10. chmod 777 /home/volume/vod
  11. #修改ssh的配置文件
  12. vi /etc/ssh/sshd_config
  13. #首先修改sftp的默认端口号(默认是22,现在需求13022),第一行就是
  14. Port 13022
  15. #然后在文件末尾添加下面内容:
  16. AllowGroups ssh-users sftp-users
  17. Match Group sftp-users
  18. ChrootDirectory /home/volume
  19. AllowTcpForwarding no
  20. X11Forwarding no
  21. ForceCommand internal-sftp
  22. #保存退出

注意:上面有一行配置ChrootDirectory /home/volume就表示sftp用户登录进入的目录就是/home/volume,登录目录的权限不能是777,否则登录会失败。

这是修改sshd_config文件,如果修改端口号的话,还需要修改一个配置文件/etc/ssh/ssh_config,与上面的那个文件少了个字母,将里面#   Port 22这一行的注释取消,22改为13022,保存退出,然后重启机器。

注意:sftp默认的端口是22,和ssh的端口一致,如果使用的是xshell之类的工具远程连接到服务器的话,在xshell设置里的端口号也要相应的做修改,否则xshell过去会失败,当然,如果你不改端口的话,这里就不需要在意。

测试:先在服务器的/home/volume下创建测试文件get1.test,在/home/volume/vod下创建测试文件get2.test,在另一台ubuntu机器的当前目录创建put1.test,然后连接上传测试:


  
  
  1. #在另一台ubuntu上输入:
  2. sftp -P 13022 user1@serverIP
  3. #输入密码即可登录成功

测试图如下:登录成功后,首先ls看到当前目录下有vod和get.test,说明当前目录是在volume下,即配置文件ChrootDirectory 写入的目录,然后get命令下载文件get1.test,但是在volume目录下上传是不成功的(上传需要对文件夹有写权限),这是因为volume并不是共享目录,该目录是sftp-users用户组所有,如果要把这一个目录给777权限,那么sftp登录的时候就会失败,也就是说配置中的ChrootDirectory写成了这一级目录,就不能把这一级目录设为共享文件夹,但是要实现sftp和ftp用户共享一个目录,那就只能在该目录的下面再创建一个vod文件夹,这也是为什么最初画需求分析图的时候要求有一个vod目录,虽然多了一级目录,上传的时候需要切换到该目录下,让操作略微麻烦,但却是必须的,然后将vod目录设为777权限就可以了。

二、创建ftp服务器

安装vsftpd

apt-get install vsftpd
  
  

修改vsftpd配置文件


  
  
  1. #先备份
  2. cp /etc/vsftpd.conf /etc/vsftpd.conf.backup
  3. #修改文件
  4. vi /etc/vsftpd.conf
  5. #具体配置如下
  6. listen= NO
  7. listen_ipv6= YES
  8. #禁止匿名访问
  9. anonymous_enable= NO
  10. #设定可以进行写操作
  11. write_enable= YES
  12. #设定上传后文件的权限掩码
  13. local_umask= 022
  14. #禁止匿名用户上传
  15. anon_upload_enable= NO
  16. #禁止匿名用户建立目录
  17. anon_mkdir_write_enable= NO
  18. #设定开启目录标语功能
  19. dirmessage_enable= YES
  20. #使用本地时间
  21. use_localtime= YES
  22. #设定开启日志记录功能。
  23. xferlog_enable= YES
  24. #设定端口20进行数据连接
  25. connect_from_port_20= YES
  26. #设定禁止上传文件更改宿主
  27. chown_uploads= NO
  28. #设定vsftpd的服务日志保存路径,该文件默认不存在,必须要手动touch出来
  29. #必须注意给与该用户对日志的写入权限,否则服务将启动失败
  30. xferlog_file=/var/log/vsftpd.log
  31. #设定日志使用标准的记录格式
  32. xferlog_std_format= YES
  33. #设定支撑vsftpd服务的宿主用户为手动建立的user1
  34. nopriv_user=user1
  35. #设定支持异步传输功能
  36. async_abor_enable= YES
  37. #设定支持ASCII模式的上传和下载功能
  38. ascii_upload_enable= YES
  39. ascii_download_enable= YES
  40. #设定Vsftpd的登陆标语
  41. ftpd_banner=Welcome to blah FTP service.
  42. #使用本地用户
  43. local_root=/home/volume
    chroot_local_user= NO
  44. #开启用户名单
  45. chroot_list_enable= YES
  46. #指定用户目录列表文件
  47. chroot_list_file=/etc/vsftpd.chroot_list
  48. #禁用“ls -R”命令
  49. ls_recurse_enable= NO
  50. #一个安全选项
  51. secure_chroot_dir=/var/run/vsftpd/empty
  52. #pam相关
  53. pam_service_name=ftp
  54. #加密相关
  55. rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
  56. rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
  57. ssl_enable= NO
  58. #utf-8编码
  59. utf8_filesystem= YES

下面是用户和组管理


  
  
  1. #创建ftp-users组
  2. groupadd ftp-users
  3. #由于已经创建了sftp用户user1,现在需要该用户也能使用ftp,则需要将user1加入ftp-users组中
  4. usermod -a -G ftp-users -s /sbin/nologin user1
    usermod -d /home/volume users1
  5. #创建日志文件
  6. touch / var/log/vsftpd.log
  7. #创建用户列表文件
  8. vi /etc/vsftpd.chroot_list
  9. #写入一行
  10. user1

保存退出

重启ftp服务:service vsftpd restart

查看ftp服务状态:service vsftpd status

测试上传下载:服务器的vod目录下创建get_ftp.test文件,客户端当前目录下创建put_ftp.test文件,测试截图如下:首先登陆ftp以后ls看到当前目录下有vod和两个get.test文件,说明登陆的路径是volume,然后进入vod下,看到有get_ftp.test文件,使用get命令下载成功,使用put把本地的put_ftp.test上传,上传也成功了,退出ftp后发现客户端当前路径多了一个get_ftp.test,查看服务器同理。

三、创建apache服务器


  
  
  1. #安装apache2
  2. apt- get install apache2

在浏览器上输入服务器地址+端口,要能进入volume/vod目录,那么几个对应的配置文件就要修改

修改配置文件/etc/apache2/apache2.conf


  
  
  1. #第一个修改处:
  2. #默认配置为:
  3. <Directory />
  4. Options FollowSymLinks
  5. AllowOverride None
  6. Require all denied
  7. </Directory>
  8. #修改为:
  9. <Directory />
  10. Options FollowSymLinks
  11. AllowOverride None
  12. allow from all
  13. </Directory>
  14. #第二个修改处:
  15. #默认配置为:
  16. <Directory / var/www/>
  17. Options Indexes FollowSymLinks
  18. AllowOverride None
  19. Require all granted
  20. </Directory>
  21. #修改为:
  22. <Directory /home/volume>
  23. Options Indexes FollowSymLinks
  24. AllowOverride None
  25. Require all granted
  26. </Directory>

修改配置文件/etc/apache2/sites-available/000-default.conf


  
  
  1. #第一个需要修改的地方
  2. #默认配置是
  3. <VirtualHost *: 80>
  4. #修改为10801(根据不同的需求决定,我这里是10801):
  5. <VirtualHost *: 10801>
  6. #第二个需要修改的地方
  7. #默认配置是
  8. DocumentRoot / var/www/html
  9. #修改为
  10. DocumentRoot /home/volume/vod

修改配置文件/etc/apache2/sites-available/default-ssl.conf,和上一个文件一样

改完之后,VirtualHost _default_:10801和DocumentRoot /home/volume

修改/etc/apache2/ports.conf文件

第一行的linsten 80改为listen 10801

这四个配置文件修改完毕后service apache2 restart重启服务

service apache2 status可查看状态

最后测试,在浏览器上输入IP:PORT访问服务器如图所示,可以看到进入的是服务器的volume/vod文件,刚才上传的几个测试文件还在。

写这个blog之前还搭过一个一样的服务器,ip地址稍微有点变化,用不同的账户信息登录客户端或者app上传文件,上传过程中会检测服务器vod目录下是否有与账户id同名的文件,如果有则按照视频录制的时间创建一系列子目录上传,如果没有检测到,那就新建一个与账户id同名的(账户id是一个唯一标识的数字,数据库中的主键)文件,然后再上传(不管客户端和app使用哪个账户登录,上传文件登录ftp时都使用的是user1):

进入其中一个文件夹下,会看到路径就是以账户id+日期命名(这一部分的功能就在客户端和app上实现了),点击对应的视频文件,可以正常播放,实际项目中的应用就是这样。

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值