ftp服務

配置匿名用戶ftp

服務基礎環境準備,關閉防火牆和selinux

主機名 操作系統 ip地址
@localhost rhel 7 192.168.168.105
@client rhel 7 192.168.168.34

服務端

[root@localhost~]# cat /etc/redhat-release   
Red Hat Enterprise Linux Server release 7.4 (Maipo)
[root@localhostr~]# systemctl stop firewalld.service    
[root@localhost ~]# setenforce 0           #關閉selinux
[root@localhost ~]# hostnamectl set-hostname ftp-client
[root@localhost ~]# bash

客戶端

[root@client ~]# systemctl stop firewalld
[root@client ~]# setenforce 0
setenforce: SELinux is disabled

#服務端進行操作
安裝vsftpd

[root@localhost~ ~]# yum -y install vsftpd

#啓動ftp服務並加入開機自啓


[root@localhost ~]# systemctl enable vsftpd

[root@localhost ~]# systemctl start vsftpd

#修改vsftpd主配置文件

[root@localhost~]# vim /etc/vsftpd/vsftpd.conf
#啓動匿名用戶、允許上傳和創建文件權限
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES

修改默認ftp共享⽬目錄站點權限,最後重新加載vsftpd服務

[root@localhost~]# chmod -R 777 /var/ftp/
[root@localhost~]# systemctl restart vsftpd

Linux下使⽤用lftp客戶端⼯工具訪問vsftpd服務驗證,安裝此⼯工具

[root@localhost~]# yum install lftp -y

使⽤用匿匿名⽤用戶登錄vsftpd

[root@client ~]# lftp 192.168.168.105
lftp 192.168.168.105:~> ls
ls: 登錄失敗: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()

遇見問題:登錄失敗!創建文件失敗!上傳文件失敗!刪除文件失敗!的解決方法
原因及解決方法

#當我們限定了用戶不能跳出其主目錄之後,使用該用戶登錄FTP時往往會遇到這個錯誤:

500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

這是由於下面的更新造成的:

Add stronger checks for the configuration error of running with a writeable root directory inside a chroot(). This may bite people who carelessly turned on chroot_local_user but such is life.

從2.3.5之後,vsftpd增強了安全檢查,如果用戶被限定在了其主目錄下,則該用戶的主目錄不能再具有寫權限了!如果檢查發現還有寫權限,就會報該錯誤。
要修復這個錯誤,可以用命令chmod a-w /var/ftp/去除用戶主目錄的寫權限

[root@localhost~]# chmod a-w /var/ftp/
[root@localhost~]# systemctl restart vsftpd

再次檢測

[root@client ~]# lftp 192.168.168.105
lftp 192.168.168.105:~> ls
drwxrwxrwx    2 0        0               6 Aug 03  2017 pub

#可以看到服務端/var/ftp裏面的內容了

新建文件夾試試

lftp 192.168.168.105:/> mkdir lala
mkdir: Access failed: 550 Create directory operation failed. (lala)

#可以看到無法新建lala這個目錄,是不是由於權限不夠,我們試着給文件寫的權限

[root@localhost~ ~]# chmod o+w /var/ftp

#再次新建lala

lftp 192.168.168.105:/> mkdir lala

