1. 程式人生 > >Linux Centos 通過虛擬用戶訪問FTP的配置

Linux Centos 通過虛擬用戶訪問FTP的配置

and swd 系統 image 用戶名 systemctl rep 直接 chang

Linux Centos 通過虛擬用戶訪問FTP的配置

實驗需求:

讓下面4個虛擬用戶使用系統用戶ftpvu的權限來連接到Linux FTP服務器,並確保都鎖定在

自己的虛擬用戶目錄,不能切換到其他目錄。 ftp1-3的帶寬速率限制在500KB,davidge用戶不限制帶寬。

技術分享圖片

系統環境:

[root@cent7-184 ~]# uname -r

3.10.0-229.el7.x86_64

[root@cent7-184 ~]# cat /etc/redhat-release

CentOS Linux release 7.5.1804 (Core)

還需要先關閉防火墻和selinux。

先yum安裝vsftpd:

yum -y install vsftpd

技術分享圖片

查詢是否正確安裝vsftpd:

[root@cent7-184 ~]# rpm -qa vsftpd

vsftpd-3.0.2-25.el7.x86_64

之後安裝PAM(用於用戶認證)和DB4(用於生成虛擬用戶的用戶名密碼的db文件)

yum -y install pam pam-devel db4 db-devel db4-utils db4-tcl

技術分享圖片

[root@cent7-184 ~]# rpm -qa pam pam-devel db4 db-devel db4-utils db4-tcl

pam-devel-1.1.8-22.el7.x86_64

pam-1.1.8-22.el7.i686

pam-1.1.8-22.el7.x86_64

創建用於虛擬用戶的系統用戶ftpvu,並禁止通過shell登陸,不創建家目錄。

[root@cent7-184 ~]# useradd ftpvu -M -s /sbin/nologin

[root@cent7-184 ~]# id ftpvu

uid=8890(ftpvu) gid=8890(ftpvu) groups=8890(ftpvu)

創建虛擬用戶信息的文件:

直接在命令行執行即可(奇數行是用戶名,偶數行是密碼)

也可以自己通過vi, vim來復制下面的用戶信息來手動創建。

cat >>/etc/vsftpd/virtusers <<EOF
ftp1
123456
ftp2
123456
ftp3
123456
davidge
123456
EOF

技術分享圖片

生成虛擬用戶認證的db文件

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

技術分享圖片

如果新增用戶後需要重新執行上面的db_load命令來重新生成加密用戶信息。

配置pam驗證的配置文件:

cat >/etc/pam.d/vsftpd <<EOF

#%PAM-1.0

auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers

account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers

EOF

[root@cent7-184 vsftpd]# cat /etc/pam.d/vsftpd

#%PAM-1.0

auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers

account sufficient /lib64/security/pam_userdb.so

創建虛擬用戶的存儲路徑並修改目錄權限為755,owner為: ftpvu

[root@cent7-184 ~]# mkdir -p /data/ftp/{ftp1,ftp2,ftp3}

[root@cent7-184 ~]# mkdir -p /data/ftp/davidge

[root@cent7-184 ~]# chmod -R 755 /data/ftp/

[root@cent7-184 ~]# chown -R ftpvu. /data/ftp/

[root@cent7-184 ~]# ls -l /data/ftp/

total 0

drwxr-xr-x 2 ftpvu ftpvu 6 Mar 2 10:53 davidge

drwxr-xr-x 2 ftpvu ftpvu 6 Mar 2 10:53 ftp1

drwxr-xr-x 2 ftpvu ftpvu 6 Mar 2 10:53 ftp2

drwxr-xr-x 2 ftpvu ftpvu 6 Mar 2 10:53 ftp3

給ftp的用戶指定家目錄:

[root@cent7-184 ftp1]# usermod -d /data/ftp/ ftpvu

[root@cent7-184 ftp1]# grep ftp /etc/passwd

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

ftpvu:x:8890:8890::/data/ftp/:/sbin/nologin

給每個用戶創建虛擬用戶個人配置文件:

先創建配置文件的根目錄:

mkdir /etc/vsftpd/vconf

shell命令行直接創建ftp1用戶的配置文件:

cat >>/etc/vsftpd/vconf/ftp1<<EOF
local_root=/data/ftp/ftp1
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
write_enable=YES
local_umask=022
idle_session_timeout=600
data_connection_timeout=120
local_max_rate=512000
EOF

創建ftp2用戶的配置文件

cat >>/etc/vsftpd/vconf/ftp2<<EOF
local_root=/data/ftp/ftp2
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
write_enable=YES
local_umask=022
idle_session_timeout=600
data_connection_timeout=120
local_max_rate=512000
EOF

