linux 安裝 vsftpd 服務以及配置全攻略,vsftpd 虛擬多用戶多目錄配置,為每個用戶配置不同的使用權限

linux 安裝 vsftpd 服務以及配置全攻略,vsftpd 虛擬多用戶多目錄配置,為每個用戶配置不同的使用權限。

在這里插入圖片描述

linux 安裝 vsftpd 服務以及配置全攻略

FTP 是 File Transfer Protocol 的簡稱,用于 Internet 上的控制文件的雙向傳輸。同時,他也是一個應用程序,基于不同的操作系統有不同的 FTP 應用程序,而所有這些應用程序都遵守同一協議傳輸文件。在 FTP 的使用當中,用戶經常遇到兩個概念:上傳和下載,下載文件就是從遠程主機拷貝文件到自己的計算機上,上傳文件是指將自己計算機中的文件拷貝至遠程主機上。FTP 常用于開發階段文件上傳工具,常用的客戶端軟件有 filezilla、flashfxp、winscp、xftp 等

服務端安裝
服務端最常用的軟件就是 vsftpd,其安裝方式也很簡單,如下:

yum install vsftpd -y # CentOS
apt-get install vsftpd -y # Ubuntu

啟動與停止命令如下:

systemctl start vsftpd.service # 啟動
systemctl stop vsftpd.service # 停止
systemctl restart vsftpd.service # 重啟

或者:

service vsftpd start # 啟動
service vsftpd stop # 停止
service vsftpd restart # 重啟

配置
配置文件說明
vsftpd 的默認基礎配置文件位于 /etc/vsftpd/vsftpd.conf,這個文件是 vsftpd 的核心配置文件,操作修改之前最好先備份,配置文件內容的基礎說明:

# 是否允許匿名登錄 FTP 服務器,默認設置為 NO 表示允許
# 用戶可使用用戶名 ftp 或 anonymous 進行 ftp 登錄,口令為用戶的 E-mail 地址。
# 如在內網使用不需要登錄可設置為 YES
anonymous_enable=NO
# 是否允許本地用戶(即 linux 系統中的用戶帳號)登錄 FTP 服務器,默認設置為 YES 允許
# 本地用戶登錄后會進入用戶主目錄,而匿名用戶登錄后進入匿名用戶的下載目錄 /var/ftp/pub
# 若只允許匿名用戶訪問,前面加上#注釋掉即可阻止本地用戶訪問 FTP 服務器
local_enable=YES
# 是否允許本地用戶對 FTP 服務器文件具有寫權限,默認設置為 YES 允許
write_enable=YES 
# 掩碼,本地用戶默認掩碼為 077
# 你可以設置本地用戶的文件掩碼為缺省 022,也可根據個人喜好將其設置為其他值
local_umask=022
# 是否允許匿名用戶上傳文件,須將全局的 write_enable=YES 默認為 NO
#anon_upload_enable=YES
# 是否允許匿名用戶創建新文件夾
#anon_mkdir_write_enable=YES 
# 是否激活目錄歡迎信息功能
# 當用戶用 CMD 模式首次訪問服務器上某個目錄時,FTP 服務器將顯示歡迎信息
# 默認情況下,歡迎信息是通過該目錄下的 .message 文件獲得的
# 此文件保存自定義的歡迎信息,由用戶自己建立
dirmessage_enable=YES
# 是否讓系統自動維護上傳和下載的日志文件
# 默認情況該日志文件為 /var/log/vsftpd.log 也可以通過下面的 xferlog_fil e選項對其進行設定
xferlog_enable=YES
# 是否設定 FTP 服務器將啟用 FTP 數據端口的連接請求
# ftp-data 數據傳輸,21 為連接控制端口
connect_from_port_20=YES
# 設定是否允許改變上傳文件的屬主,與下面一個設定項配合使用
# 注意,不推薦使用 root 用戶上傳文件
#chown_uploads=YES
# 設置想要改變的上傳文件的屬主,如果需要,則輸入一個系統用戶名
# 可以把上傳的文件都改成 root 屬主。whoever:任何人
#chown_username=whoever
# 設定系統維護記錄 FTP 服務器上傳和下載情況的日志文件
# /var/log/vsftpd.log 是默認的,也可以修改為其它
#xferlog_file=/var/log/vsftpd.log
# 是否以標準 xferlog 的格式書寫傳輸日志文件
# 默認為 /var/log/xferlog,也可以通過 xferlog_file 選項對其進行設定
# 默認值為 YES
xferlog_std_format=YES
# 設置數據傳輸中斷間隔時間,此語句表示空閑的用戶會話中斷時間為 600 秒
# 即當數據傳輸結束后,用戶連接 FTP 服務器的時間不應超過 600 秒。可以根據實際情況對該值進行修改
#idle_session_timeout=600
# 設置數據連接超時時間,該語句表示數據連接超時時間為 120 秒,可根據實際情況對其個修改
#data_connection_timeout=120
# 運行 vsftpd 需要的非特權系統用戶,缺省是 nobody
#nopriv_user=ftpsecure
# 是否識別異步 ABOR 請求。
# 如果 FTP client 會下達 “async ABOR” 這個指令時,這個設定才需要啟用
# 而一般此設定并不安全,所以通常將其注釋
#async_abor_enable=YES
# 是否以 ASCII 方式傳輸數據。默認情況下,服務器會忽略 ASCII 方式的請求。
# 啟用此選項將允許服務器以 ASCII 方式傳輸數據
# 不過,這樣可能會導致由 "SIZE /big/file" 方式引起的 DoS 攻擊
#ascii_upload_enable=YES
#ascii_download_enable=YES
# 登錄 FTP 服務器時顯示的歡迎信息
# 如有需要,可在更改目錄歡迎信息的目錄下創建名為 .message 的文件,并寫入歡迎信息保存后
#ftpd_banner=Welcome to blah FTP service.
# 黑名單設置。可以阻止某些特殊的 email address 鏈接
#deny_email_enable=YES
# 當上面的 deny_email_enable=YES 時,可以利用這個設定項來規定哪些郵件地址不可登錄 vsftpd 服務器
# 此文件需用戶自己創建,通常情況下為一行一個 email address
#banned_email_file=/etc/vsftpd/banned_emails
# 用戶登錄 FTP 服務器后是否具有訪問自己目錄以外的其他文件的權限
# 設置為 YES 時,用戶被鎖定在自己的 home 目錄中,vsftpd 將在下面 chroot_list_file 選項值的位置尋找 chroot_list 文件
# 必須與下面的設置項配合
#chroot_list_enable=YES
# 被列入此文件的用戶,在登錄后將不能切換到自己目錄以外的其他目錄
# 從而有利于 FTP 服務器的安全管理和隱私保護。此文件需自己建立
#chroot_list_file=/etc/vsftpd/chroot_list
# 是否允許遞歸查詢。默認為關閉,以防止遠程用戶造成過量的 I/O
#ls_recurse_enable=YES
# 是否允許監聽。
# 如果設置為 YES,則 vsftpd 將以獨立模式運行,由 vsftpd 自己監聽和處理 IPv4 端口的連接請求
listen=NO
# 設定是否支持 IPV6
listen_ipv6=YES
# 設置 PAM 外掛模塊提供的認證服務所使用的配置文件名,即 /etc/pam.d/vsftpd 文件
# 此文件 中file=/etc/vsftpd/ftpusers 字段,說明了 PAM 模塊能抵擋的帳號內容來自文件 /etc/vsftpd/ftpusers 中
pam_service_name=vsftpd
# 是否允許 ftpusers 文件中的用戶登錄 FTP 服務器,默認為 YES
# 若此項設為 YES,則 user_list 文件中的用戶允許登錄 FTP 服務器
# 而如果同時設置了userlist_deny=YES,則 user_list 文件中的用戶將不允許登錄 FTP 服務器,甚至連輸入密碼提示信息都沒有
userlist_enable=YES

