1. 程式人生 > >Linux --- CentOS 7 搭建FTP伺服器詳解

Linux --- CentOS 7 搭建FTP伺服器詳解

FTP 是 File Transfer Protocol(檔案傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用於Internet上的控制檔案的雙向傳輸。同時,它也是一個應用程式(Application)。基於不同的作業系統有不同的FTP應用程式,而所有這些應用程式都遵守同一種協議以傳輸檔案。在FTP的使用當中,使用者經常遇到兩個概念:”下載”(Download)和”上傳”(Upload)。

一般在各種linux的發行版中,預設帶有的ftp軟體是vsftp,從各個linux發行版對vsftp的認可可以看出,vsftp應該是一款不錯的ftp軟體。

1、安裝 FTP 服務

  • 檢查是否已安裝vsftpd軟體
rpm -qa |grep vsftpd
  • 如果沒有安裝,使用YUM命令進行安裝
yum install vsftpd -y

2、啟動 VSFTPD 服務

  • 安裝完成後,啟動 FTP 服務:
systemctl start vsftpd.service

# 老版本執行命令:
service vsftpd start
  • 啟動後,可以看到系統已經監聽了 21 埠:
netstat -nltp | grep 21

此時,訪問 ftp://< ip 地址 > 可瀏覽機器上的 /var/ftp 目錄了。

  • 停止 ftp 服務
systemctl stop
vsftpd.service # 老版本執行命令: service vsftpd stop
  • 重啟 ftp 服務
systemctl restart vsftpd.service

# 老版本執行命令:
service vsftpd restart

3、配置 FTP 許可權

目前 FTP 服務登陸允許匿名登陸,也無法區分使用者訪問,我們需要配置 FTP 訪問許可權;

瞭解 VSFTP 配置:

vsftpd 的配置目錄為 /etc/vsftpd,包含下列的配置檔案:

  • vsftpd.conf 為主要配置檔案
  • ftpusers 配置禁止訪問 FTP 伺服器的使用者列表
  • user_list 配置使用者訪問控制

阻止匿名訪問和切換根目錄:

vim /etc/vsftpd/vsftpd.conf

編輯 /etc/vsftpd/vsftpd.conf,找到以下配置並修改或新增:

# 禁用匿名使用者
anonymous_enable=NO

# 禁止切換根目錄
chroot_local_user=YES

# 設定FTP主目錄
local_root=/data/ftp

# 配置FTP被動模式的埠
pasv_min_port=30000
pasv_max_port=30000

修改配置後,重新啟動 FTP 服務,讓配置生效;

匿名訪問讓所有人都可以上傳檔案到伺服器上而無需鑑權,而允許切換根目錄則可能產生越權訪問問題。

4、建立 FTP 使用者

  • 建立一個使用者
useradd user1
  • 為使用者設定密碼
echo "password1" | passwd user1 --stdin
  • 限制該使用者僅能通過 FTP 訪問
usermod -s /sbin/nologin user1

限制使用者 user1只能通過 FTP 訪問伺服器,而不能直接登入伺服器:

  • 為使用者分配主目錄
# 建立目錄:
mkdir -p /data/ftp/pub

# 建立登入歡迎說明檔案:
echo "Welcome to use FTP service." > /data/ftp/welcome.txt

# 設定訪問許可權:
chmod a-w /data/ftp && chmod 777 -R /data/ftp/pub

# 設定為使用者的主目錄: 即使用者通過 FTP 登入後看到的根目錄
usermod -d /data/ftp user1

為使用者建立主目錄並約定:
/data/ftp 為主目錄, 該目錄不可上傳檔案
/data/ftp/pub 檔案只能上傳到該目錄下

5、訪問 FTP 服務

  • 通過資源管理器的位址列或瀏覽器位址列訪問:
ftp://user1:[email protected]<IP 地址>
  • 通過 FTP 客戶端工具訪問

1) FileZilla - 跨平臺的 FTP 客戶端,支援 Windows 和 Mac

