{"id":12972,"date":"2018-02-07T10:12:51","date_gmt":"2018-02-07T10:12:51","guid":{"rendered":"https:\/\/www.process.st\/templates\/linux-ftp-server-setup-checklist\/"},"modified":"2024-02-28T20:46:00","modified_gmt":"2024-02-28T20:46:00","slug":"linux-ftp-server-setup-checklist","status":"publish","type":"post","link":"https:\/\/www.process.st\/templates\/linux-ftp-server-setup-checklist\/","title":{"rendered":"Linux FTP Server Setup Checklist"},"content":{"rendered":"<section id=\"introduction\">\n<h2>Introduction:<\/h2>\n<div class=\"image-content\">\n<figure><a href=\"https:\/\/www.process.st\/templates\/wp-content\/uploads\/2024\/02\/mH0HE7DS8vCwqvJJs-tIcQ.png\" target=\"_blank\" rel=\"noopener\"> <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.process.st\/templates\/wp-content\/uploads\/2024\/02\/mH0HE7DS8vCwqvJJs-tIcQ.png\" \/> <\/a><\/figure>\n<\/div>\n<div class=\"text-content\">\n<p>An <a href=\"https:\/\/en.wikipedia.org\/wiki\/File_Transfer_Protocol\" target=\"_blank\" rel=\"nofollow noopener\">FTP server<\/a> allows connected users to download, upload, and navigate the directories of files stored on the server.<\/p>\n<p>After this server setup is complete, you will be able to access the FTP server via terminal, or by using its credentials in an FTP client like <a href=\"https:\/\/filezilla-project.org\/\" target=\"_blank\" rel=\"nofollow noopener\">FileZilla<\/a> or <a href=\"https:\/\/cyberduck.io\/\" target=\"_blank\" rel=\"nofollow noopener\">Cyberduck<\/a>.<\/p>\n<p>We'll use <a href=\"https:\/\/security.appspot.com\/vsftpd.html\" target=\"_blank\" rel=\"nofollow noopener\">vsftpd<\/a> as well as the native <a href=\"https:\/\/www.computerhope.com\/issues\/ch001246.htm\" target=\"_blank\" rel=\"nofollow noopener\">ftp command<\/a> to set up a server, make it locally accessible, add a new user, and control permissions for future users.<\/p>\n<\/div>\n<\/section>\n<section id=\"note-down-server-ip\">\n<h2>Note down server IP<\/h2>\n<div class=\"text-content\">\n<p>It's vital to know your server IP so you can establish an SSH connection, and then test your access to the FTP server once it's up and running.<\/p>\n<p>Use the form field below to record your server IP, and we'll auto-fill it in later commands.<\/p>\n<\/div>\n<div class=\"text-field-content form-field-content\">\n<div class=\"form-group\"><label> Server IP <\/label><br \/>\n<input class=\"form-control\" disabled=\"disabled\" type=\"text\" placeholder=\"Something will be typed here...\" \/><\/div>\n<\/div>\n<div class=\"text-field-content form-field-content\">\n<div class=\"form-group\"><label> Server root username <\/label><br \/>\n<input class=\"form-control\" disabled=\"disabled\" type=\"text\" placeholder=\"Something will be typed here...\" \/><\/div>\n<\/div>\n<\/section>\n<section id=\"establish-ssh-connection\">\n<h2>Establish SSH connection<\/h2>\n<div class=\"text-content\">\n<p>Gain control of the server by opening terminal and starting an SSH connection:<\/p>\n<pre>ssh {{form.Server_root_username}}@{{form.Server_IP}}<\/pre>\n<\/div>\n<div class=\"image-content\">\n<figure><a href=\"https:\/\/www.process.st\/templates\/wp-content\/uploads\/2024\/02\/hT2XxLGksRnWa7ZrdeNIOQ.png\" target=\"_blank\" rel=\"noopener\"> <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.process.st\/templates\/wp-content\/uploads\/2024\/02\/hT2XxLGksRnWa7ZrdeNIOQ.png\" \/> <\/a><\/figure>\n<\/div>\n<\/section>\n<section id=\"install-vsftpd\">\n<h2>Install vsftpd<\/h2>\n<div class=\"text-content\">\n<p>Open terminal, and type:<\/p>\n<pre>sudo apt-get install vsftpd<\/pre>\n<\/div>\n<div class=\"image-content\">\n<figure><a href=\"https:\/\/www.process.st\/templates\/wp-content\/uploads\/2024\/02\/hRZL0nb_BOvwDi4WgyBDEQ.png\" target=\"_blank\" rel=\"noopener\"> <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.process.st\/templates\/wp-content\/uploads\/2024\/02\/hRZL0nb_BOvwDi4WgyBDEQ.png\" \/> <\/a><\/figure>\n<\/div>\n<\/section>\n<section id=\"edit-the-vsftpd-configuration-file\">\n<h2>Edit the vsftpd configuration file<\/h2>\n<div class=\"text-content\">\n<p>The configuration file is stored in \/etc \u2014 to edit the file, type:<\/p>\n<pre>$ sudo nano \/etc\/vsftpd.conf<\/pre>\n<p>Replace the contents with the text below:<\/p>\n<pre># Standalone mode\nlisten=YES\nmax_clients=200\nmax_per_ip=4\n# Access rights\nanonymous_enable=YES\nlocal_enable=NO\nwrite_enable=YES\nanon_upload_enable=YES\nanon_mkdir_write_enable=NO\nanon_other_write_enable=NO\n# Security\nanon_world_readable_only=NO\nconnect_from_port_20=YES\nhide_ids=YES\npasv_min_port=50000\npasv_max_port=60000\n# Features\nxferlog_enable=YES\nls_recurse_enable=NO\nascii_download_enable=NO\nasync_abor_enable=YES\n# Performance\none_process_model=YES\nidle_session_timeout=120\ndata_connection_timeout=300\naccept_timeout=60\nconnect_timeout=60\nanon_max_rate=50000\nanon_mkdir_write_enable=NO\nanon_other_write_enable=NO<\/pre>\n<p>Press CTRL+O and hit enter, then CTRL+X to save and quit the text editor.<\/p>\n<\/div>\n<\/section>\n<section id=\"test-the-connection-with-root\">\n<h2>Test the connection with root<\/h2>\n<div class=\"text-content\">\n<p>Open a new terminal window locally, and don't connect to the server over SSH.<\/p>\n<p>Input:<\/p>\n<pre>ftp {{form.Server_IP}}<\/pre>\n<p>You'll be asked for your username at the next prompt.<\/p>\n<pre>Connected to 192.168.1.9.\n220 (vsFTPd 3.0.3)\nName (192.168.1.9:benjamin): <span style=\"background-color: #fce8a7;\">{{form.Server_root_username}}<\/span>\n331 Please specify the password.\nPassword: \n230 Login successful.<\/pre>\n<p>Seeing the Login successful confirmation, you can now navigate around the FTP sever using cd and ls.<\/p>\n<p>Other FTP commands include:<\/p>\n<ul>\n<li>get [filename]: downloads a file<\/li>\n<li>put [\/path\/to\/file]: uploads a file<\/li>\n<li>status: show current status<\/li>\n<li>bye: terminate session<\/li>\n<\/ul>\n<p>See the full list <a href=\"https:\/\/www.serv-u.com\/features\/file-transfer-protocol-server-linux\/commands\" target=\"_blank\" rel=\"nofollow noopener\">here<\/a>.<\/p>\n<\/div>\n<\/section>\n<section id=\"make-a-new-user-for-ftp\">\n<h2>Make a new user for FTP<\/h2>\n<div class=\"text-content\">\n<p>Part of setting up the server is giving access to the necessary users. To guide you through this step, we'll set up a new user and configure permissions.<\/p>\n<\/div>\n<div class=\"text-field-content form-field-content\">\n<div class=\"form-group\"><label> New username <\/label><br \/>\n<input class=\"form-control\" disabled=\"disabled\" type=\"text\" placeholder=\"Something will be typed here...\" \/><\/div>\n<\/div>\n<div class=\"text-content\">\n<p>After inputting the new user's username above, follow these steps:<\/p>\n<pre>$ useradd {{form.New_username}}\n$ passwd {{form.New_username}}<\/pre>\n<p>Now you have a new user you can control permissions for.<\/p>\n<p>For now, this user doesn't have a home directory, which will cause vsftp to throw an error.<\/p>\n<p>Before logging in as the new user, make a home directory for them.<\/p>\n<pre>$ cd ..\n$ mkdir {{form.New_username}}<\/pre>\n<\/div>\n<\/section>\n<section id=\"create-a-user-list\">\n<h2>Create a user list<\/h2>\n<div class=\"text-content\">\n<p>Create a new userlist file in \/etc and open it with nano by entering the following:<\/p>\n<pre>$ sudo nano etc\/vsftpd.allowed_users<\/pre>\n<p>This file should simply be a list of the users allowed access to the FTP. In your case, it'd be:<\/p>\n<pre>{{form.Server_root_username}}\n{{form.New_username}}<\/pre>\n<\/div>\n<\/section>\n<section id=\"add-user-list-to-ftp-config-file\">\n<h2>Add user list to FTP config file<\/h2>\n<div class=\"text-content\">\n<p>Now comes the part where you change the FTP configuration to only allow users with their usernames specified in vsftpd.allowed_users.<\/p>\n<p>Open the vsftpd config file:<\/p>\n<pre>$ sudo nano \/etc\/vsftpd.conf<\/pre>\n<p>Add this block to the bottom:<\/p>\n<pre>#Userlist\n\nuserlist_deny=NO\nuserlist_enable=YES\nuserlist_file=\/etc\/vsftpd.allowed_users<\/pre>\n<p>Press CTRL+O and hit enter, then CTRL+X to save and quit the text editor.<\/p>\n<\/div>\n<\/section>\n<section id=\"test-the-connection-with-new-user\">\n<h2>Test the connection with new user<\/h2>\n<div class=\"text-content\">\n<p>Open a new terminal window.<\/p>\n<p>Type:<\/p>\n<pre>ftp {{form.Server_IP}}<\/pre>\n<p>When prompted, input the new username: {{form.New_username}} and the password.<\/p>\n<p>Success!<\/p>\n<\/div>\n<div class=\"image-content\">\n<figure><a href=\"https:\/\/www.process.st\/templates\/wp-content\/uploads\/2024\/02\/hOA3y7UZWObZBSrSPhVGdg.png\" target=\"_blank\" rel=\"noopener\"> <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.process.st\/templates\/wp-content\/uploads\/2024\/02\/hOA3y7UZWObZBSrSPhVGdg.png\" \/> <\/a><\/figure>\n<\/div>\n<div class=\"text-content\">\n<p>Now, whenever you need to provide access to the FTP server to a new user, just edit the user list with:<\/p>\n<pre>$ sudo nano etc\/vsftpd.allowed_users<\/pre>\n<p>And add the user's username on a new line.<\/p>\n<\/div>\n<\/section>\n<section id=\"sources\">\n<h2>Sources:<\/h2>\n<div class=\"text-content\">\n<ul>\n<li><a href=\"https:\/\/security.appspot.com\/vsftpd.html\" target=\"_blank\" rel=\"nofollow noopener\">vsftpd<\/a><\/li>\n<li><a href=\"https:\/\/www.computerhope.com\/\" target=\"_blank\" rel=\"nofollow noopener\">Computer Hope<\/a> \u2014 <a href=\"https:\/\/www.computerhope.com\/issues\/ch001246.htm\" target=\"_blank\" rel=\"nofollow noopener\">How do I use FTP from command line?<\/a><\/li>\n<li><a href=\"https:\/\/filezilla-project.org\/\" target=\"_blank\" rel=\"nofollow noopener\">FileZilla<\/a><\/li>\n<li><a href=\"https:\/\/cyberduck.io\/\" target=\"_blank\" rel=\"nofollow noopener\">Cyberduck<\/a><\/li>\n<li><a href=\"https:\/\/www.serv-u.com\" target=\"_blank\" rel=\"nofollow noopener\">Serv-u<\/a> \u2014 <a href=\"https:\/\/www.serv-u.com\/features\/file-transfer-protocol-server-linux\/commands\" target=\"_blank\" rel=\"nofollow noopener\">Linux and UNIX commands for FTP<\/a><\/li>\n<\/ul>\n<\/div>\n<\/section>\n<section id=\"related-checklists\">\n<h2>Related checklists:<\/h2>\n<div class=\"text-content\">\n<ul>\n<li><a href=\"https:\/\/www.process.st\/templates\/linux-proxy-server-setup-checklist\" target=\"_blank\" rel=\"nofollow noopener\">Linux Proxy Server Setup Checklist<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/linux-samba-file-server-setup-checklist\" target=\"_blank\" rel=\"nofollow noopener\">Linux Samba File Server Setup Checklist<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/linux-apache-server-setup-checklist\" target=\"_blank\" rel=\"nofollow noopener\">Linux Apache Server Setup Checklist<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/setup-apache-server\/\" rel=\"nofollow\">Windows Apache Server Setup<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/ubuntu-server-setup-process\/\" rel=\"nofollow\">Ubuntu Server Setup Process<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/server-maintenance-checklist\/\" rel=\"nofollow\">Server Maintenance Checklist<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/server-security-checklist\/\" rel=\"nofollow\">Server Security Checklist<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/information-security-incident-response\/\" rel=\"nofollow\">Information Security Incident Response<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/sql-server-audit-checklist\/\" rel=\"nofollow\">SQL Server Audit Checklist<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/privileged-password-management\/\" rel=\"nofollow\">Privileged Password Management<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/network-administrator-daily-tasks\/\" rel=\"nofollow\">Network Administrator Daily Tasks<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/network-security-audit-checklist\/\" rel=\"nofollow\">Network Security Audit Checklist<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/firewall-audit-checklist\/\" rel=\"nofollow\">Firewall Audit Checklist<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/vpn-configuration\/\" rel=\"nofollow\">VPN Configuration<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/email-server-security\/\" rel=\"nofollow\">Email Server Security<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/penetration-testing\/\" rel=\"nofollow\">Penetration Testing<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/cisco-router-setup\/\" rel=\"nofollow\">Cisco Router Setup<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/cisco-router-setup\/\" rel=\"nofollow\">IT Service Call Process<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/scheduled-maintenance-notification\/\" rel=\"nofollow\">Scheduled Maintenance Notification<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/patch-management\/\" rel=\"nofollow\">Patch Management<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/network-security-management\/\" rel=\"nofollow\">Network Security Management<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/client-data-backup-best-practices\/\" rel=\"nofollow\">Client Data Backup Best Practices<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/computer-maintenance-guide\/\" rel=\"nofollow\">Computer Maintenance Guide<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/inventory-management-process\" rel=\"nofollow\">Inventory Management Process<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/virtual-private-server-setup\/\" rel=\"nofollow\">Virtual Private Server Setup<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/it-support-process\/\" rel=\"nofollow\">IT Support Process<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/helpdesk-management\/\" rel=\"nofollow\">Helpdesk Management<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/server-maintenance-checklist\/\" rel=\"nofollow\">Vendor Management: Supplier Evaluation<\/a><\/li>\n<li><a href=\"https:\/\/www.process.st\/templates\/vendor-management-contract-negotiation\/\" rel=\"nofollow\">Vendor Management: Contract Negotiation<\/a><\/li>\n<\/ul>\n<\/div>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Introduction: An FTP server allows connected users to download, upload, and navigate the directories of files stored on the server. After this server setup is complete, you will be able to access the FTP server via terminal, or by using its credentials in an FTP client like FileZilla or Cyberduck. We'll use vsftpd as well [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":12976,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"ep_exclude_from_search":false,"cover_icon_emoji":"","cover_icon_url":"","tasks_count":"12","template_description":"Get an FTP server set up in minutes, and manage user permissions.","template_id":"p0p0cVzey54fIUHyKU1J9Q","task_0":"Introduction:","task_slug_0":"introduction","task_1":"Note down server IP","task_slug_1":"note-down-server-ip","task_2":"Establish SSH connection","task_slug_2":"establish-ssh-connection","task_3":"Install vsftpd","task_slug_3":"install-vsftpd","task_4":"Edit the vsftpd configuration file","task_slug_4":"edit-the-vsftpd-configuration-file","task_5":"Test the connection with root","task_slug_5":"test-the-connection-with-root","task_6":"Make a new user for FTP","task_slug_6":"make-a-new-user-for-ftp","task_7":"Create a user list","task_slug_7":"create-a-user-list","task_8":"Add user list to FTP config file","task_slug_8":"add-user-list-to-ftp-config-file","task_9":"Test the connection with new user","task_slug_9":"test-the-connection-with-new-user","task_10":"Sources:","task_slug_10":"sources","task_11":"Related checklists:","task_slug_11":"related-checklists","task_12":"","task_slug_12":"","task_13":"","task_slug_13":"","task_14":"","task_slug_14":"","task_15":"","task_slug_15":"","task_16":"","task_slug_16":"","task_17":"","task_slug_17":"","task_18":"","task_slug_18":"","task_19":"","task_slug_19":"","task_20":"","task_slug_20":"","task_21":"","task_slug_21":"","task_22":"","task_slug_22":"","task_23":"","task_slug_23":"","task_24":"","task_slug_24":"","task_25":"","task_slug_25":"","task_26":"","task_slug_26":"","task_27":"","task_slug_27":"","task_28":"","task_slug_28":"","task_29":"","task_slug_29":"","task_30":"","task_slug_30":"","task_31":"","task_slug_31":"","task_32":"","task_slug_32":"","task_33":"","task_slug_33":"","task_34":"","task_slug_34":"","task_35":"","task_slug_35":"","task_36":"","task_slug_36":"","task_37":"","task_slug_37":"","task_38":"","task_slug_38":"","task_39":"","task_slug_39":"","task_40":"","task_slug_40":"","task_41":"","task_slug_41":"","task_42":"","task_slug_42":"","task_43":"","task_slug_43":"","task_44":"","task_slug_44":"","task_45":"","task_slug_45":"","task_46":"","task_slug_46":"","task_47":"","task_slug_47":"","task_48":"","task_slug_48":"","task_49":"","task_slug_49":"","task_50":"","task_slug_50":"","task_51":"","task_slug_51":"","task_52":"","task_slug_52":"","task_53":"","task_slug_53":"","task_54":"","task_slug_54":"","task_55":"","task_slug_55":"","task_56":"","task_slug_56":"","task_57":"","task_slug_57":"","task_58":"","task_slug_58":"","task_59":"","task_slug_59":"","task_60":"","task_slug_60":"","task_61":"","task_slug_61":"","task_62":"","task_slug_62":"","task_63":"","task_slug_63":"","task_64":"","task_slug_64":"","task_65":"","task_slug_65":"","task_66":"","task_slug_66":"","task_67":"","task_slug_67":"","task_68":"","task_slug_68":"","task_69":"","task_slug_69":"","task_70":"","task_slug_70":"","task_71":"","task_slug_71":"","task_72":"","task_slug_72":"","task_73":"","task_slug_73":"","task_74":"","task_slug_74":"","task_75":"","task_slug_75":"","task_76":"","task_slug_76":"","task_77":"","task_slug_77":"","task_78":"","task_slug_78":"","task_79":"","task_slug_79":"","task_80":"","task_slug_80":"","task_81":"","task_slug_81":"","task_82":"","task_slug_82":"","task_83":"","task_slug_83":"","task_84":"","task_slug_84":"","task_85":"","task_slug_85":"","task_86":"","task_slug_86":"","task_87":"","task_slug_87":"","task_88":"","task_slug_88":"","task_89":"","task_slug_89":"","task_90":"","task_slug_90":"","task_91":"","task_slug_91":"","task_92":"","task_slug_92":"","task_93":"","task_slug_93":"","task_94":"","task_slug_94":"","task_95":"","task_slug_95":"","task_96":"","task_slug_96":"","task_97":"","task_slug_97":"","task_98":"","task_slug_98":"","task_99":"","task_slug_99":"","footnotes":""},"categories":[42,7],"tags":[],"class_list":["post-12972","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-internal-audit","category-miscellaneous"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.process.st\/templates\/wp-json\/wp\/v2\/posts\/12972","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.process.st\/templates\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.process.st\/templates\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.process.st\/templates\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.process.st\/templates\/wp-json\/wp\/v2\/comments?post=12972"}],"version-history":[{"count":0,"href":"https:\/\/www.process.st\/templates\/wp-json\/wp\/v2\/posts\/12972\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.process.st\/templates\/wp-json\/wp\/v2\/media\/12976"}],"wp:attachment":[{"href":"https:\/\/www.process.st\/templates\/wp-json\/wp\/v2\/media?parent=12972"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.process.st\/templates\/wp-json\/wp\/v2\/categories?post=12972"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.process.st\/templates\/wp-json\/wp\/v2\/tags?post=12972"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}