/etc/vsftpd/ftpusers 這個文件是禁止使用 vsftpd 的用戶列表文件。記錄不允許訪問 FTP 服務器的用戶名單,一般把一些對系統安全有威脅的用戶賬號記錄在此文件中,以免用戶從 FTP 登錄后獲得大于上傳下載操作的權利,而對系統造成損壞。其默認值為:

在這里插入圖片描述

/etc/vsftpd/user_list 文件是允許或禁止使用 vsftpd 的用戶列表文件。這個文件中指定的用戶缺省情況(即在 /etc/vsftpd/vsftpd.conf 中設置 userlist_deny=YES)下也不能訪問 FTP 服務器,在設置了 userlist_deny=NO 時,僅允許 user_list 中指定的用戶訪問 FTP 服務器。

用戶訪問模式
vsftpd 服務訪問模式有三種,分別是:匿名用戶、系統用戶和虛擬用戶

匿名用戶模式
匿名模式即 FTP 服務器建立一個公開賬戶 (一般為 anonymous),并賦予該賬戶訪問公共目錄的權限(默認為 /var/ftp/pub),該模式適合只在內網使用或公開文件的場景使用。默認情況下,匿名用戶只有查看權限,無法創建、刪除、修改。如果想要允許匿名用戶能夠上傳、下載、刪除文件,需在 /etc/vsftpd/vsftpd.conf 配置文件中修改:

anon_upload_enable=YES      # 允許匿名用戶上傳文件;
anon_mkdir_write_enable=YES # 允許匿名用戶創建目錄;
anon_other_write_enable=YES # 允許匿名用戶其他寫入權限。

vsftpd 默認的匿名用戶有兩個:anonymous 與 ftp ,所以如果需要使用匿名用戶上傳、刪除文件需要 anonymous 用戶對 /var/ftp/pub 目錄有寫入權限:

chown -R ftp /var/ftp/pub/

系統用戶模式
如果在非內網情況下,匿名模式可以讓任何人使用 ftp 服務,比較公開,多適用于共享文件。如果只想要部分特定用戶使用,就需要使用系統用戶登錄訪問,這種模式我們需要創建不同的用戶:

groupadd www # 創建用戶組
useradd -g www www -s /sbin/nologin # 創建用戶

參數說明:

groupadd 創建對應的用戶組,參數 www 即創建的組名
useradd 創建用戶
-g www 指定用戶組,www 即為指定的用戶組名
www 指定本次創建的用戶名
-s /sbin/nologin 禁止用戶通過 ssh 登錄系統

然后需要修改配置文件(/etc/vsftpd/vsftpd.conf):

anonymous_enable=NO   # 禁止匿名用戶登錄
chown_uploads=NO      # 設定禁止上傳文件更改宿主
nopriv_user=ftptest   # 設定支撐 vsftpd 服務的宿主用戶為新建用戶
ascii_upload_enable=YES
ascii_download_enable=YES # 設定支持 ASCII 模式的上傳和下載功能。
userlist_enable=YES
userlist_deny=NO