FileZilla可以處理同時傳輸,並支援跨平臺FTP,SFTP和FTPS客戶端,有很多有用的功能和直觀的圖形使用者介面。
FileZilla還支援IPv6,書籤,選項卡式使用者介面,執行在Windows,Linux,Mac OS X等,遠端檔案編輯,目錄比較,拖放支援,遠端檔案搜尋等等。

2) WinSCP - Windows 下的 FTP 和 SFTP 連線客戶端

WinSCP是一個用於Windows的開源免費SFTP客戶端,FTP客戶端,WebDAV客戶端和SCP客戶端。 它的主要功能是在本地和遠端計算機之間進行檔案傳輸。 除此之外,WinSCP提供指令碼和基本檔案管理器功能。
WinSCP包括圖形使用者介面,提供多種語言,與Windows整合,批處理檔案指令碼和命令列介面整合,以及各種其他有用的功能。

6、 配置SELinux

VSFTPD是一個FTP伺服器程式,然後SELinux是CentOS的防火牆元件。由於 vsftpd 預設被 SELinux 攔截,所以會遇到訪問FTP出現以下的問題:

226 Transfer done (but failed to open directory).(傳輸完成,但是開啟路徑失敗)
550 Failed to change directory(更改路徑失敗)
553 Could not create file.

解決方法一:降低SELinux安全級別

此方法原理是:降低SELinux安全級別,把enforcing降低到permissive,但降低整體系統安全作為代價來解決一個小問題,這總不是最佳方案。

  • 編輯SELinux配置
vim /etc/sysconfig/selinux
  • 設定SELINUX=enforcing改為SELINUX=permissive
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
  • 重啟vsftpd服務,即可正常訪問FTP

解決方法二:在SELinux中設定FTP允許訪問

  • 首先檢視SELinux中有關FTP的設定狀態:
getsebool -a | grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
# 此行--- ftpd_full_access --> off ---預設為off狀態
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off
  • 設定ftpd_full_access為開啟狀態
setsebool -P ftpd_full_access=on
  • 重啟vsftpd服務,即可正常訪問FTP

-P是儲存選項,每次重啟時不必重新執行這個命令了

7、配置防火牆

配置 iptables 防火牆

1、解決vsftpd在iptables開啟後,無法使用被動模式的問題

  • 編輯/etc/sysconfig/iptables-config新增以下內容
# 新增以下內容,注意順序不能調換  
IPTABLES_MODULES="ip_conntrack_ftp"  
IPTABLES_MODULES="ip_nat_ftp"  

2、開啟21埠

  • 編輯/etc/sysconfig/iptables新增以下內容
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 30000 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

配置 firewalld 防火牆

1、開啟21埠

  • 查詢所有已開啟埠
firewall-cmd --zone=public --list-ports
  • 查詢是否開啟21埠
firewall-cmd --zone=public --query-port=21/tcp
  • 開啟21埠(如未開啟)
firewall-cmd --zone=public --add-port=21/tcp --permanent (--permanent永久生效,無引數重啟後失效)

# 開啟被動模式30000埠(vsftpd.conf中相應配置)
firewall-cmd --zone=public --add-port=30000/tcp --permanent
  • 重新載入防火牆規則
firewall-cmd --reload

再次查詢,開啟成功;

2、firewalld常用命令

  • 檢視防火牆狀態
firewall-cmd --state
  • 檢視版本
firewall-cmd --version
  • 檢視幫助
firewall-cmd --help
  • 其他命令
# 檢視所有開啟的埠: 
firewall-cmd --zone=public --list-ports

# 更新防火牆規則: 
firewall-cmd --reload

# 檢視區域資訊:  
firewall-cmd --get-active-zones

# 檢視指定介面所屬區域: 
firewall-cmd --get-zone-of-interface=eth0

