在linux上要跨越網際網路和不是連線到同一個實體ip的電腦互傳資料就要用ftp server,vsftpd是linux招牌的ftp server
1.終端機輸入sudo apt install vsftpd,安裝vsftpd
找到vsftpd.conf在哪個位置,終端機輸入sudo gedit /(vsftpd.conf所在位置)/vsftpd.conf,用記事本將它打開
在全部原本有的欄位前面加一個#把它mark掉,在下面打上自己想要的設定
connect_from_port_20=YES/NO 是否用port20來傳輸資料,YES設定為用port20來傳輸,NO設定為不用port20來傳輸
listen_port=(自訂port號) 若不用port20來傳輸資料,可自訂想要的port
listen=YES/NO 是否用stand alone模式啟動
use_localtime=YES/NO vsftpd預設的時間是經度0°的格林威治時間,use_localtime可以設定是否用本地時間
write_enable=YES/NO 是否可寫(針對所有類型使用者)
local_enable=YES/NO 是否讓local使用者登入
local_mask=(權限代碼) local使用者上傳的檔案要去掉的權限
connect_timeout=(秒數) 伺服器發出的連接訊號在多少秒內得不到client端的回應就強制斷線
data_connection_timeout=(秒數) 傳資料過程中因為線路問題導致多少秒內無法傳送就強制斷線
max_clients=(人數) 限制同時登入的client數
local_max_rate=(速率) 限制local使用者上傳的最大速率
chroot_local_user=YES/NO 是否要將local使用者活動範圍限制在各別的/home底下
anonymous_enable=YES/NO 是否讓anonymous使用者登入
anon_world_readable_only=YES/NO 是否限定anonymous使用者唯讀
anon_other_write_enable=YES/NO 是否讓anonymous使用者可寫
anon_mkdir_write_enable=YES/NO 是否讓anonymous使用者可建目錄
anon_upload_enable=YES/NO 是否讓anonymous使用者可上傳資料
no_anon_password=YES/NO 是否不問anonymous使用者的email,讓anonymous使用者直接進入
anon_max_rate=(kb/s) 限制anonymous使用者上傳的最大速率
anon_umask=(權限代碼) anonymous使用者上傳的檔案要去掉的權限
anon_root=(路徑) 指定anonymous使用者登入後可以看到的目錄
ascii_download_enable=YES/NO 是否規定client用 ASCII 格式下載檔案,與安全有關
ascii_upload_enable=YES/NO 是否規定client用 ASCII 格式上傳檔案,與安全有關
one_process_model=YES/NO 是否給每個連線一個process
tcp_wrappers=YES/NO 是否開啟TCP防火牆
xferlog_enable=YES/NO 是否紀錄上傳下載歷史
xferlog_file=(路徑/檔名) 指定上傳下載歷史要紀錄在哪個檔案
dual_log_enable=YES/NO 是否同時開啟syslog和xferlog紀錄
utf8_filesystem=YES/NO 是否啟用utf8編碼
※使用者有分local、guest、anonymous
local必須在伺服器電腦系統上有建一個使用者帳號,vsftpd才能用此帳號登入local,而登入的密碼即是此使用者在伺服器電腦上的使用者登入密碼,登入後可以看到在伺服器電腦上自己的/home目錄,但不能跑到其他使用者的/home,例如wilson和jsiruw在伺服器電腦上都有自己的系統使用者帳號,在伺服器電腦上就會有2個home,一個是/home/wilson,另一個是/home/jsiruw,wilson在電腦上的使用者密碼是875439974,jsiruw是133486257,那麼wilson要用密碼875439974登入ftp,可以存取的範圍是/home/wilson,jsiruw要用密碼133486257登入ftp,可以存取的範圍是/home/jsiruw
guest又稱虛擬帳號,要依附在local帳號,且設定與pam有關,很少在使用
anonymous是可以不須帳號密碼登入的,但其可活動的範圍是anon_root所指定的位置,其他位置都看不到
※要設定local使用者只要設定系統上的使用者就可以了
增加使用者的指令是sudo useradd (參數1) (設定1) (參數2) (設定2) ····· (使用者名稱)
刪除使用者的指令是sudo userdel -r (使用者名稱),有加-r會連該使用者的家目錄一起刪掉
設定已存在使用者的密碼的指令是sudo passwd (使用者名稱)
useradd指令的參數簡介
-G:指定這個新增加的user屬於哪些群組,用法為-G (群組1),(群組2),·····
-m:為新增的user建一個家目錄
-M:不建立新增的user的家目錄
-d:指定某個目錄為新user的家目錄,用法為-d /(目錄位置)
-p:設定新使用者的密碼,用法為-p (密碼)
例如我要建一個名為A的使用者,密碼為85749360,家目錄位置為/home/wiru/share,屬於群組wgegwe和rhwgef
指令為sudo useradd -p 85749360 -d /home/wiru/share -G wgegwe,rhwgef A
新增後就可以從遠端用A這個local user帳號登入,登入密碼是85749360,登入後會進到/home/wiru/share這個目錄
如果要為使用者建立裡面有下載、音樂、圖片等資料夾的家目錄,指令是sudo useradd -m -d /(要建家目錄的目錄位置)/(家目錄名稱) (使用者名稱)
如果要刪除這個使用者,用sudo userdel -r A
如果要讓自己以外的local user可以連線,一定要在vsftpd.conf加上pam_service_name=ftp這句
※linux權限代碼
可寫(writable):2
可讀(readable):4
可執行(executable):1
用三者相加的值來設定權限
只可寫=2
只可讀=4
只可執行=1
可寫+可讀+可執行=7
可寫+可讀=6
可讀+可執行=5
可寫+可執行=3
寫、讀、執行都不可=0
百位數設定擁有者權限,十位數設定群組權限,個位數設定其他使用者權限
例如741代表擁有者可寫、可讀、可執行,群組只可讀,其他使用者只可執行
※umask指的是要拿掉的權限,例如umask設成127代表要拿掉擁有者的執行權限,拿掉群組的寫權限,拿掉其他使用者的讀、寫、執行權限,和一般的權限設定是相反的
2.用sudo權限打開xferlog_file指定的路徑,在裡面建一個文字檔,檔名是xferlog_file設定的檔名,用來紀錄所有上傳下載資料的
因為新版的vsftpd規定anon_root所設定的路徑權限必須是不可寫的,不然伺服器無法運作
所以,先在anon_root所設定的路徑建一個資料夾
打開終端機,輸入sudo chmod o+w /(anon_root所設定的路徑)/(資料夾名稱),設定此資料夾的權限,讓anonymous使用者可以在此資料夾內存取
再輸入sudo chmod a-w /(anon_root所設定的路徑),將anon_root所設定的路徑權限設為不可寫
如果chroot_local_user設定為YES,local使用者的家目錄必須要是不可寫的,不然會無法登入,這也是新版的規定,但home不可寫會讓重要的IceLockAuthfile無法讀取,導致以後登入該使用者後沒多久就登出的bug
所以在vsftpd.conf加入一行allow_writeable_chroot=YES就可以了(是writeable沒錯,vsftpd的創造者筆誤)
3.到你的電信公司申請一組固定ip,如果是hinet到這裡申請
輸入hinet的帳號密碼
之後按照指示申請即可
4.設定方式有兩種,一種是將固定ip設定在路由器上,用NAT穿透到電腦,另一種是直接將固定ip設定在電腦上,建議直接設定在電腦上
終端機輸入sudo pppoeconf
點選〈是〉
輸入你的hinet帳號,後面加@ip.hinet.net,記得加ip
輸入你的hinet密碼
點選〈是〉
隨個人設定
點選〈是〉
點選〈是〉
點選〈確定〉
5.輸入sudo /etc/init.d/vsftpd start,啟動伺服器
輸入netstat -tulpn | grep :(port號),可以檢查有沒有正常運作
輸入ftp (固定ip),可以連上伺服器,可以檢查有沒有錯誤
輸入sudo /etc/init.d/vsftpd restart,可以重新啟動伺服器
6.client端是windows,在檔案總管上方路徑欄輸入ftp://(伺服器固定ip),就可以連線
client端是linux,在終端機輸入ftp (伺服器固定ip),就可以連線
另外也可以用一些軟體連線
記得幫點擊部落格首頁的廣告,每個各點一下喔,只要點一下就好,感激不盡