然后修改 /etc/vsftpd/user_list 文件,將新建(或原有)的用戶添加到文件的最后一行,這種模式下,登錄 FTP 后訪問的就是 /home/www/,即為當前用戶的家目錄

虛擬用戶配置
系統用戶模式可以有效的控制訪問,但是隨著使用用戶增多,需要創建大量系統用戶,這對服務器系統的管理產生了巨大影響,甚至對服務器安全造成威脅。這時我們就可以使用虛擬用戶進行登錄,以方便管理。

虛擬用戶模式實際上沒有真實的系統用戶,其是通過映射到一個真實的用戶以及設置的權限來實現訪問驗證,虛擬用戶在 linux 中實際不存在,提升了系統的安全性。

修改配置文件 /etc/vsftpd/vsftpd.conf:

anonymous_enable=NO  # 設定不允許匿名訪問
local_enable=YES  # 設定本地用戶可以訪問。
write_enable=YES  # 設定可以進行寫操作。
local_umask=022  # 設定上傳后文件的權限掩碼。
anon_upload_enable=NO  # 禁止匿名用戶上傳。
anon_mkdir_write_enable=NO  # 禁止匿名用戶建立目錄。
dirmessage_enable=YES  # 設定開啟目錄標語功能。
xferlog_enable=YES  # 設定開啟日志記錄功能。
connect_from_port_20=YES # 設定端口 20 進行數據連接。(主動模式)
chown_uploads=NO  # 設定禁止上傳文件更改宿主。
xferlog_file=/var/log/xferlog
# 設定 vsftpd 的服務日志保存路徑。
xferlog_std_format=YES # 設定日志使用標準的記錄格式。
async_abor_enable=YES  #設定支持異步傳輸功能。
ascii_upload_enable=YES
ascii_download_enable=YES  #設定支持ASCII模式的上傳和下載功能。chroot_list_enable=NO #禁止用戶登出自己的 FTP 主目錄。
ls_recurse_enable=NO  #禁止用戶登陸 FTP 后使用 "ls -R" 的命令。
listen=YESuserlist_enable=YES  # 設定 userlist_file 中的用戶將不得使用 FTP
tcp_wrappers=YES  # 設定支持 TCP Wrappersguest_enable=YES  # 設定啟用虛擬用戶功能。
guest_username=www  # 指定虛擬用戶的宿主用戶,即 linux 中真實存在的用戶
virtual_use_local_privs=YES  # 設定虛擬用戶的權限符合他們的宿主用戶。
pam_service_name=vsftpd  # 設定 PAM 服務下 vsftpd 的驗證配置文件名。因此,PAM 驗證將參考 /etc/pam.d/ 下的 vsftpd 文件配置。
user_config_dir=/etc/vsftpd/virtualconf  # 設定虛擬用戶個人 vsftp 的配置文件存放路徑。也就是說,這個被指定的目錄里,將存放每個 vsftp 虛擬用戶個性的配置文件,一個需要注意的地方就是這些配置文件名必須和虛擬用戶名相同。

隨后需要創建對應的虛擬用戶配置文件夾

mkdir -p /etc/vsftpd/virtualconf

制作虛擬用戶數據庫文件 vim /etc/vsftpd/virtusers,這個文件的文件名以及路徑是可以自定義的,用于儲存虛擬用戶用戶名與密碼的文件,在文件中寫入如下內容:

user1
123456
user2
123456

該文件格式為:一行用戶名對應一行密碼

隨后生成虛擬用戶數據文件:

db_load hash /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

設置 PAM 驗證文件,并指定上一步創建的虛擬用戶數據庫文件,vsftp 的 PAM 驗證配置文件路徑為 /etc/pam.d/vsftpd ,編輯該文件,并在文件末尾新增如下內容:

#%PAM-1.0
auth    sufficient      /lib/security/pam_userdb.so     db=/etc/vsftpd/virtusers
account sufficient      /lib/security/pam_userdb.so     db=/etc/vsftpd/virtusers

如當前系統是 64 位的,則需要使用如下內容:

#%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

其中 /etc/vsftpd/virtusers 為第二步生成的虛擬用戶數據庫文件。

修改虛擬用戶配置文件,將虛擬用戶配置文件存入 /etc/vsftpd/virtualconf/ 目錄,文件名為虛擬用戶名,例如虛擬用戶為 user1,則對應的文件名為 /etc/vsftpd/virtualconf/user1,對應配置項與主配置項基本相同,該配置文件未指定的內容則由主配置文件決定,對應配置項如下:

local_root=/www/server/blog # 指定虛擬用戶的具體主路徑。
write_enable=YES # 設定允許寫操作。
anon_upload_enable=NO # 設定不允許匿名用戶上傳。
anon_mkdir_write_enable=NO # 設定不允許匿名用戶建立目錄。
idle_session_timeout=600 # 設定空閑連接超時時間。
data_connection_timeout=120 # 設定單次連續傳輸最大時間。
max_clients=10 # 設定并發客戶端訪問個數。
max_per_ip=5 # 設定單個客戶端的最大線程數,這個配置主要來照顧 Flashget、迅雷等多線程下載軟件。
local_max_rate=50000 # 設定該用戶的最大傳輸速率,單位 b/s。

重啟 vsftpd 即可使用虛擬用戶連接:

service vsftpd restart # 重啟

4.增加虛擬賬號
ftp默認使用所有系統賬號,在較多情況下我們希望添加ftp的賬號但不添加系統賬號,這便是ftp虛擬賬號

