FTP

FTP server on centos 7 ( VSFTP )

# yum install vsftpd* -y
# systemctl start vsftpd# systemctl enable vsftpd

# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.ORG
# vi /etc/vsftpd/vsftpd.conf 


anonymous_enable=NO          # disable  anonymous loginlocal_enable=YES     # permit local loginswrite_enable=YES       # enable FTP commands which change the filesystemlocal_umask=022     # value of umask for file creation for local usersdirmessage_enable=YES     # enable showing of messages when users first enter a new directoryxferlog_enable=YES     # a log file will be maintained detailing uploads and downloadsconnect_from_port_20=YES     # use port 20 (ftp-data) on the server machine for PORT style connectionsxferlog_std_format=YES       # keep standard log file formatlisten=NO       # prevent vsftpd from running in standalone modelisten_ipv6=YES     # vsftpd will listen on an IPv6 socket instead of an IPv4 onepam_service_name=vsftpd      # name of the PAM service vsftpd will useuserlist_enable=YES       # enable vsftpd to load a list of usernamestcp_wrappers=YES             # turn on tcp wrappers
#---Add Line--#userlist_enable=YES             # vsftpd will load a list of usernames, from the filename given by userlist_fileuserlist_file=/etc/vsftpd/user_list    # stores usernames.userlist_deny=NO 


*****Now add these two following options to restrict FTP users to their Home directories.chroot_local_user=YESallow_writeable_chroot=YES
*****Configure Different FTP User Home Directories
#allow_writeable_chroot=YES

Then add/modify the following options in the vsftpd config file with these values: user_sub_token=$USER                             # inserts the username in the local root directory local_root=/home/$USER/ftp                     # defines any users local root directory


# semanage boolean -m ftpd_full_access --on# systemctl restart vsftpd

# useradd -m -c “Pubali Bank, BNK” -s /bin/bash pubalibank# passwd pubalibank

# echo "pubalibank" | tee -a /etc/vsftpd/user_list# cat /etc/vsftpd/user_list



# mkdir /home/pubalibank/ftp# chown nobody:nobody /home/pubalibank/ftp# chmod a-w /home/pubalibank/ftp------------------# mkdir /home/pubalibank/ftp/files# chown pubalibank:pubalibank  /home/pubalibank/ftp/files# chmod 0700 /home/pubalibank/ftp/files/----# vi /etc/vsftpd/vsftpd.conf    config file with these values
user_sub_token=$USER         # inserts the username in the local root directory local_root=/home/$USER/ftp   # defines any users local root directory
# systemctl restart vsftpd

#################################################################
adduser pubalibankpasswd pubalibank
Add the new user to the userlist:
echo “pubalibank” | tee –a /etc/vsftpd/user_list
3. Create a directory for the new user, and adjust permissions:
 mkdir –p /home/pubalibank/ftp/upload chmod 550 /home/pubalibank/ftp chmod 750 /home/pubalibank/ftp/upload chown –R pubalibank: /home/pubalibank/ftp



Firewall
# firewall-cmd --zone=public --permanent --add-port=21/tcp
# firewall-cmd --zone=public --permanent --add-service=ftp# firewall-cmd --reload

Test Anonymous FTP Login

10. Let’s also test if a user not listed in the file /etc/vsftpd.userlist will be granted permission to login, which is not the case as in the screen shot below:

# ftp 192.168.56.10 Connected to 192.168.56.10  (192.168.56.10). 220 Welcome to TecMint.com FTP service. Name (192.168.56.10:root) : aaronkilik 530 Permission denied. Login failed. ftp>

FTP User Login Failed

11. Now do a final check if a user listed in the file /etc/vsftpd.userlist, is actually placed in his/her home directory after login:

# ftp 192.168.56.10 Connected to 192.168.56.10  (192.168.56.10). 220 Welcome to TecMint.com FTP service. Name (192.168.56.10:root) : ravi 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls

