It is quite easy to set up a simple ftp server or http server on your linux machine to server your simple task when you needed, mostly will be for file transferring. With python's module, pyftpdlib, SimpleHTTPServer or http.server, we can use just one command to start ftp service or http service.
Set Up Environmet
Â
root@ubuntu18-test1:~# uname -a
Linux ubuntu18-test1 5.4.0-1029-gcp #31~18.04.1-Ubuntu SMP Thu Oct 22 09:43:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
apt install python
apt install python-pip
pip install pyftpdlib
apt install python3 // it might be already installed
apt install python3-pip
pip3 install pyftpdlib
For CentOS 8 with Python3:
yum install python3
pip3 install pyftpdlib
Here is CentOS8 installation outputs:
[root@centos8 ~]# yum install python3 Failed loading plugin "osmsplugin": No module named 'librepo' Last metadata expiration check: 1:33:01 ago on Wed 05 May 2021 05:23:38 PM GMT. Dependencies resolved. ========================================================================================================================================================================================================================================= Package Architecture Version Repository Size ========================================================================================================================================================================================================================================= Installing: python36 x86_64 3.6.8-2.module_el8.3.0+562+e162826a appstream 19 k Installing dependencies: python3-pip noarch 9.0.3-18.el8 appstream 20 k python3-setuptools noarch 39.2.0-6.el8 baseos 163 k Enabling module streams: python36 3.6 Transaction Summary ========================================================================================================================================================================================================================================= Install 3 Packages Total download size: 201 k Installed size: 466 k Is this ok [y/N]: y Downloading Packages: (1/3): python36-3.6.8-2.module_el8.3.0+562+e162826a.x86_64.rpm 346 kB/s | 19 kB 00:00 (2/3): python3-pip-9.0.3-18.el8.noarch.rpm 356 kB/s | 20 kB 00:00 (3/3): python3-setuptools-39.2.0-6.el8.noarch.rpm 1.5 MB/s | 163 kB 00:00 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Total 663 kB/s | 201 kB 00:00 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : python3-setuptools-39.2.0-6.el8.noarch 1/3 Installing : python36-3.6.8-2.module_el8.3.0+562+e162826a.x86_64 2/3 Running scriptlet: python36-3.6.8-2.module_el8.3.0+562+e162826a.x86_64 2/3 Installing : python3-pip-9.0.3-18.el8.noarch 3/3 Running scriptlet: python3-pip-9.0.3-18.el8.noarch 3/3 Verifying : python3-pip-9.0.3-18.el8.noarch 1/3 Verifying : python36-3.6.8-2.module_el8.3.0+562+e162826a.x86_64 2/3 Verifying : python3-setuptools-39.2.0-6.el8.noarch 3/3 Installed: python3-pip-9.0.3-18.el8.noarch python3-setuptools-39.2.0-6.el8.noarch python36-3.6.8-2.module_el8.3.0+562+e162826a.x86_64 Complete! [root@centos8 ~]# yum install python3-pip Failed loading plugin "osmsplugin": No module named 'librepo' Last metadata expiration check: 1:37:54 ago on Wed 05 May 2021 05:23:38 PM GMT. Package python3-pip-9.0.3-18.el8.noarch is already installed. Dependencies resolved. Nothing to do. Complete! [root@centos8 ~]# pip3 install pyftpdlib WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead. Collecting pyftpdlib Downloading https://files.pythonhosted.org/packages/31/61/63ef60aca6de07eba1639d9d47f3f8e29462e8bb49d6a8dce9aeff240646/pyftpdlib-1.5.6.tar.gz (188kB) 100% |████████████████████████████████| 194kB 4.4MB/s Installing collected packages: pyftpdlib Running setup.py install for pyftpdlib ... done Successfully installed pyftpdlib-1.5.6 [root@centos8 ~]# python3 -m pyftpdlib /bin/python3: No module named pyftpd [root@centos8 ~]# python3 -m pyftpdlib [I 2021-05-05 19:03:11] concurrency model: async [I 2021-05-05 19:03:11] masquerade (NAT) address: None [I 2021-05-05 19:03:11] passive ports: None [I 2021-05-05 19:03:11] >>> starting FTP server on 0.0.0.0:2121, pid=104383 <<<
Start FTP Service
Please move your location into the directory you want to ftp, since this command will turn the directory into the root directory, and providing anonymous access. The default port is 2121
python -m pyftpdlib
You can use ftp:// <server ip>:2121  to access your ftp server through in your browser or test it from command line as show below:root@ubuntu18-test1:~# ftp localhost 2121
Connected to localhost.
220 pyftpdlib 1.5.6 ready.
Name (localhost:jon_netsec): anonymous
331 Username ok, send password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 Active data connection established.
125 Data connection already open. Transfer starting.
-rw------- 1 root root 75 Jan 02 17:42 .bash_history
-rw-r--r-- 1 root root 3106 Apr 09 2018 .bashrc
drwx------ 3 root root 4096 Apr 23 01:36 .cache
-rw-r--r-- 1 root root 148 Aug 17 2015 .profile
drwx------ 2 root root 4096 Dec 12 20:10 .ssh
drwxr-xr-x 3 root root 4096 Jan 02 17:36 snap
226 Transfer complete.
ftp> q
?Ambiguous command
ftp> quit
221 Goodbye.
If you need to use a username and password
python -m pyftpdlib -u ftpuser1 -P password1234
-u is the specified user nameÂ
-P is the specified password (the P is uppercase).Â
The meaning of this sentence is: the user name is ftpuser1, and the password is password1234
Put FTP into Background to Run
root@ubuntu18-test1:~#screen -S s1 python -m pyftpdlib -u ftpuser1 -P password1234
root@ubuntu18-test1:~# screen -ls
There is a screen on:
30309.pts-0.ubuntu18-test1 (04/23/21 01:37:08) (Detached)
1 Socket in /run/screen/S-root.
root@ubuntu18-test1:~#
Ornohup python -m pyftpdlib -u ftpuser1 -P password1234 &
After running the command in the background, if you want to delete the process and close ftp, you can execute the command:
root@ubuntu18-test1:~# screen -s s1 python -m pyftpdlib
[I 2021-04-23 01:38:16] concurrency model: async
[I 2021-04-23 01:38:16] masquerade (NAT) address: None
[I 2021-04-23 01:38:16] passive ports: None
[I 2021-04-23 01:38:16] >>> starting FTP server on 0.0.0.0:2121, pid=30345 <<<
[I 2021-04-23 01:38:39] 127.0.0.1:53676-[] FTP session opened (connect)
[I 2021-04-23 01:38:44] 127.0.0.1:53676-[anonymous] USER 'anonymous' logged in.
[I 2021-04-23 01:41:27] 127.0.0.1:53676-[anonymous] FTP session closed (disconnect).
CTRL+A+D to save session into background
"screen -r" will bring session back in front. Ctrl +C to stop the service.Or
ps aux|grep pyftpdlib|awk'{print $2}'|xargs kill -9| grep pyftpdlib | awk '{print $2}' | xargs kill - 9
Start FTP Service After Booted
/etc/rc.local
echo "nohup python -m pyftpdlib -u ftpuser1 -p password1234 &" >> /etc/rc.local
Other Parameters
In addition to the above, there are some optional parameters:
- p designated port (default is 2121)
- w Write permission (default is read-only)
- d Specify the directory (default is the current directory)
From a Windows machine, type ftp command then start to open connection to remote server's ftp port 2121:
C:\Users\test>ftp ftp> open 140.238.158.173 2121 Connected to 140.238.158.173. 220 pyftpdlib 1.5.6 ready. 530 Log in with USER and PASS first. User (140.238.158.173:(none)): anonymous 331 Username ok, send password. Password: 230 Login successful. ftp> quit 221 Goodbye. C:\Users\qyan>
 Or from online ftp client :