4.1修改配置文件啟用虛擬賬號功能

啟用虛擬賬號功能,修改配置文件/etc/vsftpd/vsftpd.conf,在其末尾追加:

guest_enable=YES   #啟用虛擬賬號功能
guest_username=ftp #虛擬賬號在系統的宿主用戶,vsftpd安裝時已自動創建
user_config_dir=/etc/vsftpd/vuser_conf #虛擬賬號配置文件要存放在的目錄

4.2安裝db_load命令所在包

yum install -y db4-utils

4.3創建虛擬用戶

創建/etc/vsftpd/vuser_passwd.txt文件,在其中輸入用戶名密碼奇數行是用戶名,用戶名下一行為該用戶的密碼(文件名其實隨便,用來生成vuser_passwd.db而已)

cat > /etc/vsftpd/vuser_passwd.txt << EOF
test
abcd1234
EOF

生成用戶認證使用的db文件(除了后輟為.db文件名其實隨便,/etc/pam.d/vsftpd中指定的認證文件與此相同即可)

db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db

編緝/etc/pam.d/vsftpd,在最前邊插入以下兩行(注意是在最前邊插入,也不要注釋原來的配置;注釋原來的配置追加只有虛擬賬號可登錄系統賬號不可登錄;不注釋原來的配置追加只有系統用戶可登錄虛擬用戶不可登錄)

auth sufficient pam_userdb.so db=/etc/vsftpd/vuser_passwd
account sufficient pam_userdb.so db=/etc/vsftpd/vuser_passwd

創建虛擬用戶配置文件(在前邊我們已指定配置文件目錄為/etc/vsftpd/vuser_conf,用戶為test)

mkdir /etc/vsftpd/vuser_conf/
mkdir /tmp/test
cat > /etc/vsftpd/vuser_conf/test <<EOF
local_root=/tmp/test
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF

重啟vsftpd生效

service vsftpd restart

vsftpd 虛擬多用戶多目錄配置

vsftpd 如果需要在同一站點上利用多個用戶來區分多個主目錄,并將其限制在相應的目錄權限內,需要用到虛擬用戶來進行配置。以下是我在 ubuntu 16.04 上面的實踐經驗總結。

需求分析
假設在我的服務器上,有一個主文件夾 www,下面分別有兩個文件夾 model 和 lib,我希望利用不同的用戶登錄,讓其訪問不同的文件夾,同時每個用戶不能切換到上級目錄。同時處于安全考慮還要求該賬號上傳的文件權限為 644,即上傳的文件具有可讀可寫權限,但是沒有可執行權限。

另外,為了服務器的安全,還要求該用戶不能是系統用戶,即使用 vsftpd 的虛擬用戶。

根據以上需求,我們需要進行一下配置。

vsftpd 安裝
vsftpd 的安裝:

sudo apt-get -y install vsftpd

安裝完成后,vsftpd 初始化時使用的配置文件就是 /etc/vsftpd.conf 文件。

在 ubuntu下 要啟動、停止、重啟vsftpd,我們必須使用以下命令:

sudo service vsftpd stop
sudo service vsftpd start
sudo service vsftpd restart

同時,為了后續的虛擬用戶,我們還需要安裝加密工具:

sudo apt-get -y install db-util

vsftpd 配置
為了能夠使用虛擬用戶,我們首先需要創建虛擬用戶,以下的操作的一些路徑和文件名可以根據自己的習慣進行更改,當然,最好保持一致,防止出錯。

創建本地用戶
首先需要創建一個本地用戶,作為虛擬用戶的宿主,也同時方便組權限對于 ftp 站點的管理。

sudo useradd -m /srv/ftpadmin -s /bin/false

我們將其主目錄放到 /srv/ftpadmin 中,使用 /bin/false 作為默認 bash,同時也不設置密碼,這樣這個用戶是登錄不了的,僅僅作為一種象征和宿主存在。

現在我們把數據目錄的權限給這個用戶。

sudo chown -R ftpadmin:ftpadmin /www

創建虛擬用戶
創建一個 user.txt

sudo mkdir /etc/vsftpd
cd /etc/vsftpd
sudo vim user.txt

在 user.txt 中添加兩個用戶的信息,假設一個用戶為 ftplib,密碼為 pdlib,另一個用戶為 ftpmodel,密碼為 pdmodel,則 user.txt 形如下面:

ftplib
pdlib
ftpmodel
pdmodel

更多用戶以此類推。然后使用 db_util 加密工具進行加密。

sudo db_load -T -t hash -f /etc/vsftpd/user.txt /etc/vsftpd/user.db

加密后得到的文件為 /etc/vsftpd/user.db。最好再改一下這個文件的權限:

sudo chmod 600 /etc/vsftpd/user.db

PAM 驗證配置
我們需要配置一個新的 PAM 用于虛擬用戶的驗證。

sudo vim /etc/pam.d/vsftpd.vu

在這個新文件中寫入如下信息:

auth required pam_userdb.so db=/etc/vsftpd/user
account required pam_userdb.so db=/etc/vsftpd/user

如果你上面沒改名字,用的也是 user.db,那么這地方就不用改,如果不是 user.db,這地方需要改成你相應的。

vsftp 服務器配置
根據上面的情況,你已經有了兩個虛擬用戶了,下面是配置 ftp 服務器了,也是重點,先上我的配置:

