需求:外部人員需要對公司伺服器上某個文件夾內容進行讀寫操作 文件目錄信息:/opt/abc drwxr-xr-x 9 www www 4096 12月 4 13:02 abc #註意最初abc的www用戶組沒有寫許可權 為了後面的ftp用戶能夠對此文件具備寫操作,需要添加www用戶組的寫許可權: chm ...
需求:外部人員需要對公司伺服器上某個文件夾內容進行讀寫操作
文件目錄信息:/opt/abc
drwxr-xr-x 9 www www 4096 12月 4 13:02 abc #註意最初abc的www用戶組沒有寫許可權
為了後面的ftp用戶能夠對此文件具備寫操作,需要添加www用戶組的寫許可權:
chmod g+w /opt/abc -R
drwxrwxr-x 9 www www 4096 12月 4 13:02 abc
一、安裝vsftpd服務
確保selinux關閉以及防火牆關閉或開啟21埠
yum install vsftpd
systemctl start vsftpd
systemctl enable vsftpd
netstat -tanlp|grep vsftpd
二、配置vsftpd
修改配置前養成好習慣,先備份一下
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
這裡使用虛擬用戶訪問ftp伺服器
若基於Vsftpd系統用戶訪問FTP伺服器,系統用戶越多越不利於管理,而且不利於系統安全管理,鑒於此,為了能更加的安全使用VSFTPD,需使用Vsftpd虛擬用戶方式。
Vsftpd虛擬用戶原理:虛擬用戶就是沒有實際的真實系統用戶,而是通過映射到其中一個真實系統用戶(沒有密碼,也不具備登陸許可權)以及設置相應的許可權來實現訪問驗證,虛擬用戶不能登錄Linux系統,從而讓系統更加的安全可靠。
配置步驟如下:
1、安裝Vsftpd虛擬用戶需用到的軟體及認證模塊:
yum install pam* libdb-utils libdb* --skip-broken -y
2、創建虛擬用戶臨時用戶文件/etc/vsftpd/ftpusers.txt,新建虛擬用戶和密碼,其中ftp1為虛擬用戶名,123為密碼,如果有多個用戶,依如下格式填寫即可
ftp1
123
3、生成Vsftpd虛擬用戶資料庫認證文件,並設置許可權700:
db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftpd_login.db # 每次在/etc/vsftpd/ftpusers.txt添加了新的虛擬用戶後,需要再次執行此命令
解釋:(不一定准確)
db_load做資料庫生成;
-T 允許應用程式能夠將文本文件轉譯載入進資料庫。由於我們之後是將虛擬用戶的信息以文件方式存儲在文件里的,為了讓Vsftpd這個應用程式能夠通過文本來載入用戶數據,必須要使用這個選項。指定了選項-T,那麼一定要追加子選項-t;
-t 追加在在-T選項後,用來指定轉譯載入的資料庫類型;
hash就是使用hash碼加密
-f 參數後面接包含用戶名和密碼的文本文件,文件的內容是:奇數行用戶名、偶數行密碼。
chmod 700 /etc/vsftpd/vsftpd_login.db #將vsftpd_login.db隱藏,除root用戶外,其他用戶無法查詢到虛擬用戶信息
4、配置PAM認證文件,讓PAM採用相應的認證模塊和剛剛建立的用戶資料庫,/etc/pam.d/vsftpd行首加入如下兩行(最好是將其他行刪除):
auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login
5、所有Vsftpd虛擬用戶需要映射到一個系統用戶,該系統用戶不需要密碼,也不需要登錄,主要用於虛擬用戶映射使用,創建命令如下:
useradd -s /sbin/nologin ftpuser
6、完整vsftpd.conf配置文件代碼如下:
anonymous_enable=YES
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
userlist_enable=YES
tcp_wrappers=YES
# 以下配置為開啟虛擬用戶功能
pam_service_name=vsftpd # 虛擬用戶啟用pam認證;vsftpd是pam認證指定的文件
guest_enable=YES # 啟用虛擬用戶;
guest_username=ftpuser # 映射虛擬用戶至系統用戶ftpuser;
user_config_dir=/etc/vsftpd/vsftpd_user_conf # 設置虛擬用戶配置文件所在的目錄;
virtual_use_local_privs=YES # 虛擬用戶使用與本地用戶相同的許可權。
# 以下配置為鎖定虛擬用戶在自己的目錄,不能查看到其他目錄(如不配置,通過ftp工具可以查看到系統所有目錄雖然無寫許可權)
chroot_local_user=YES
allow_writeable_chroot=YES
7、為虛擬用戶ftp1創建配置專有的配置文件以及家目錄,如果有多個虛擬用戶同此操作
在/etc/vsftpd/vsftpd_user_conf下創建ftp1虛擬用戶的配置文件
mkdir -p /etc/vsftpd/vsftpd_user_conf/ftp1
內容如下:
ocal_root=/home/ftpuser/ftp1 # 虛擬用戶家目錄所在位置
write_enable=YES # 允許登陸用戶有寫許可權
anon_world_readable_only=YES # 允許匿名用戶下載,然後讀取文件
anon_upload_enable=YES # 允許匿名用戶上傳文件許可權,只有在write_enable=YES時該參數才生效;
anon_mkdir_write_enable=YES # 允許匿名用戶創建目錄,只有在write_enable=YES時該參數才生效;
anon_other_write_enable=YES # 允許匿名用戶其他許可權,例如刪除、重命名等。
8、創建虛擬用戶家目錄目錄:
mkdir -p /home/ftpuser/ftp1
chown -R ftpuser:ftpuser /home/ftpuser # 遞歸更改虛擬用戶主目錄以及家目錄的所有者和屬組,才能具備相應許可權。
chmod -R 777 /home/ftpuser # root帳號在ftp1下麵創建了多級目錄和文件後,需要授權,客戶端ftp1登錄了才能夠對其刪除和修改。
三、虛擬用戶訪問家目錄之外的目錄
以上操作,ftp1這個用戶已經可以訪問ftp伺服器,併在其家目錄中進行上傳下載添加刪除等操作,但用戶要訪問伺服器上其他目錄怎麼辦?操作如下:
第一反應是對需要訪問(abc文件)的目錄做一個軟連接,成功的失敗了 --_--,不是說不能做鏈接,只是做了後不能達到想要的效果。
最終通過革命先賢的智慧知道還可以將abc文件mount到ftp1家目錄下:
1、先到ftp1家目錄中創建abc文件夾,用戶掛載使用
mkdir -p /home/ftpuser/ftp1/abc
2、掛載目錄
mount --bind /opt/abc /home/ftpuser/ftp1/abc
3、如果以後需要解除掛載,執行如下命令把/home/ftpuser/ftp1/abc目錄的umount即可
umount /home/ftpuser/ftp1/abc
4、以上步驟僅僅是成功掛載了,虛擬用戶ftp1僅僅能對abc目錄中的文件進行下載操作,但無上傳、刪除等操作,需要如下操作
1)將ftpuser用戶加入到www用戶組,因為abc這個目錄屬於www用戶組
#查看當前ftpuser用戶信息
id ftpuser
uid=1005(ftpuser) gid=1005(ftpuser) 組=1005(ftpuser)
#不改變原來用戶信息下添加至www用戶組
usermod -a -G www ftpuser
#再次ftpuser用戶信息,ftpuser已經加入到了www用戶組中
id ftpuser
uid=1005(ftpuser) gid=1005(ftpuser) 組=1005(ftpuser),1004(www)
2)讓/opt/abc下所有文件所屬組具備寫許可權
chmod g+w /opt/abc -R
至此虛擬用戶ftp1已可對abc文件進行任何操作。
排錯思路:
1、查看SELinux、防火牆
2、查看vsftpd進程
3、查看vsftpd.conf主配置文件
4、查看虛擬用戶配置文件
5、查看資料庫,查看Pam模塊,新添加虛擬用戶後需要重新生成資料庫文件
6、查看home/ftpuser下虛擬用戶家目錄是否創建
7、修改配置後重啟vsftpd服務