# 拒絕所有包:
firewall-cmd --panic-on

# 取消拒絕狀態: 
firewall-cmd --panic-off

# 檢視是否拒絕: 
firewall-cmd --query-panic

systemctl相關命令

systemctl是CentOS7的服務管理工具中主要的工具,它融合之前service和chkconfig的功能於一體。

# 啟動一個服務:
systemctl start firewalld.service

# 關閉一個服務:
systemctl stop firewalld.service

# 重啟一個服務:
systemctl restart firewalld.service

# 顯示一個服務的狀態:
systemctl status firewalld.service

# 在開機時啟用一個服務:
systemctl enable firewalld.service

# 在開機時禁用一個服務:
systemctl disable firewalld.service

# 檢視服務是否開機啟動:
systemctl is-enabled firewalld.service

# 檢視已啟動的服務列表:
systemctl list-unit-files|grep enabled

# 檢視啟動失敗的服務列表:
systemctl --failed

8、配置埠轉發與埠對映

  • 有外圍防火牆的在防火牆上做對映
  • 系統防火牆做對映
iptables -t nat -A PREROUTING -d 外網IP -p tcp --dport 埠 -j DNAT --to 內網IP:埠
iptables -t nat -A POSTROUTING -d 內網IP -p tcp --dport 埠 -j SNAT --to 外網IP:埠
iptables save

PREROUTING:是目的地址轉換(DNAT),要把別人的公網IP換成你們內部的IP,才讓訪問到你們內部受防火牆保護的伺服器。

POSTROUTING:是源地址轉換(SNAT),要把你內部網路上受防火牆保護的ip地址轉換成你本地的公網地址才能讓它們上網。

總結

參考

相關推薦

Linux --- CentOS 7 搭建FTP伺服器