grep -vE "^#|^$" /etc/vsftpd.conf
listen=NO               # 很奇怪是不是,我的是NO,網上大部分都是YES。因為我用的是公司的ftp統一配置,所以不能單獨開啟獨立的守護進程,大家根據自己的需要來判斷。
listen_ipv6=YES         # ipv6,根據實際需求了
anonymous_enable=NO     # 是否允許匿名登錄,我不需要
local_enable=YES        # 設定本地用戶可以訪問。注意:主要是為虛擬宿主用戶,如果該項目設定為NO那么所有虛擬用戶將無法訪問。
write_enable=YES        # 設定可以進行寫操作,也就是上傳
local_umask=022         # 設定用戶創建文件的默認權限,它與chmod的效果剛好相反,umask設置的是權限“補碼”,022表示默認上傳的文件權限是755
dirmessage_enable=YES   # 設定開啟目錄標語功能。
use_localtime=YES       # 時間設置
xferlog_enable=YES      # 設定開啟日志記錄功能。
connect_from_port_20=YES            # 默認
xferlog_file=/var/log/vsftpd.log    # 日志文件
xferlog_std_format=YES              # 日志記錄格式
ftpd_banner=Hello.                  # 標語,沒啥用
chroot_local_user=YES               # 重要,后面說明
chroot_list_enable=NO               # 同上
#chroot_list_file=/etc/vsftpd.chroot_list   # 同上
allow_writeable_chroot=YES                  # 同上
secure_chroot_dir=/var/run/vsftpd/empty     # 默認
pam_service_name=ftp                        # 默認,后面覆蓋了
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem              # 默認
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key     # 默認
ssl_enable=NO                       # 默認
utf8_filesystem=YES                 # uft8格式
guest_enable=YES                    # 必須打開,為了虛擬用戶登錄
pam_service_name=vsftpd.vu          # 覆蓋默認的pam文件,驗證虛擬用戶
user_config_dir=/etc/vsftpd/user_conf       # 用戶配置的目錄

上面的配置注釋的很清楚了,還有一些需要說明:

首先是 chroot_*,這幾個參數主要是為了設置 ftp 登錄之后可以訪問的目錄。還記得我們的需求里面有一個就是限制用戶只能夠訪問自己的主目錄吧,這幾個參數就能滿足我們的要求,具體配置的方法如下:

chroot_local_user:是否將所有用戶限制在主目錄,YES 為啟用 NO 禁用(該項默認值是 NO,即在安裝 vsftpd 后不做配置的話,ftp 用戶是可以向上切換到要目錄之外的)。
chroot_list_enable:是否啟動限制用戶的名單 YES 為啟用 NO 禁用(包括注釋掉也為禁用)。
chroot_list_file=/etc/vsftpd/chroot_list:是否限制在主目錄下的用戶名單,至于是限制名單還是排除名單,這取決于 chroot_local_user 的值。

chroot_local_user=YES	chroot_local_user=NO
chroot_list_enable=YES	YY	YN
chroot_list_enable=NO	NY	NN

具體解釋如下:

YY:所有用戶都被限制在其主目錄下,使用chroot_list_file指定的用戶列表,這些用戶作為“例外”,不受限制。
YN:所有用戶都不被限制其主目錄下,使用chroot_list_file指定的用戶列表,這些用戶作為“例外”,受到限制。
NY:所有用戶都被限制在其主目錄下,不使用chroot_list_file指定的用戶列表,沒有任何“例外”用戶。
NN:所有用戶都不被限制其主目錄下,不使用chroot_list_file指定的用戶列表,沒有任何“例外”用戶。
然后就是虛擬用戶的自定義配置了。

用戶配置
在上面的 ftp 服務器配置中,有一個是用戶配置的目錄:user_config_dir=/etc/vsftpd/user_conf,我們在這個目錄中設置每個用戶自己的配置信息。

首先創建用戶名的配置文件:

sudo touch /etc/vsftpd/user_conf/ftplib
sudo touch /etc/vsftpd/user_conf/ftpmodel

在 ftplib 中添加內容:

guest_username=ftplib
virtual_use_local_privs=YES
anon_umask=133
local_root=/www/lib

首先設置用戶名,然后是配置虛擬用戶的權限和本地用戶一樣,同時設置虛擬用戶的 umask 掩碼為 133,也就是去除可執行權限,然后是虛擬用戶的主目錄。ftpmodel 同樣類似這種配置,不再貼出了。

啟用 ftp 站點

sudo service vsftpd start 
#或者 
sudo service vsftpd restart

讓配置生效。


gdbmtool命令安裝

gdbmtool是一個用于管理和維護GNU dbm數據庫的小工具,它通常包含在許多Linux發行版的默認軟件包中,比如Ubuntu的libdbi-devgdbm-dev,或者是CentOS的gdbm-devel。如果你還沒有安裝,你可以按照以下步驟來進行:

  1. 對于基于Debian的系統(如Ubuntu):

    • 打開終端并運行:
      sudo apt-get update
      sudo apt-get install libdbi-dev gdbm-dev
      
      完成后,gdbmtool應該就在PATH中了。
  2. 對于基于RPM的系統(如CentOS):

    • 使用yumdnf
      sudo yum install gdbm-devel
      
      或者
      sudo dnf install gdbm-devel
      
  3. 檢查安裝: 安裝完成后,你可以通過輸入 gdbmtool --version 來確認是否成功安裝。

如果系統中沒有找到該命令,可能是沒有安裝相應的依賴,或者命令名拼寫有誤。如果沒有預裝,你需要從源碼編譯安裝,但這超出了常規操作范圍。

相關問題

我想要在CentOS7中使用gdbmtool命令 該怎么下載,我需要詳細步驟

