1. 程式人生 > 其它 >centos開啟ftp-含防火牆開啟放行服務(不同於埠)

centos開啟ftp-含防火牆開啟放行服務(不同於埠)

技術標籤:linux_shell_ansiblecentosftp

原文:https://blog.csdn.net/zz_aiytag/article/details/107451720

文章目錄

環境與需求

安裝

首先檢查系統是不是已經有了ftp服務

[[email protected] opt]# rpm -qa | grep vsftpd

我這裡沒有安裝,直接安裝

[[email protected] opt]#  yum -y install vsftpd

建立ftp使用者

建立使用者

# useradd -s 是指定使用者登入後所使用的shell。預設值為/bin/bash
# 這裡指定/sbin/nologin是不允許系統login,可以使用其他ftp等服務
# -d 是指定使用者登入時的主目錄
# 這個ftpuser01目錄不要手動建立,否則還需要修改許可權,在下面指令執行後會自動建立對應目錄
[[email protected] opt]# useradd -s /sbin/nologin -d /home/ftpuser01 ftpuser01

檢視使用者

[[email protected] opt]# cat /etc/passwd
ftpuser01:x:1001:1001::/home/ftpuser01:/sbin/nologin

設定使用者密碼

[[email protected] opt]# passwd ftpuser01
Changing password for user ftpuser01.
New password: # 我這裡輸入的是123456
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

修改配置檔案

編輯/etc/vsftpd/vsftpd.conf檔案

[[email protected]
opt]# vim /etc/vsftpd/vsftpd.conf # 是否允許匿名使用者登入,改成NO anonymous_enable=NO # 所有的使用者只能在自己的目錄範圍內活動 chroot_list_enable=NO chroot_local_user=YES #不增加此行引數,登入時會出現使用者身份驗證失敗 allow_writeable_chroot=YES # 如果配置了上面一行仍然出現使用者身份驗證失敗的問題,則有可能是selinux問題了 # 可以臨時關閉selinux測試一下 # setenforce 0 # sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

以下核心引數按照預設即可

local_enable=YES
write_enable=YES
local_umask=022
pam_service_name=vsftpd
connect_from_port_20=YES

先暫時修改上述引數,儲存退出,重啟vsftpd服務

[[email protected] opt]# systemctl restart vsftpd
[[email protected] opt]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-07-19 22:01:03 CST; 6s ago
  Process: 1152 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 1153 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └─1153 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

我這裡使用xftp登入
在這裡插入圖片描述
登入後只顯示根目錄,然後在根目錄建立一個資料夾,在LINUX中檢視該資料夾,可知根目錄就是使用者的活動空間。

[[email protected] opt]# cd /home/ftpuser01/
[[email protected] ftpuser01]# ll
total 0
drwxr-xr-x 2 ftpuser01 ftpuser01 6 Jul 19 22:12 testpath

啟用日誌功能

以下日誌預設是開啟的,不用管,直接檢視/var/log/xferlog即可

xferlog_enable=YES
xferlog_std_format=YES 
xferlog_file=/var/log/xferlog

看了很多部落格,說vsftpd本身有自己風格的日誌,需要配置以下

dual_log_enable=YES 
vsftpd_log_file=/var/log/vsftpd.log

但是我配了之後,啟動vsftpd失敗,說引數有問題,先暫時不處理

[[email protected] log]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Sun 2020-07-19 22:26:31 CST; 54s ago
  Process: 1220 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=2)
 Main PID: 1183 (code=killed, signal=TERM)

Jul 19 22:26:31 worker.learn.bigdata systemd[1]: Starting Vsftpd ftp daemon...
Jul 19 22:26:31 worker.learn.bigdata vsftpd[1220]: 500 OOPS: bad bool value in config file for: dual_log_enable
Jul 19 22:26:31 worker.learn.bigdata systemd[1]: vsftpd.service: control process exited, code=exited status=2
Jul 19 22:26:31 worker.learn.bigdata systemd[1]: Failed to start Vsftpd ftp daemon.
Jul 19 22:26:31 worker.learn.bigdata systemd[1]: Unit vsftpd.service entered failed state.
Jul 19 22:26:31 worker.learn.bigdata systemd[1]: vsftpd.service failed.

安全設定

# 使用者空閒超時,單位秒
idle_session_timeout=600
# 資料連線空閒超時,單位秒
data_connection_timeout=120
# 將客戶端空閒1分鐘後斷開
accept_timeout=60
# 本地使用者傳輸速率,單位bite
local_max_rate=100000
# FTP的最大連線數
max_clients=200
# 每IP的最大連線數
max_per_ip=10

被動模式設定

# 是否開戶被動模式
pasv_enable=YES
# 被動模式最小埠
pasv_min_port=30000
# 被動模式最大埠
pasv_max_port=30999

防火牆開啟狀態設定

文章中以上操作都是防火牆關閉狀態下進行的,當防火牆開啟時,會出現如下一系列的問題。
檢視防火牆狀態

[[email protected] services]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2020-07-22 10:14:35 CST; 35min ago
     Docs: man:firewalld(1)
 Main PID: 561 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─561 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

防火牆開啟狀態下,使用ftp工具連線時出現無法連線的情況。
在這裡插入圖片描述
不關閉防火牆,只能對防火牆的規則進行修改。
firewalldiptables不太一樣,firewalld可以直接對服務進行策略設定。

[[email protected] firewalld]# cd /usr/lib/firewalld
[[email protected] firewalld]# ll
total 16
drwxr-xr-x. 2 root root  203 Jul 16 09:21 helpers
drwxr-xr-x. 2 root root 4096 Jul 16 09:21 icmptypes
drwxr-xr-x. 2 root root   20 Jul 16 09:21 ipsets
drwxr-xr-x. 2 root root 8192 Jul 22 10:44 services
drwxr-xr-x. 2 root root   94 Jul 16 09:21 xmlschema
drwxr-xr-x. 2 root root  163 Jul 16 09:21 zones

檢視firewalld自帶的服務,在services目錄下有自帶的ftp.xml檔案,它已經定義好了21埠。

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>FTP</short>
  <description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the vsftpd package installed for this option to be useful.</description>
  <port protocol="tcp" port="21"/>
  <module name="nf_conntrack_ftp"/>
</service>

使用firewall-cmd工具直接將ftp服務放入通行名單
先檢視firewall-cmd工具版本

[[email protected] services]# firewall-cmd --version
0.4.4.4

檢視當前活動區域

[[email protected] services]# firewall-cmd --get-active-zones
public
  interfaces: ens33

檢視當前區域的服務

[[email protected] services]# firewall-cmd --list-service
ssh dhcpv6-client

開放ftp服務

# 暫時開放
[[email protected] services]# firewall-cmd --add-service=ftp
success
# 永久開放
[[email protected] services]# firewall-cmd --add-service=ftp --permanent
success
# 永久關閉
[[email protected] services]# firewall-cmd --remove-service=ftp --permanent
success
# 任何改動操作都需要重新載入
[[email protected] services]# firewall-cmd --reload
success

執行完永久開放和重新載入後,再次檢視服務

[[email protected] services]# firewall-cmd --list-service
ssh dhcpv6-client ftp

再次登入就能正常登入了。