Introduction
In this lab, we will explore the Linux tftp (Trivial File Transfer Protocol) command and learn how to configure a tftp server to transfer files between a client and a server. The TFTP protocol provides a simple mechanism for transferring files without the authentication features found in more complex protocols like FTP.
We will start by understanding the basic usage of the tftp command, including its various options and commands. Then, we will set up a tftp server and practice transferring files to and from the server. This lab provides practical experience with the tftp protocol, which is commonly used for network booting, transferring configuration files to network devices, and other lightweight file transfer tasks.
Understanding the TFTP Protocol
The Trivial File Transfer Protocol (TFTP) is a simple protocol designed for lightweight file transfer operations. Unlike the more complex File Transfer Protocol (FTP), TFTP does not provide authentication features or directory listings. It operates using UDP on port 69, making it faster but less reliable than TCP-based protocols.
Let's start by checking if the TFTP client is properly installed on our system:
which tftp
You should see output similar to:
/usr/bin/tftp
Now, let's check the version of the TFTP client:
tftp --version
The output should show:
tftp-hpa version 5.2
The TFTP client operates in an interactive mode. To enter this mode, simply type:
tftp
This will give you a tftp> prompt where you can enter various commands. To see the available commands, enter:
help
You should see a list of commands like:
Commands may be abbreviated. Commands are:
connect connect to remote tftp
mode set file transfer mode
put send file
get receive file
quit exit tftp
verbose toggle verbose mode
trace toggle packet tracing
status show current status
binary set mode to octet
ascii set mode to netascii
rexmt set per-packet retransmission timeout
timeout set total retransmission timeout
? print help information
Let's examine some of the most important TFTP commands:
connect- Establishes a connection to a remote TFTP server.get- Downloads a file from the server to your local machine.put- Uploads a file from your local machine to the server.quit- Exits the TFTP client.binary- Sets the transfer mode to binary (recommended for most files).ascii- Sets the transfer mode to ASCII (for text files).
You can exit the TFTP client by typing:
quit
In the next step, we will learn how to run a TFTP server and configure it properly for file transfers.
Configuring and Managing a TFTP Server
In this step, we will examine how the TFTP server is configured and running on our system. The setup script has already installed and configured the TFTP server for us, but it's important to understand how it works.
First, let's check if the TFTP server is running:
sudo service tftpd-hpa status
You should see output indicating that the service is active and running.
The TFTP server's configuration is stored in the /etc/default/tftpd-hpa file. Let's examine its contents:
cat /etc/default/tftpd-hpa
You should see something like:
TFTP_USERNAME="labex"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
Here's what each of these settings means:
TFTP_USERNAME: The user account under which the TFTP server runsTFTP_DIRECTORY: The root directory where TFTP will serve and store filesTFTP_ADDRESS: The IP address and port on which the server listens (0.0.0.0 means all interfaces)TFTP_OPTIONS: Additional options for the server ("--secure" restricts operations to the TFTP directory)
Now, let's explore the TFTP directory:
ls -la /tftpboot
Initially, this directory might be empty or contain only system files. Let's create a test file in this directory:
echo "This is a file in the TFTP server directory." > /tmp/server-file.txt
sudo cp /tmp/server-file.txt /tftpboot/
Let's check if the file was created successfully:
ls -la /tftpboot
You should see server-file.txt in the directory.
To ensure that the TFTP server can read and write files in this directory, we need to check the permissions:
ls -ld /tftpboot
The permissions should be set to allow reading and writing by all users (777), as we configured in the setup script.
If you need to restart the TFTP server at any point, you can use:
sudo service tftpd-hpa restart
Now we have a running TFTP server with a test file ready for downloading. In the next step, we will use the TFTP client to transfer files to and from the server.
Transferring Files Using the TFTP Client
Now that we have a running TFTP server with a test file, let's learn how to transfer files using the TFTP client. We will practice both downloading files from the server and uploading files to the server.
Important Note: When using TFTP to upload files, the client looks for files in your current working directory. Make sure you're in the correct directory (~/project) before attempting to upload files.
Downloading Files from the TFTP Server
First, let's try to download the server-file.txt file we created in the previous step. We'll use the TFTP client in interactive mode:
cd ~/project
tftp localhost
You should see the tftp> prompt. Let's set the transfer mode to binary, which is suitable for all file types:
binary
Now, download the file from the server:
get server-file.txt downloaded-file.txt
This command downloads server-file.txt from the server and saves it as downloaded-file.txt in your current directory.
After the file transfer completes, exit the TFTP client:
quit
Let's verify that the file was downloaded correctly:
cat downloaded-file.txt
You should see:
This is a file in the TFTP server directory.
Uploading Files to the TFTP Server
Now, let's try uploading a file to the TFTP server. We already have a sample.txt file in our project directory that was created by the setup script.
First, let's make sure we're in the correct directory and check the content of this file:
cd ~/project
ls -la sample.txt
cat sample.txt
You should see:
This is a sample file for TFTP transfer testing.
Now, let's upload this file to the TFTP server:
tftp localhost
At the tftp> prompt, set the transfer mode to binary and upload the file:
binary
put sample.txt uploaded-sample.txt
If you get a "File not found" error, exit TFTP and verify the file exists:
quit
ls -la ~/project/sample.txt
cd ~/project
tftp localhost
binary
put sample.txt uploaded-sample.txt
This command uploads your local sample.txt file to the server and saves it as uploaded-sample.txt. After the file transfer completes, exit the TFTP client:
quit
Now, let's verify that the file was successfully uploaded to the server:
cat /tftpboot/uploaded-sample.txt
You should see:
This is a sample file for TFTP transfer testing.
Using TFTP with a Single Command Line
You can also use TFTP without entering interactive mode by providing all the necessary information in a single command line. For example:
cd ~/project
echo "One-line TFTP test" > oneline-test.txt
tftp -c put oneline-test.txt localhost
Let's check if the file was uploaded to the server:
cat /tftpboot/oneline-test.txt
You should see:
One-line TFTP test
This demonstrates that you can use TFTP both interactively and with single command lines, depending on your needs.
In the next step, we will explore more advanced TFTP options and troubleshooting techniques.
Advanced TFTP Options and Troubleshooting
In this step, we will explore some advanced options for the TFTP client and learn how to troubleshoot common issues.
Verbose Mode
When transferring files with TFTP, it can be helpful to see more details about the transfer process. You can enable verbose mode to see more information:
tftp localhost
At the tftp> prompt, enable verbose mode:
verbose
You should see:
Verbose mode on.
Now, try downloading a file:
get server-file.txt verbose-download.txt
With verbose mode enabled, you should see more detailed information about the transfer process.
Exit the TFTP client:
quit
Checking File Status
Let's create files of different sizes to test TFTP transfer capabilities:
## Make sure we're in the project directory
cd ~/project
## Create a small text file
echo "This is a small text file." > small.txt
## Create a medium-sized file (about 10KB)
dd if=/dev/urandom of=medium.bin bs=1K count=10 2> /dev/null
## Verify the files were created
ls -la small.txt medium.bin
## Try to upload these files
tftp localhost
At the tftp> prompt:
binary
put small.txt
put medium.bin
status
quit
The status command shows information about the current TFTP session, including the connected server and transfer mode.
Common TFTP Issues and Solutions
Here are some common issues you might encounter when using TFTP and how to solve them:
File Not Found (for put operations): This happens when the TFTP client can't find the file you're trying to upload in your current directory.
Solution: Ensure you're in the correct directory and the file exists:
pwd ls -la filename.txt cd ~/projectPermission Denied: This can happen if the TFTP server directory doesn't have the correct permissions.
Solution: Ensure the TFTP directory has proper permissions:
sudo chmod -R 777 /tftpbootConnection Refused: This can happen if the TFTP server is not running or is not accessible.
Solution: Check the status of the TFTP server:
sudo service tftpd-hpa statusIf it's not running, start it:
sudo service tftpd-hpa startFile Not Found (for get operations): This can happen if you're trying to download a file that doesn't exist on the server.
Solution: List the files in the TFTP directory to make sure the file exists:
ls -la /tftpboot
Let's intentionally create a situation where a file doesn't exist and see the error:
cd ~/project
tftp localhost
At the tftp> prompt:
get non-existent-file.txt
You should see an error message indicating that the file was not found.
quit
TFTP Timeout Settings
TFTP has settings for controlling timeouts during file transfers. These can be useful when transferring files over unreliable networks:
cd ~/project
tftp localhost
At the tftp> prompt:
rexmt 5
timeout 25
status
quit
These commands set the per-packet retransmission timeout to 5 seconds and the total retransmission timeout to 25 seconds.
Now you know how to use various advanced options with TFTP and how to troubleshoot common issues. These skills will be valuable when working with TFTP in real-world scenarios.
Summary
In this lab, we explored the Trivial File Transfer Protocol (TFTP) in Linux. We learned about the key features and limitations of TFTP, which makes it suitable for specific use cases like network booting and transferring configuration files to network devices.
Here's what we covered:
Understanding the TFTP Protocol: We learned about the basic concepts of TFTP and how it differs from other file transfer protocols. We explored the interactive mode of the TFTP client and its basic commands.
Configuring and Managing a TFTP Server: We examined how a TFTP server is configured in Linux, including the configuration file settings and directory permissions needed for proper operation.
Transferring Files Using the TFTP Client: We practiced both downloading files from a TFTP server and uploading files to it, using both interactive mode and single command lines.
Advanced TFTP Options and Troubleshooting: We explored advanced options like verbose mode and timeout settings, and learned how to troubleshoot common TFTP issues.
TFTP is a lightweight protocol that serves a specific purpose in network administration and embedded systems. While it lacks many features of more robust protocols like FTP or SFTP, its simplicity makes it valuable in scenarios where a minimal protocol is needed.
The skills you learned in this lab can be applied to tasks such as:
- Updating firmware on network devices
- Provisioning new servers using network boot
- Quickly transferring configuration files between systems
- Setting up automated backup systems for network device configurations
Important Tips for TFTP Usage:
- Always ensure you're in the correct working directory when uploading files
- TFTP transfers are unencrypted, so use only in trusted network environments or for non-sensitive data
- Remember that TFTP doesn't provide directory listing capabilities, so you need to know exact file names
- File permissions on both client and server directories are crucial for successful transfers