創建ftp3用戶的配置文件

cat >>/etc/vsftpd/vconf/ftp3<<EOF
local_root=/data/ftp/ftp3
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
write_enable=YES
local_umask=022
idle_session_timeout=600
data_connection_timeout=120
local_max_rate=512000
EOF

創建davidge用戶的配置文件

cat >>/etc/vsftpd/vconf/davidge<<EOF
local_root=/data/ftp/davidge
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
write_enable=YES
local_umask=022
idle_session_timeout=600
data_connection_timeout=120
EOF

完成後通過cat查詢配置文件信息:

技術分享圖片

FTP配置文件重要參數說明:

anonymous_enable=NO #禁用匿名用戶

dual_log_enable=yes # 配置雙重日誌。

xferlog_file=/var/log/xferlog #訪問日誌的文件路徑

guest_enable=YES #啟用虛擬用戶

guest_username=ftpvu #指定虛擬用戶的系統用戶名

virtual_use_local_privs=YES #虛擬用戶使用本地用戶的權限

user_config_dir=/etc/vsftpd/vconf #虛擬用戶配置文件目錄

allow_writeable_chroot=YES ##可寫(可上傳)

chroot_local_user=YES #本地用戶禁錮在宿主目錄中

把下面的配置文件追加到vsftpd.conf裏面,並禁用匿名用戶,同時開啟ftp的日誌:

通過sed禁用匿名用戶

sed -i ‘s@anonymous_enable=YES@anonymous_enable=NO@g‘ /etc/vsftpd/vsftpd.conf

追加配置文件新到vsftpd.conf

cat >>/etc/vsftpd/vsftpd.conf <<EOF
dual_log_enable=yes
xferlog_file=/var/log/xferlog
guest_enable=YES
guest_username=ftpvu
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vconf
allow_writeable_chroot=YES
anon_other_write_enable=YES
chroot_local_user=YES
EOF

最後生效的配置文件內容:

[root@cent7-184 vsftpd]# grep ‘^[a-Z]‘ /etc/vsftpd/vsftpd.conf

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=NO

listen_ipv6=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

dual_log_enable=yes

xferlog_enable=YES

xferlog_file=/var/log/xferlog

guest_enable=YES

guest_username=ftpvu

virtual_use_local_privs=YES

user_config_dir=/etc/vsftpd/vconf

allow_writeable_chroot=YES

anon_other_write_enable=YES

[root@cent7-184 ftp1]# systemctl restart vsftpd.service

[root@cent7-184 ftp1]# lsof -i :21

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

vsftpd 20846 root 4u IPv6 33721328 0t0 TCP *:ftp (LISTEN)

[root@cent7-184 ftp1]# netstat -lntup|grep ftp

tcp6 0 0 :::21 :::* LISTEN 20846/vsftpd

登陸測試和日誌:

技術分享圖片

技術分享圖片

技術分享圖片

使用 davidge 用戶傳輸的時候不限制速度:

技術分享圖片

技術分享圖片

只能在自己的虛擬用戶目錄下操作,不可以切換到其他目錄,否則提示550切換目錄失敗

技術分享圖片

添加新用戶的方法:

cat >>/etc/vsftpd/virtusers <<EOF
ftp10
123456
EOF

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

mkdir -p /data/ftp/ftp10

chown -R ftpvu. /data/ftp/

cat >>/etc/vsftpd/vconf/ftp10<<EOF
local_root=/data/ftp/ftp10
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
write_enable=YES
local_umask=022
idle_session_timeout=600
data_connection_timeout=120
local_max_rate=512000
EOF

systemctl restart vsftpd.service

lsof -i :21

上面幾條命令的截圖:

技術分享圖片

驗證登陸和速率:

技術分享圖片

錯誤提示信息和解決辦法:

1. 500 OOPS:

由於建立的本地用戶沒有指定家目錄,需要通過usermod來指定定義的家目錄。

500 OOPS: cannot change directory:/home/ftpvu

Login failed.

[root@cent7-184 ftp1]# usermod -d /data/ftp/ ftpvu

[root@cent7-184 ftp1]# grep ftp /etc/passwd

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

ftpvu:x:8890:8890::/data/ftp/:/sbin/nologin

2. 550 Failed:

ftp> cd /var

550 Failed to change directory.

550 Failed- 客戶端沒有切換目錄的權限,由於限制了目錄只能訪問自己的目錄。

chroot_local_user=YES

如果想讓授權的用訪問其他目錄可以配置下面的2行:

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/vsftpd.chroot_list

並把需要切換目錄的用戶放入list文件: /etc/vsftpd/vsftpd.chroot_list

Linux Centos 通過虛擬用戶訪問FTP的配置