mkdir 成功, 建立 `lala'
#成功

lftp 192.168.168.105:/> lcd /etc
lcd 成功, 本地目錄=/etc
傳文件能不能成功
lftp 192.168.168.105:/> put inittab 
put: Access failed: 553 Could not create file. (inittab)

#不能上傳文件,可能是selinux的問題

[root@localhost~ ~]# getsebool -a |grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> 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

#可以看到,允許匿名用戶上傳的給關閉的了。

#現在我們設置布爾值

[root@localhost ~]# setsebool -P allow_ftpd_anon_write=1
[root@localhost ~]# getsebool -a |grep allow_ftpd_anon
[root@localhost ~]# getsebool -a |grep ftp
ftpd_anon_write --> on

##OK,允許匿名用戶的上傳就給打開了。
#但是還有一點,/var/ftp/pub的context值是不正確的,
#現在我們必須調整這個/var/ftp/pub目錄的context值。

[root@localhost ~]# ls -ldZ /var/ftp/pub/
drwxrwxrwx. root root system_u:object_r:public_content_t:s0 /var/ftp/pub/
[root@localhost~]# chcon -R -t public_content_rw_t /var/ftp/pub/
[root@localhost~]# ls -ldZ /var/ftp/pub/
drwxrwxrwx. root root system_u:object_r:public_content_rw_t:s0 /var/ftp/pub/

#Selinux的問題就解決了,現在我們再來上傳文件

lftp 192.168.168.105:/> ls
drwx------    2 14       50              6 Sep 12 14:28 lala
drwxrwxrwx    2 0        0               6 Aug 03  2017 pub
lftp 192.168.168.105:/> cd pub/
lftp 192.168.168.105:/pub> ls inittab
lftp 192.168.118.100:/pub> put /etc/inittab 
491 bytes transferred
lftp 192.168.168.105:/pub> ls
-rw------- 

#匿名用戶就可以上傳文件了。

#總結,開放匿名用戶的上傳文件的權限的解決方法

1,開啓目錄自身的權限

2,開啓服務控制的權限

#3,解決selinux的問題

lftp 192.168.168.105:/pub> rm inittab 
rm: Access failed: 550 Permission denied. (inittab)

#沒有刪除文件的權限

用戶訪問

#本地用戶訪問ftp服務,新建用戶ftp_test


[root@localhost~]# useradd ftp_test
[root@localhost~]# echo "123"|passwd --stdin ftp_test

#更改用戶 ftp_test 的密碼 。
passwd:所有的身份驗證令×××已經成功更新。

#客戶端驗證

[root@client ~]# lftp 192.168.168.105
lftp 192.168.118.100:~> login ftp_test 123
lftp [email protected]:~> mkdir ftp
mkdir 成功, 建立 `ftp'    

#服務端查看

[root@localhost ~]# ls /home/ftp_test/
ftp

鎖定所有本地⽤用戶只能在⾃自⼰己的家⽬目錄操作

chroot_local_user=YES #在配置文件裏面加入此條
1
虛擬用戶配置如下:

#創建文本格式的用戶名,密碼列表,例添加兩個用戶tom,jerry,密碼爲123,456

[root@ftp-server ~]# touch /etc/vsftpd/vu.list
[root@ftp-server ~]# echo 'tom' >> /etc/vsftpd/vu.list
[root@ftp-server ~]# echo '123' >> /etc/vsftpd/vu.list
[root@ftp-server ~]# echo 'jerry' >> /etc/vsftpd/vu.list
[root@ftp-server ~]# echo '456' >> /etc/vsftpd/vu.list
[root@ftp-server ~]# cat /etc/vsftpd/vu.list
tom
123
jerry
456

#用戶名和密碼一一對應,前面是賬號,後面跟密碼

安裝db4工具

[root@ftp-server ~]# yum -y install db4*

#將剛創建的文本格式的用戶名,密碼文件使用db4工具轉換爲數據庫文件

[root@ftp-server ~]# db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db

#爲提高虛擬用戶賬號文件的安全性,應將文件權限設置爲600,以避免數據外泄

[root@localhost ~]# chmod 600 /etc/vsftpd/vu.*
[root@localhost ~]#  ll /etc/vsftpd/vu.*
-rw-------. 1 root root 12288 9月  13 02:38 /etc/vsftpd/vu.db
-rw-------. 1 root root    18 9月  13 02:37 /etc/vsftpd/vu.list

#添加虛擬用戶的映射賬號,創建ftp目錄,例如要將使用的ftp根目錄設置爲/var/ftproot,映射賬號的名稱爲vftp,可以執行以下操作

[root@localhost ~]#  useradd -d /var/ftproot -s /sbin/nologin vftp
[root@localhost ~]# chmod 755 /var/ftproot/
[root@localhost ~]#  ll -d /var/ftproot/
drwxr-xr-x. 3 vftp vftp 78 9月  13 02:39 /var/ftproot/