FTP User Login Successful[

Warning: Using allow_writeable_chroot=YES has certain security implications, especially if the users have upload permission, or shell access.

Only activate this option if you exactly know what you are doing. It’s important to note that these security implications arenot vsftpd specific, they apply to all FTP daemons which offer to put local users in chroot jails as well.

Therefore, we will look at a more secure way of setting a different non-writable local root directory in the next section.

Step 5: Configure Different FTP User Home Directories

12. Open the vsftpd configuration file again and start by commenting the unsecure option below:

#allow_writeable_chroot=YES

Then create the alternative local root directory for the user (ravi, yours is probably different) and remove write permissions to all users to this directory:

# mkdir /home/ravi/ftp # chown nobody:nobody /home/ravi/ftp # chmod a-w /home/ravi/ftp

13. Next, create a directory under the local root where the user will store his/her files:

# mkdir /home/ravi/ftp/files # chown ravi:ravi  /home/ravi/ftp/files # chmod 0700 /home/ravi/ftp/files/

Then add/modify the following options in the vsftpd config file with these values:

user_sub_token=$USER         # inserts the username in the local root directory  local_root=/home/$USER/ftp   # defines any users local root directory

Save the file and close it. Once again, let’s restart the service with the new settings:

# systemctl restart vsftpd

14. Now do a final test again and see that the users local root directory is the FTP directory we created in his home directory.

# ftp 192.168.56.10 Connected to 192.168.56.10  (192.168.56.10). 220 Welcome to TecMint.com FTP service. Name (192.168.56.10:root) : ravi 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls

FTP User Home Directory Login Successful

That’s it! In this article, we described how to install, configure as well as secure a FTP server in CentOS 7, use the comment section below to write back to us concerning this guide/share any useful information about this topic.

######################################################################

FTP server is used to exchange files between computers over network . This guide helps you to setup ftp server on centos 7 . This guide contains configuration steps for both FTP and SFTP as well as user creation . Here i’ve used VSFTP package which is secure and less vulnerable .

1. FTP Server

2. SFTP Server

3. User creation

Setup FTP server on centos 7

Step 1 » Update your repository and install VSFTPD package .

[root@krizna ~]# yum check-update

[root@krizna ~]# yum -y install vsftpd

Step 2 » After installation you can find /etc/vsftpd/vsftpd.conf file which is the main configuration file for VSFTP.

Take a backup copy before making changes .

[root@krizna ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.org

Now open the file and make changes as below

[root@krizna ~]# nano /etc/vsftpd/vsftpd.conf

Find this line anonymous_enable=YES ( Line no : 12 ) and change value to NO to disable anonymous FTP access.

anonymous_enable=NO

Uncomment the below line ( Line no : 100 ) to restrict users to their home directory.

chroot_local_user=YES

and add the below lines at the end of the file to enable passive mode and allow chroot writable.

allow_writeable_chroot=YES

pasv_enable=Yes

pasv_min_port=40000

pasv_max_port=40100

Step 3 » Now restart vsftpd service and make it start automatically after reboot.

[root@krizna ~]# systemctl restart vsftpd.service

[root@krizna ~]# systemctl enable vsftpd.service

Step 4 » Add FTP service in firewall to allow ftp ports .

[root@krizna ~]# firewall-cmd --permanent --add-service=ftp

[root@krizna ~]# firewall-cmd --reload

Step 5 » Setup SEinux to allow ftp access to the users home directories .

[root@krizna ~]# setsebool -P ftp_home_dir on

Step 6 » Now create an User for ftp access. Here /sbin/nologin shell is used to prevent shell access to the server .

[root@krizna ~]# useradd -m dave -s /sbin/nologin

[root@krizna ~]# passwd dave

Now user dave can able to login ftp on port 21 .

You can filezilla or winscp client for accessing files.

SFTP server

SFTP ( Secure File Transfer Protocol ) is used to encrypt connections between clients and the FTP server. It is highly recommended to use SFTP because data is transferred over encrypted connection using SSH-tunnel on port 22 .

Basically we need openssh-server package to enable SFTP .

Install openssh-server package, if its not already installed.

[root@krizna ~]# yum -y install openssh-server

Step 7 » Create a separate group for FTP access.

[root@krizna ~]# groupadd ftpaccess

Step 8 » Now open /etc/ssh/sshd_config file and make changes as below.

Find and comment the below line ( Line no : 147 ).

#Subsystem sftp /usr/libexec/openssh/sftp-server

and add these lines below.

Subsystem sftp internal-sftp

Match group ftpaccess

ChrootDirectory %h

X11Forwarding no

AllowTcpForwarding no

ForceCommand internal-sftp

Step 9 » Now restart sshd service.

[root@krizna ~]# systemctl restart sshd

Now your SFTP server is configured and ready .

User creation

Step 10 » Create user jack with /sbin/nologin shell and ftpaccess group

[root@krizna ~]# useradd -m jack -s /sbin/nologin -g ftpaccess

[root@krizna ~]# passwd jack

Now assign root ownership for the home directory for chroot access and modify permission.

[root@krizna ~]# chown root /home/jack

[root@krizna ~]# chmod 750 /home/jack

Create a directory www inside home directory for writing and modify ownership .

[root@krizna ~]# mkdir /home/jack/www

[root@krizna ~]# chown jack:ftpaccess /home/jack/www

Now jack can use both ftp and sftp services . He can upload files in www directory .

If you are going to use FTP and SFTP together in the same server, you should follow above steps while creating users . For existing users add them to ftpaccess and make below changes.

[root@krizna ~]# usermod dave -g ftpaccess

[root@krizna ~]# chown root /home/dave

[root@krizna ~]# chmod 750 /home/dave

[root@krizna ~]# mkdir /home/dave/www

[root@krizna ~]# chown dave:ftpaccess /home/dave/www

-----------------------

Installing ‘vsftpd’

Below is the command to install the ‘vsftpd’, we needed a root user to run the following command

# yum install vsftp ftp –y

Configuring ‘vsftpd’

We needed to edit the configuration file ‘vsftpd’ for securing the FTP server since, by default it will allow anonymous users to login and use the server.

# vi /etc/vsftpd/vsftpd.conf

We have to disallow anonymous, unidentified users to access files via FTP; change the anonymous_enable setting to NO:

anonymous_enable=NO

Allow local users to login by changing the local_enable setting to YES:

local_enable=YES

If you want to allow the local users to be able to write to a directory, then change the write_enable setting in the configuration file to YES:

write_enable=YES

Local users will be ‘chroot jailed’ and they will be denied access the local users to any other part of the server; change the chroot_local_user setting in the configuration file to YES:

chroot_local_user=YES

Below is the simple configuration file for your reference –

anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 chroot_local_user=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES #listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES Save the file with the command :wq .

Restarting  the vsftpd Service

We needed to restart the ‘vsftpd’ services so that the configuration changes has applied

# systemctl restart vsftpd

We will set the ‘vsftpd’ service to start at boot time, below is the command to enable the ‘vsftpd’ to start.

# systemctl enable vsftpd

Allowing the  ‘vsftpd’ Through the Firewall

We have to allow the default FTP port, port 21, through firewall.

# firewall-cmd --permanent --add-port=21/tcp

We needed to reload the firewall so that the firewall.

# firewall-cmd –reload

Create the FTP user’s

We will create FTP user other than local users and assign the home directory

For this tutorial, I will create a user without a home directory therefore I use –M instead of –m.

# useradd -M user1 –s /sbin/nologin # passwd user1

We will next set the home directory for “user1” by creating a new directory

# mkdir /var/www/mike # chmod 755 /var/www/mike

We have to provide access to the “user1” on FTP

# chown -R mike /var/www/user1  We can access the FTP server from the client on your favorite browser using the url ftp://192.168.100.108

-------------