在 CentOS 7 中,gdbmtools 是一個用于 gdbm 數據庫管理的小工具包,它通常已經包含在系統中,如果你的系統版本足夠新并且包含了數據庫支持,那么你可能可以直接使用它而無需額外安裝。

以下是確認是否已安裝以及如何使用的簡單步驟:

  1. 確認安裝: 打開終端,輸入以下命令檢查 gdbmtools 是否已預裝:

    which gdbmtools
    

    如果返回路徑,則表示已經存在;如果顯示 "command not found",則說明需要安裝。

  2. 安裝gdbm-dev (如果未安裝): 如果 gdbmtools 沒有找到,你需要安裝 gdbm 開發文件。打開終端并運行:

    sudo yum install gdbm-devel
    

    或者對于使用 dnf 包管理器的系統:

    sudo dnf install gdbm-devel
    

    完成安裝后再次嘗試 which gdbmtools

  3. 安裝gdbm-tools (如果必要): 如果你還想安裝 gdbm-tools 特定的工具包,可以執行:

    sudo yum install gdbm-tools
    

    或者 dnf:

    sudo dnf install gdbm-tools
    
  4. 測試安裝: 安裝完成后,你可以創建一個新的 gdbm 數據庫文件,并使用 gdbmtool 命令操作它,例如:

    gdbmtool create my_database
    gdbmtool add my_database key value
    gdbmtool list my_database
    

請確保你在執行以上步驟前已經使用 sudo 或者切換到 root 用戶,因為有些操作可能需要管理員權限。

如何yum安裝gdbmtool

在CentOS或RHEL等基于yum的Linux發行版上,你可以通過以下步驟來安裝gdbmtool(如果它是一個可用的包):

  1. 打開終端:按下Ctrl+Alt+T或者搜索"終端"應用程序。

  2. 更新軟件源列表:輸入并運行命令

    sudo yum update -y
    

    如果系統提示需要更新,先進行更新。

  3. 安裝gdbm工具:使用yum命令添加epel-release(額外功能軟件包)倉庫,因為有些非官方軟件不在默認源里,然后安裝gdbm-tools

    sudo yum install epel-release -y
    sudo yum install gdbm-tools -y
    

    -y選項表示默認接受所有安裝請求,無需交互確認。

  4. 驗證安裝:安裝完成后,可以運行 gdbmtools 來檢查是否成功安裝,并查看幫助文檔獲取更多信息:

    gdbmtools --help
    

注意:如果找不到gdbmtool這個包,可能是包名有誤或者是該工具不是來自官方yum源。在這種情況下,你可能需要檢查其確切名稱,或者嘗試查找是否有替代的包或從源碼編譯安裝。


完整的 vsftpd.conf 配置文件內容:

# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
# When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_full_access
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/xferlog
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode. The vsftpd.conf(5) man page explains
# the behaviour when these options are disabled.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
#chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=NO
#
# This directive enables listening on IPv6 sockets. By default, listening
# on the IPv6 "any" address (::) will accept connections from both IPv6
# and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6
# sockets. If you want that (perhaps because you want to listen on specific
# addresses) then you must run two copies of vsftpd with two configuration
# files.
# Make sure, that one of the listen options is commented !!
listen_ipv6=YESpam_service_name=vsftpd
userlist_enable=YESguest_enable=YES
pam_service_name=vsftpd.vu
user_config_dir=/etc/vsftpd/user_conf

用戶配置
在上面的 ftp 服務器配置中,有一個是用戶配置的目錄:

user_config_dir=/etc/vsftpd/user_conf

我們在這個目錄中設置每個用戶自己的配置信息。

首先創建用戶名的配置文件:

 sudo touch /etc/vsftpd/user_conf/ftplib
sudo touch /etc/vsftpd/user_conf/ftpmodel

在 ftplib 中添加內容:

local_root=/datavirtual_use_local_privs=YESanon_umask=133write_enable=yesanon_world_readable_only=noanon_upload_enable=yesanon_mkdir_write_enable=yesanon_other_write_enable=yes

說明:

local_root=/home/data/ftp/jin #設置登錄后禁錮的目錄

write_enable=yes #開放寫權限

anon_world_readable_only=no #開放下載權限

anon_upload_enable=yes #開放上傳權限

anon_mkdir_write_enable=yes #開放創建目錄的權限

anon_other_write_enable=yes #開放刪除和重命名的權限

因為pam_userdb使用的數據庫由bdb換成了gdbm,需要更換格式。
安裝gdbm,使用以下命令創建數據庫,增加用戶:

gdbmtool -n /etc/vsftpd/virtusers.pag opengdbmtool -n /etc/vsftpd/virtusers.pag opengdbmtool /etc/vsftpd/virtusers.pag store ${FtpUserName} ${FtpUserPass}

如何在mac上實現遠程掛載方案 | osxfuse & sshfs

一、安裝國內的homebrew(mac下的軟件包下載和管理工具)鏡像

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

ps : 為何要裝國內的鏡像, 一句話 : “近水樓臺先得資源,會快很多”

二、安裝遠程掛載工具
arduino 代碼解讀// 安裝依賴工具fuse

brew install osxfuse

// 安裝遠程同步工具sshfs

brew install sshfs