#爲虛擬用戶建立PAM認證

[root@localhost ~]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
[root@localhost ~]# vim /etc/pam.d/vsftpd

#將配置文件內容全部刪除,只留3行內容

#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vu
account required pam_userdb.so db=/etc/vsftpd/vu

#修改vsftpd配置文件,添加虛擬用戶支持

[root@localhost ~]# echo 'guest_enable=YES' >> /etc/vsftpd/vsftpd.conf
[root@localhost ~]# echo 'guest_username=vftp' >> /etc/vsftpd/vsftpd.conf

#爲不同的虛擬用戶建立獨立的配置文件

[root@localhost ~]# echo 'user_config_dir=/etc/vsftpd/vusers_dir' >> /etc/vsftpd//vsftpd.conf 
[root@localhost ~]# echo 'allow_writeable_chroot=YES' >> /etc/vsftpd/vsftpd.conf 

#有了這些配置之後,就可以在/etc/vsftpd/vusers_dir目錄中爲沒個虛擬用戶分別建立配置文件了

#設置tom用戶能夠上傳文件,創建目錄

[root@localhost ~]# mkdir /etc/vsftpd/vusers_dir
[root@localhost~]# ll /etc/vsftpd/
總用量 40
-rw-------. 1 root root   125 8月   3 2017 ftpusers
-rw-------. 1 root root   361 8月   3 2017 user_list
-rw-r--r--. 1 root root    27 9月  13 02:41 vsftpd.
-rw-------. 1 root root  5133 9月  13 02:42 vsftpd.conf
-rwxr--r--. 1 root root   338 8月   3 2017 vsftpd_conf_migrate.sh
-rw-------. 1 root root 12288 9月  13 02:38 vu.db
-rw-------. 1 root root    18 9月  13 02:37 vu.list
drwxr-xr-x. 2 root root     6 9月  13 02:42 vusers_dir
[root@ftp-server ~]# echo 'anon_upload_enable=YES' >> /etc/vsftpd/vusers_dir/tom
[root@ftp-server ~]# echo 'anon_mkdir_write_enable=YES' >> /etc/vsftpd/vusers_dir/tom 

#重啓服務

[root@localhost ~]# systemctl restart vsftpd
1

#客戶端驗證tom權限

[root@localhost ~]# lftp 192.168.118.128
lftp 192.168.118.128:~> login tom 123     #登錄到tom用戶

lftp [email protected]:/> mkdir aa      #創建文件aa成功
mkdir 成功, 建立 `aa'
lftp [email protected]:/> ls
drwx------    2 1001     1001            6 Sep 13 03:04 aa
lftp [email protected]:/> rm aa        #不能刪除文件aa,沒有刪除權限
rm: Access failed: 550 Permission denied. (aa)
lftp [email protected]:/> put /etc/inittab   #上傳文件inittab成功
491 bytes transferred
lftp [email protected]:/> ls
drwx------    2 1001     1001            6 Sep 13 03:04 aa
-rw-------    1 1001     1001          491 Sep 13 03:11 inittab
lftp [email protected]:/> get TeamViewer_Setup-13.1.3629.0.exe
20367104 bytes transferred          #下載文件成功

#設置jerry用戶的默認下載權限,創建jerry的空文件

[root@ftp-server ~]# touch /etc/vsftpd/vusers_dir/jerry
1

#客戶端驗證

[root@ftp-client ~]# lftp -u jerry,456 192.168.118.100                                 #登錄虛擬用戶jerry
lftp [email protected]:~> ls
-rw-r--r--    1 0        0        20367104 Aug 30 13:02 TeamViewer_Setup-13.1.3629.0.exe
drwx------    2 1001     1001            6 Sep 13 03:04 aa
-rw-------    1 1001     1001          491 Sep 13 03:11 inittab
lftp [email protected]:/> mkdir haha    #沒有創建文件的權限,創建失敗
mkdir: Access failed: 550 Permission denied. (haha)
lftp [email protected]:/> get TeamViewer_Setup-13.1.3629.0.exe
20367104 bytes transferred     #下載文件成功      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章