HTTP Service
Ubuntu with python2:
python -m SimpleHTTPServer 80
Put it into background to run:
nohup python -m SimpleHTTPServer 80 &
 To stop nohup's session, using fg command then ctrl+c:
[root@centos8 ~]# fg nohup python3 -m http.server
Of course, starting an http server can be made even more convenient by an alias in your .bashrc (or the equivalent for your OS/shell).Â
which lets you start a server on port 8000 for the current directory with:
http 8000
Â
CentOS with python3:
[root@centos8 ~]# screen -S s1 python3 -m http.server Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ... 16.3.96.23 - - [05/May/2021 19:32:53] "GET / HTTP/1.1" 200 -
Â
One Command for Both FTP and HTTP services
[root@centos8 ~]# nohup python3 -m http.server > http.out & nohup python3 -m pyftpdlib > ftp.out &
[1] 6170
[2] 6171
[root@centos8 ~]# nohup: ignoring input and redirecting stderr to stdout
nohup: ignoring input and redirecting stderr to stdout
[root@centos8 ~]#
[root@centos8 ~]# fg
nohup python3 -m pyftpdlib > ftp.out
^C[root@centos8 ~]# fg
nohup python3 -m http.server > http.out
^C
Â
Firewall Operation
For Ubuntu:Â
If it is using ufw, check status of ufw using command ufw status, then disable or add related ports:
ufw disable
ufw allow 2121/tcp
ufw allow 8000/tcp
 If it is using iptables, using following command to accept all inbound traffics:
iptables -F
These changes can be saved in a file with the command iptables-save
 for IPv4.
Debian/Ubuntu: iptables-save > /etc/iptables/rules.v4 RHEL/CentOS: iptables-save > /etc/sysconfig/iptables
For CentOS :
In CentOS, you might want to use firewall-cmd for firewalld to modify firewalls rules or you can disable it completely.
Disable firewall:
[root@centos8 ~]# firewall-cmd --state running [root@centos8 ~]# systemctl stop firewalld [root@centos8 ~]#
[root@centos8 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@centos8 ~]# firewall-cmd --zone=public --permanent --add-port 8000/tcp
success
[root@centos8 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@centos8 ~]# firewall-cmd --reload
success
[root@centos8 ~]# firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client ssh
ports: 8000/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@centos8 ~]# firewall-cmd --zone=public --permanent --remove-port 8000/tcp
success
[root@centos8 ~]#
No comments:
Post a Comment