ps : 安裝這兩個的時候遇到三個問題:
1、osxfuse包找不到, 指令改成 : brew cask install osxfuse 即可
2、brew install sshfs時提示xcode-select-install, 執行該指令后又提示buse版本不兼容,進入死循環…
解決方案 : 直接用git上的pkg包來安裝:
2.1 訪問osxfuse的mac下載地址 https://osxfuse.github.io/ , 選擇最新的下載安裝一下
2.2 訪問sshfs的pkg可直接安裝包, sshfs-2.5.0.pkg

三、一鍵配置同步路徑
bash 代碼解讀//新建掛載目錄

mkdir -p ~/webdata

// 掛載測試環境

echo {服務器密碼} | sshfs -C -o reconnect,password_stdin {遠程服務器用戶名}@{遠程服務器地址}:{需要同步的目錄路徑} /Users/{自己mac機器的名字}/webdata

//查看是否配置成功,如果同步的指令寫入成功即可

cat ~/.bash_profile

//讓寫入的配置生效

source ~/.zshrc

ps :
1、寫入配置失敗,解決方案 “重啟電腦,再來一遍就完事了”
2、如果沒有安裝zsh, 配置卸載~/.bashrc, 執行為 source ~/.zshrc

四、拓展知識,osxfuse及sshfs簡介

