file system

account

$ sudo adduser --home /srv/share --shell /usr/sbin/nologin --disabled-password ftpuser
$ sudo passwd ftpuser
$ sudo chmod -R 2775 /ftp/release
$ sudo chown -R ftpuser:ftpuser /srv/share

apps

$ sudo apt install vsftpd nfs-kernel-server nginx samba

vsftpd

$ sudo cat /etc/vsftpd.conf
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
local_umask=022
user_sub_token=$USER
local_root=/srv/share
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
# user list
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO

$ sudo cat /etc/vsftpd.user_list
ftpuser

$ sudo systemctl restart vsftpd
$ sudo systemctl enable vsftpd

nfs

$ sudo cat /etc/exports
/srv/share 10.87.0.0/20(rw,sync,no_subtree_check,all_squash,anonuid=1001,anongid=1001)
/srv/share 10.110.148.0/22(rw,sync,no_subtree_check,all_squash,anonuid=1001,anongid=1001)
/srv/share 10.68.78.0/24(rw,sync,no_subtree_check,all_squash,anonuid=1001,anongid=1001)
/srv/share 10.69.176.0/24(rw,sync,no_subtree_check,all_squash,anonuid=1001,anongid=1001)

$ sudo exportfs -ra
$ sudo systemctl restart nfs-kernel-server.service
$ sudo systemctl enable nfs-kernel-server.service

nginx

$ sudo touch /etc/nginx/sites-available/ftp
$ sudo cat /etc/nginx/sites-available/ftp
server {
    listen 80;
    server_name _;

    location / {
        alias /ftp/release/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
}
$ sudo ln -s /etc/nginx/sites-available/ftp /etc/nginx/sites-enabled/
$ sudo unlink /etc/nginx/sites-enabled/default

$ sudo nginx -t
$ sudo systemctl reload nginx.service
$ sudo systemctl enable nginx.service
$ sudo systemctl restart nginx.service

samba

[!NOTE|label:login in windwows]

  • to avoid the automatic login with DOMAIN\user, you can use the following command:

\ftpuser
# login with simple user instead of domain user
$ sudo cat /etc/samba/smb.conf
[global]
   server role = standalone server
   workgroup = WORKGROUP
   server string = %h log server
   log file = /var/log/samba/log.%m
   max log size = 1000
   # disable guest
   map to guest = Never
   # for windows
   ntlm auth = yes

[ftp]
   path = /ftp
   read only = yes
   guest ok = yes
   valid users = ftpuser
   force user = ftpuser

[ftp_release]
   path = /ftp/release
   read only = no
   guest ok = no
   valid users = ftpuser
   force user = ftpuser

# create the password for samba user
$ sudo smbpasswd -a ftpuser

usage

ftp

# -- install --
# debian/ubuntu
$ sudo apt update && sudo apt install ftp lftp
# osx
$ brew install lftp inetutils

# -- connect --
$ ftp 10.110.151.175
Connected to 10.110.151.175.
220 (vsFTPd 3.0.5)
Name (10.110.151.175:marslo): ftpuser
331 Please specify the password.
Password:
230 Login successful.
ftp>

# -- upload/put --
$ echo -e "user ftpuser password\nput localfile.txt\nbye" | ftp -n 10.110.151.175
# -- upload multiple files --
$ echo -e "user ftpuser password\nprompt\nmput *.txt\nbye" | ftp -n 10.110.151.175

# -- download/get --
$ echo -e "user ftpuser password\nget remotefile.txt\nbye" | ftp -n 10.110.151.175
# -- download multiple files --
$ echo -e "user ftpuser password\nprompt\nmget *.txt\nbye" | ftp -n 10.110.151.175

# -- list files --
$ echo -e "user ftpuser password\nls\nbye" | ftp -n 10.110.151.175

# -- delete file --
$ echo -e "user ftpuser password\ndelete remotefile.txt\nbye" | ftp -n 10.110.151.175
# -- delete files with wildcard --
$ echo -e "user ftpuser password\nprompt\nmdelete *.log\nbye" | ftp -n 10.110.151.175

# -- download whole directory with lftp --
$ lftp -u ftpuser,password ftp://10.110.151.175 -e "mirror --verbose /remote/dir $HOME/local/dir; bye"

# -- upload whole directory with lftp --
$ lftp -u ftpuser,password ftp://10.110.151.175 -e "mirror -R $HOME/local/dir /remote/dir; bye"

Last updated

Was this helpful?