FTP 是 File Transfer Protocol(檔案傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用於Internet上的控制檔案的雙向傳輸。同時,它也是一個應用程式(Application)。基於不同的作業系統有不同的FTP應用程式,而所有這些應用

Linux/CentOS 7 搭建ftp伺服器簡易版

yum install -y vsftpd //安裝vsftpdvsftpd -v //檢查安裝vi /etc/vsftpd/vsftpd.conf//編輯配置檔案anonymous_enable=NO//禁止匿名登陸chroot_local_user=YES//限制在使用者

ubuntu18系統搭建ftp伺服器

當我們有有的自己的伺服器就可以搭建一個ftp伺服器,可以自己放進去一些東西,這樣以後下載的話會很方便,而且伺服器端速度很快(所以快慢基本就看自己下載段的速度了. 1. 更新一些伺服器上的檔案檔案源 sudo apt-get update 2. 下載vsftpd軟

centos 7搭建FTP伺服器

搭建ftp伺服器 一、安裝vsftpd   1、安裝vsftpd: yum install vsftpd -y   2、啟動vsftpd: systemctl start vsftpd   3、設定開機啟動:systemctl enable vsftpd 4、建

Linux --- CentOS 7 搭建MySQL5.6資料庫伺服器與配置

Centos7將預設資料庫mysql替換成了Mariadb,如果想繼續使用mysql 需要解除安裝Mariadb 再安裝mysql; 1、解除安裝 MariaDB 檢視已安裝的程式 rpm -qa |grep -i mariadb 解除

CentOS 7 網絡配置

ethernet 直接 選擇 code root star get clas fin 今天在一臺PC上安裝了CentOS 7,當時選擇了最小安裝模式,安裝完成後馬上用ifconfig查看本機的ip地址(局域網已經有DHCP),發現報錯,提示ifconfig命令沒找到。

linux上快速搭建ftp伺服器

目錄 簡介 1.vsftpd版安裝教程 安裝 修改配置檔案 啟動 設定開機啟動 2. proftpd版安裝教程 安裝 修改配置檔案 啟動 設定開機啟動

CentOS搭建FTP伺服器

主要步驟: (1)在ROOT賬戶下使用 "rpm -q vsftpd" 命令檢測是否安裝了該ftp服務。若已經安裝,會返回對應的版本號資訊;若沒有安裝,使用 “yum -y install vsftpd” 安裝vsftpd服務。 (2)vsftpd的配置檔案是 "

Centos 7搭建Gitlab伺服器(圖文結合)

一、 安裝並配置必要的依賴關係 在CentOS系統上安裝所需的依賴:ssh,防火牆,postfix(用於郵件通知) ,wget,以下這些命令也會開啟系統防火牆中的HTTP和SSH埠訪問。 1.安裝ssh sudo yum install -y curl policyc

CentOS 7安裝MariaDB 10以及相關配置

show utf8 內容 操作 4.0 ant star emctl baseurl CentOS 7安裝MariaDB 10詳解以及相關配置 第一步:添加 MariaDB yum 倉庫 首先在CentOS操作系統中/etc/yum.repos.d/目錄下添加 Mari

centos 7 搭建web伺服器

centos7安裝 這裡就是網上下好iso映象,然後一步步裝好,建議初學者選GNONE桌面版方便操作 Apache、Mysql、PHP安裝 Apacheapache軟體包名稱叫做httpdyum install httpd出現提示時一路 y+回車 就好 啟

centos 7 下iptables引數

在紅帽RHEL7系統中firewalld服務取代了iptables服務,如果我們不想用或者不習慣使用firewalld服務,請看下面的操作:   iptables命令中則常見的控制型別有: ACCEPT:允許通過. LOG:記錄日誌資訊,然後傳給下一條規則繼續匹配. REJECT

CentOS 7 安裝配置 VNC

配置文件 安裝配置 default nom png 配置信息 mina vim 服務啟動 VNC是什麽( Virtual Network Computing)VNC允許Linux系統可以類似實現像Windows中的遠程桌面訪問那樣訪問Linux桌面。本文配置是在CentOS

CentOS 7 搭建SVN伺服器

一、安裝 yum -y install subversion 二、配置 1. 建立倉庫 mkdir -p /home/svn/repos svnadmin create /home/svn/re

windows service 2012:[7]搭建FTP伺服器

對於windows service 2012搭建FTP伺服器而言,本想用IIS8.0自帶的FTP進行搭建。但是Jhonse哥一直以來用FileZilla_Server搭建FTP伺服器,所以此教程採用FileZilla_Server來搭建FTP伺服器。

linux(centOS)下搭建node伺服器三、 pm2管理和保持後臺執行node應用

一、安裝pm2 全域性安裝pm2: npm install -g pm2 安裝完成檢視幫助命令(pm2 -h)報錯: -bash:pm2:command not found 執行: ln

CentOS搭建ftp伺服器出現的問題

[[email protected] vsftpd]# setsebool allow_ftpd_full_access 1 [[email protected] vsftpd]# setsebool allow_ftpd_use_cifs 1 [[email protected

linux/centos定時任務at指令

指令:at 定時任務,指定一個時間執行一個任務,只能執行一次。 語法:# at [引數] [時間] at> 執行的指令 退出at命令 ctrl+d 命令前提: 需要開啟atd程序(在redhat中atd是預設隨系統啟動而啟動) 測試中發現在centos6.5 mini

CentOS 7 搭建ngrok伺服器,從此不再需要花生殼

一、前提條件       一個固定IP,一個域名解析到該IP 二、提前準備工作 1、安裝gcc yum install gcc 2.安裝git yum install git 3.安裝GO語言環境    下載: wget https://storage.googleapis.com/golang/go

CentOS 7搭建SVN伺服器 nginx apache

svn配置 mount /dev/cdrom /media/cdrom   掛載光碟機 1.安裝svn伺服器端 yum install subversion      從映象下載安裝svn伺服器端 c