osxfuse Mac版是一款專業且實用的系統優化軟件,軟件通過可選的MacFUSE兼容層支持舊版MacFUSE文件系統。感興趣的朋友快來下載使用吧
FUSE for macOS(原為OSXFUSE) 使您可以通過第三方文件系統擴展OS X的本機文件處理功能。 它是MacFUSE的后繼產品。作為用戶,如果選擇安裝MacFUSE兼容層,則安裝FUSE for macOS軟件包將允許您使用在FUSE for macOS或MacFUSE之上編寫的任何第三方文件系統。 作為開發人員,您可以使用FUSE for macOS SDK將多種類型的文件系統編寫為常規用戶空間程序。 這些文件系統的內容可以來自任何地方:本地磁盤,整個網絡,內存或任何其他來源的組合。
SSHFS(SSH Filesystem 是一種通過普通ssh連接來掛載和與遠程服務器或工作站上的目錄和文件交互的文件系統客戶端。


系統中 FTP 刪除關聯記錄的賬號密碼

Windows 刪除:

1、在文件資源管理器左側,右擊網絡名稱,選擇刪除。

2、win +r 打開運行命令對話框,輸入:regedit

3、點擊確定,打開文件注冊表,定位到 HKEY_CURRENT_USER\SOFTWARE\Microsoft\FTP\Accounts,刪除掉下面相應的項就可以了

4、定位到 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\,刪除掉下面相應的項就可以了。

一般Windows注冊表只需要刪除上面 2 項就可以,如果其他版本Windows沒有清楚,直接在 上面的注冊表界面 搜索 IP 信息進行刪除。

5、控制面板-》網絡和Internet 》Internet選項

6、內容〉設置》刪除自動完成歷史記錄,勾選表單數據與密碼-》刪除,刪除完成即可。

macOS刪除:

1、打開 finder,點擊“前往”》“連接服務器”;

2、在列表中選擇 某個 連接,然后 點擊“-” 進行刪除。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62672.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62672.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62672.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL語句在MySQL中如何執行

MySQL的基礎架構 首先就是客戶端&#xff0c;其次Server服務層&#xff0c;大多數MySQL的核心服務都在這一層&#xff0c;包括連接、分析、優化、緩存以及所有的內置函數&#xff08;時間、日期、加密函數&#xff09;&#xff0c;所有跨存儲引擎功能都在這一層實現&#xff1…

ragflow連不上ollama的解決方案

由于前期wsl默認裝在C盤&#xff0c;后期部署好RagFlow后C盤爆紅&#xff0c;在連接ollama的時候一直在轉圈圈&#xff0c;問其他人沒有遇到這種情況&#xff0c;猜測是因為內存不足無法加載模型導致&#xff0c;今天重新在E盤安裝wsl 使用wsl裝Ubuntu Win11 wsl-安裝教程 如…

力扣-漢明距離

1.兩個整數之間的 漢明距離 指的是這兩個數字對應二進制位不同的位置的數目。 給你兩個整數 x 和 y&#xff0c;計算并返回它們之間的漢明距離。 看到這題&#xff0c;當然想到了按位異或^,并且c內置了計算二進制數中1數量的函數__builtin_popcount() class Solution { publ…

關于成功插入 SQLite 但沒有數據的問題

背景 技術棧&#xff1a;SpringBoot Mybatis-flex SQLite 項目中集成了SQLite&#xff0c;配置如下&#xff1a; spring:datasource:url: jdbc:sqlite::resource:db/project.dbdriver-class-name: org.sqlite.JDBC在進行測試時&#xff0c;使用Mybatis-flex往表中插入數據&…

C#常見錯誤—空對象錯誤

System.NullReferenceException&#xff1a;未將對象引用設置到對象的實例 在C#編程中&#xff0c;System.NullReferenceException是一個常見的運行時異常&#xff0c;其錯誤信息“未將對象引用設置到對象的實例”意味著代碼試圖訪問一個未被初始化或已被設置為null的對象的成…

沁恒CH32V208藍牙串口透傳例程:修改透傳的串口;UART-CH32V208-APP代碼分析;APP-CH32V208-UART代碼分析

從事嵌入式單片機的工作算是符合我個人興趣愛好的,當面對一個新的芯片我即想把芯片盡快搞懂完成項目賺錢,也想著能夠把自己遇到的坑和注意事項記錄下來,即方便自己后面查閱也可以分享給大家,這是一種沖動,但是這個或許并不是原廠希望的,盡管這樣有可能會犧牲一些時間也有哪天原…

Scala的隱式對象

Scala中&#xff0c;隱式對象&#xff08;implicit object&#xff09;是一種特殊的對象&#xff0c;它可以使得其成員&#xff08;如方法和值&#xff09;在特定的上下文中自動可用&#xff0c;而無需顯式地傳遞它們。隱式對象通常與隱式參數和隱式轉換一起使用&#xff0c;以…

矩陣的乘(包括乘方)和除

矩陣的乘分為兩種&#xff1a; 一種是高等代數中對矩陣的乘的定義&#xff1a;可以去這里看看包含矩陣的乘。總的來說&#xff0c;若矩陣 A s ? n A_{s*n} As?n?列數和矩陣 B n ? t B_{n*t} Bn?t?的行數相等&#xff0c;則 A A A和 B B B可相乘&#xff0c;得到一個矩陣 …

DVWA親測sql注入漏洞

LOW等級 我們先輸入1 我們加上一個單引號&#xff0c;頁面報錯 我們看一下源代碼&#xff1a; <?php if( isset( $_REQUEST[ Submit ] ) ) { // Get input $id $_REQUEST[ id ]; // Check database $query "SELECT first_name, last_name FROM users WHERE user_id …

C++,提供函數接口,函數如何做到接收外部變量隨時結束

在C中&#xff0c;如果你想要創建一個函數&#xff0c;該函數可以接收外部變量并在變量改變時作出響應&#xff0c;你可以使用回調函數或者將變量包裝在可以觀察其變化的設計模式中&#xff0c;例如觀察者模式。 以下是一個使用標準庫中的std::function和std::bind來創建響應外…

機器學習01-發展歷史

機器學習01-發展歷史 文章目錄 機器學習01-發展歷史1-傳統機器學習的發展進展1. 初始階段&#xff1a;統計學習和模式識別2. 集成方法和核方法的興起3. 特征工程和模型優化4. 大規模數據和分布式計算5. 自動化機器學習和特征選擇總結 2-隱馬爾科夫鏈為什么不能解決較長上下文問…

想了解操作系統,有什么書籍推薦?

推薦一本操作系統經典書&#xff1a; 操作系統導論 《操作系統導論》虛擬化(virtualization)、并發(concurrency)和持久性(persistence)。這是我們要學習的3個關鍵概念。通過學習這3個概念&#xff0c;我們將理解操作系統是如何工作的&#xff0c;包括它如何決定接下來哪個程序…

[Collection與數據結構] 位圖與布隆過濾器

&#x1f338;個人主頁:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;?熱門專欄: &#x1f9ca; Java基本語法(97平均質量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection與…

【大數據學習 | 面經】Spark的shuffle hash join的具體細節

1. 前言 shuffle hash join是Spark中一種常見的連接策略&#xff0c;尤其適用于兩個數據集都比較大且無法通過廣播來優化的情況。其核心思想是通過對連接鍵進行哈希分區&#xff0c;使得相同鍵值的數據被分配到相同的分區中&#xff0c;從而可以在每個分區獨立的執行連接操作。…

設計模式從入門到精通之(一)工廠模式

工廠模式&#xff1a;為每個工廠找到"生意經" 在現實生活中&#xff0c;我們隨處可見"工廠"的影子&#xff0c;比如汽車工廠生產汽車&#xff0c;食品工廠生產食品。但你有沒有想過&#xff0c;為什么我們需要工廠&#xff1f;如果沒有工廠&#xff0c;我們…

談談你對vue這種框架理解

發現寶藏 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。【寶藏入口】。 Vue.js 是一個漸進式的前端 JavaScript 框架&#xff0c;旨在通過提供易于理解、上手簡單且功能強大的工具來構建現代化的 Web …

使用html2canvas實現前端截圖

一、主要功能 網頁截圖&#xff1a;html2canvas通過讀取DOM結構和元素的CSS樣式&#xff0c;在客戶端生成圖像&#xff0c;不依賴于服務端的渲染。它可以將指定的DOM元素渲染為畫布&#xff08;canvas&#xff09;&#xff0c;并生成圖像。多種輸出格式&#xff1a;生成的圖像…

微信小程序橫屏頁面跳轉后,自定義navbar樣式跑了?

文章目錄 問題原因&#xff1a;解決方案&#xff1a; 今天剛遇到的問題&#xff0c;橫屏的頁面完成操作后跳轉頁面后&#xff0c;自定義的tabbar樣式亂了&#xff0c;跑到最頂了&#xff0c;真機調試后發現navbar跑到手機狀態欄了&#xff0c;它正常應該跟右邊膠囊一行。 知道問…

Vivado ILA數據導出MATLAB分析

目錄 ILA數據導出 分析方式一 分析方式二 有時候在系統調試時&#xff0c;數據在VIVADO窗口獲取的信息有限&#xff0c;可結合MATLAB對已捕獲的數據進行分析處理 ILA數據導出 選擇信號&#xff0c;單擊右鍵后&#xff0c;會有export ILA DATA選項&#xff0c;將其保存成CS…

《探索形象克隆:科技與未來的奇妙融合》

目錄 一、什么是形象克隆 二、形象克隆的技術原理 三、形象克隆的發展現狀 四、形象克隆的未來趨勢 五、形象克隆的應用場景 六、形象克隆簡單代碼案例 Python 實現數字人形象克隆 Scratch 實現角色克隆效果&#xff08;以貓為例&#xff09; JavaScript 實現 Scratc…