Lệnh tftp trong Linux

Giới thiệu

Trong lab này, chúng ta sẽ khám phá lệnh tftp (Trivial File Transfer Protocol) của Linux và tìm hiểu cách cấu hình một máy chủ tftp để truyền tệp giữa máy khách và máy chủ. Giao thức TFTP cung cấp một cơ chế đơn giản để truyền tệp mà không có các tính năng xác thực được tìm thấy trong các giao thức phức tạp hơn như FTP.

Chúng ta sẽ bắt đầu bằng cách hiểu cách sử dụng cơ bản của lệnh tftp, bao gồm các tùy chọn và lệnh khác nhau của nó. Sau đó, chúng ta sẽ thiết lập một máy chủ tftp và thực hành truyền tệp đến và đi từ máy chủ. Lab này cung cấp kinh nghiệm thực tế với giao thức tftp, thường được sử dụng để khởi động mạng, truyền tệp cấu hình đến các thiết bị mạng và các tác vụ truyền tệp nhẹ khác.

Tìm hiểu về giao thức TFTP

Giao thức Trivial File Transfer Protocol (TFTP) là một giao thức đơn giản được thiết kế cho các hoạt động truyền tệp nhẹ. Không giống như giao thức File Transfer Protocol (FTP) phức tạp hơn, TFTP không cung cấp các tính năng xác thực hoặc liệt kê thư mục. Nó hoạt động bằng UDP trên cổng 69, làm cho nó nhanh hơn nhưng kém tin cậy hơn các giao thức dựa trên TCP.

Hãy bắt đầu bằng cách kiểm tra xem máy khách TFTP đã được cài đặt đúng cách trên hệ thống của chúng ta chưa:

which tftp

Bạn sẽ thấy đầu ra tương tự như:

/usr/bin/tftp

Bây giờ, hãy kiểm tra phiên bản của máy khách TFTP:

tftp --version

Đầu ra sẽ hiển thị:

tftp-hpa version 5.2

Máy khách TFTP hoạt động ở chế độ tương tác. Để vào chế độ này, chỉ cần gõ:

tftp

Điều này sẽ cung cấp cho bạn dấu nhắc tftp>, nơi bạn có thể nhập các lệnh khác nhau. Để xem các lệnh có sẵn, hãy nhập:

help

Bạn sẽ thấy một danh sách các lệnh như:

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

Hãy xem xét một số lệnh TFTP quan trọng nhất:

  1. connect - Thiết lập kết nối đến một máy chủ TFTP từ xa.
  2. get - Tải xuống một tệp từ máy chủ về máy cục bộ của bạn.
  3. put - Tải lên một tệp từ máy cục bộ của bạn lên máy chủ.
  4. quit - Thoát khỏi máy khách TFTP.
  5. binary - Đặt chế độ truyền thành nhị phân (khuyến nghị cho hầu hết các tệp).
  6. ascii - Đặt chế độ truyền thành ASCII (cho các tệp văn bản).

Bạn có thể thoát khỏi máy khách TFTP bằng cách gõ:

quit

Trong bước tiếp theo, chúng ta sẽ tìm hiểu cách chạy máy chủ TFTP và cấu hình nó đúng cách để truyền tệp.

Cấu hình và quản lý máy chủ TFTP

Trong bước này, chúng ta sẽ xem xét cách máy chủ TFTP được cấu hình và chạy trên hệ thống của chúng ta. Tập lệnh thiết lập đã cài đặt và cấu hình máy chủ TFTP cho chúng ta, nhưng điều quan trọng là phải hiểu cách nó hoạt động.

Đầu tiên, hãy kiểm tra xem máy chủ TFTP có đang chạy không:

sudo service tftpd-hpa status

Bạn sẽ thấy đầu ra cho biết rằng dịch vụ đang hoạt động và chạy.

Cấu hình của máy chủ TFTP được lưu trữ trong tệp /etc/default/tftpd-hpa. Hãy xem xét nội dung của nó:

cat /etc/default/tftpd-hpa

Bạn sẽ thấy một cái gì đó như:

TFTP_USERNAME="labex"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

Đây là ý nghĩa của từng cài đặt này:

  • TFTP_USERNAME: Tài khoản người dùng mà máy chủ TFTP chạy
  • TFTP_DIRECTORY: Thư mục gốc nơi TFTP sẽ phục vụ và lưu trữ tệp
  • TFTP_ADDRESS: Địa chỉ IP và cổng mà máy chủ lắng nghe (0.0.0.0 có nghĩa là tất cả các giao diện)
  • TFTP_OPTIONS: Các tùy chọn bổ sung cho máy chủ ("--secure" hạn chế các hoạt động vào thư mục TFTP)

Bây giờ, hãy khám phá thư mục TFTP:

ls -la /tftpboot

Ban đầu, thư mục này có thể trống hoặc chỉ chứa các tệp hệ thống. Hãy tạo một tệp thử nghiệm trong thư mục này:

echo "This is a file in the TFTP server directory." > /tmp/server-file.txt
sudo cp /tmp/server-file.txt /tftpboot/

Hãy kiểm tra xem tệp đã được tạo thành công chưa:

ls -la /tftpboot

Bạn sẽ thấy server-file.txt trong thư mục.

Để đảm bảo rằng máy chủ TFTP có thể đọc và ghi tệp trong thư mục này, chúng ta cần kiểm tra quyền:

ls -ld /tftpboot

Các quyền phải được đặt để cho phép đọc và ghi bởi tất cả người dùng (777), như chúng ta đã cấu hình trong tập lệnh thiết lập.

Nếu bạn cần khởi động lại máy chủ TFTP vào bất kỳ thời điểm nào, bạn có thể sử dụng:

sudo service tftpd-hpa restart

Bây giờ chúng ta đã có một máy chủ TFTP đang chạy với một tệp thử nghiệm sẵn sàng để tải xuống. Trong bước tiếp theo, chúng ta sẽ sử dụng máy khách TFTP để truyền tệp đến và đi từ máy chủ.

Truyền tệp bằng máy khách TFTP

Bây giờ chúng ta đã có một máy chủ TFTP đang chạy với một tệp thử nghiệm, hãy tìm hiểu cách truyền tệp bằng máy khách TFTP. Chúng ta sẽ thực hành cả tải xuống tệp từ máy chủ và tải lên tệp lên máy chủ.

Tải xuống tệp từ máy chủ TFTP

Đầu tiên, hãy thử tải xuống tệp server-file.txt mà chúng ta đã tạo trong bước trước. Chúng ta sẽ sử dụng máy khách TFTP ở chế độ tương tác:

cd ~/project
tftp localhost

Bạn sẽ thấy dấu nhắc tftp>. Hãy đặt chế độ truyền thành nhị phân, phù hợp với tất cả các loại tệp:

binary

Bây giờ, hãy tải xuống tệp từ máy chủ:

get server-file.txt downloaded-file.txt

Lệnh này tải xuống server-file.txt từ máy chủ và lưu nó dưới dạng downloaded-file.txt trong thư mục hiện tại của bạn.

Sau khi quá trình truyền tệp hoàn tất, hãy thoát khỏi máy khách TFTP:

quit

Hãy xác minh rằng tệp đã được tải xuống chính xác:

cat downloaded-file.txt

Bạn sẽ thấy:

This is a file in the TFTP server directory.

Tải tệp lên máy chủ TFTP

Bây giờ, hãy thử tải một tệp lên máy chủ TFTP. Chúng ta đã có một tệp sample.txt trong thư mục dự án của chúng ta được tạo bởi tập lệnh thiết lập.

Đầu tiên, hãy kiểm tra nội dung của tệp này:

cat sample.txt

Bạn sẽ thấy:

This is a sample file for TFTP transfer testing.

Bây giờ, hãy tải tệp này lên máy chủ TFTP:

tftp localhost

Tại dấu nhắc tftp>, hãy đặt chế độ truyền thành nhị phân và tải tệp lên:

binary
put sample.txt uploaded-sample.txt

Lệnh này tải tệp sample.txt cục bộ của bạn lên máy chủ và lưu nó dưới dạng uploaded-sample.txt. Sau khi quá trình truyền tệp hoàn tất, hãy thoát khỏi máy khách TFTP:

quit

Bây giờ, hãy xác minh rằng tệp đã được tải lên máy chủ thành công:

cat /tftpboot/uploaded-sample.txt

Bạn sẽ thấy:

This is a sample file for TFTP transfer testing.

Sử dụng TFTP với một dòng lệnh duy nhất

Bạn cũng có thể sử dụng TFTP mà không cần vào chế độ tương tác bằng cách cung cấp tất cả thông tin cần thiết trong một dòng lệnh duy nhất. Ví dụ:

echo "One-line TFTP test" > oneline-test.txt
tftp -c put oneline-test.txt localhost

Hãy kiểm tra xem tệp đã được tải lên máy chủ chưa:

cat /tftpboot/oneline-test.txt

Bạn sẽ thấy:

One-line TFTP test

Điều này chứng minh rằng bạn có thể sử dụng TFTP cả ở chế độ tương tác và với các dòng lệnh đơn, tùy thuộc vào nhu cầu của bạn.

Trong bước tiếp theo, chúng ta sẽ khám phá các tùy chọn TFTP nâng cao hơn và các kỹ thuật khắc phục sự cố.

Các tùy chọn TFTP nâng cao và khắc phục sự cố

Trong bước này, chúng ta sẽ khám phá một số tùy chọn nâng cao cho máy khách TFTP và tìm hiểu cách khắc phục các sự cố thường gặp.

Chế độ Verbose

Khi truyền tệp với TFTP, có thể hữu ích khi xem thêm chi tiết về quá trình truyền. Bạn có thể bật chế độ verbose để xem thêm thông tin:

tftp localhost

Tại dấu nhắc tftp>, hãy bật chế độ verbose:

verbose

Bạn sẽ thấy:

Verbose mode on.

Bây giờ, hãy thử tải xuống một tệp:

get server-file.txt verbose-download.txt

Với chế độ verbose được bật, bạn sẽ thấy thông tin chi tiết hơn về quá trình truyền.

Thoát khỏi máy khách TFTP:

quit

Kiểm tra trạng thái tệp

Hãy tạo các tệp có kích thước khác nhau để kiểm tra khả năng truyền TFTP:

## 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

## Try to upload these files
tftp localhost

Tại dấu nhắc tftp>:

binary
put small.txt
put medium.bin
status
quit

Lệnh status hiển thị thông tin về phiên TFTP hiện tại, bao gồm máy chủ đã kết nối và chế độ truyền.

Các vấn đề và giải pháp TFTP thường gặp

Dưới đây là một số vấn đề thường gặp mà bạn có thể gặp phải khi sử dụng TFTP và cách giải quyết chúng:

  1. Quyền bị từ chối:
    Điều này có thể xảy ra nếu thư mục máy chủ TFTP không có quyền chính xác.

    Giải pháp: Đảm bảo thư mục TFTP có quyền phù hợp:

    sudo chmod -R 777 /tftpboot
  2. Kết nối bị từ chối:
    Điều này có thể xảy ra nếu máy chủ TFTP không chạy hoặc không thể truy cập được.

    Giải pháp: Kiểm tra trạng thái của máy chủ TFTP:

    sudo service tftpd-hpa status

    Nếu nó không chạy, hãy khởi động nó:

    sudo service tftpd-hpa start
  3. Không tìm thấy tệp:
    Điều này có thể xảy ra nếu bạn đang cố gắng tải xuống một tệp không tồn tại trên máy chủ.

    Giải pháp: Liệt kê các tệp trong thư mục TFTP để đảm bảo tệp tồn tại:

    ls -la /tftpboot

Hãy cố tình tạo ra một tình huống mà một tệp không tồn tại và xem lỗi:

tftp localhost

Tại dấu nhắc tftp>:

get non-existent-file.txt

Bạn sẽ thấy một thông báo lỗi cho biết rằng tệp không được tìm thấy.

quit

Cài đặt thời gian chờ TFTP

TFTP có các cài đặt để kiểm soát thời gian chờ trong quá trình truyền tệp. Chúng có thể hữu ích khi truyền tệp qua các mạng không đáng tin cậy:

tftp localhost

Tại dấu nhắc tftp>:

rexmt 5
timeout 25
status
quit

Các lệnh này đặt thời gian chờ truyền lại mỗi gói thành 5 giây và tổng thời gian chờ truyền lại thành 25 giây.

Bây giờ bạn đã biết cách sử dụng các tùy chọn nâng cao khác nhau với TFTP và cách khắc phục các sự cố thường gặp. Những kỹ năng này sẽ có giá trị khi làm việc với TFTP trong các tình huống thực tế.

Tóm tắt

Trong lab này, chúng ta đã khám phá giao thức Trivial File Transfer Protocol (TFTP) trong Linux. Chúng ta đã tìm hiểu về các tính năng và hạn chế chính của TFTP, điều này làm cho nó phù hợp với các trường hợp sử dụng cụ thể như khởi động mạng và truyền tệp cấu hình đến các thiết bị mạng.

Đây là những gì chúng ta đã đề cập:

  1. Tìm hiểu về giao thức TFTP: Chúng ta đã tìm hiểu về các khái niệm cơ bản của TFTP và cách nó khác với các giao thức truyền tệp khác. Chúng ta đã khám phá chế độ tương tác của máy khách TFTP và các lệnh cơ bản của nó.

  2. Cấu hình và quản lý máy chủ TFTP: Chúng ta đã xem xét cách máy chủ TFTP được cấu hình trong Linux, bao gồm các cài đặt tệp cấu hình và quyền thư mục cần thiết để hoạt động đúng cách.

  3. Truyền tệp bằng máy khách TFTP: Chúng ta đã thực hành cả tải xuống tệp từ máy chủ TFTP và tải tệp lên nó, sử dụng cả chế độ tương tác và các dòng lệnh đơn.

  4. Các tùy chọn TFTP nâng cao và khắc phục sự cố: Chúng ta đã khám phá các tùy chọn nâng cao như chế độ verbose và cài đặt thời gian chờ, đồng thời tìm hiểu cách khắc phục các sự cố TFTP thường gặp.

TFTP là một giao thức nhẹ phục vụ một mục đích cụ thể trong quản trị mạng và các hệ thống nhúng. Mặc dù nó thiếu nhiều tính năng của các giao thức mạnh mẽ hơn như FTP hoặc SFTP, nhưng sự đơn giản của nó làm cho nó có giá trị trong các tình huống cần một giao thức tối thiểu.

Các kỹ năng bạn học được trong lab này có thể được áp dụng cho các tác vụ như:

  • Cập nhật firmware trên các thiết bị mạng
  • Cung cấp các máy chủ mới bằng cách sử dụng khởi động mạng
  • Truyền nhanh các tệp cấu hình giữa các hệ thống
  • Thiết lập các hệ thống sao lưu tự động cho cấu hình thiết bị mạng

Hãy nhớ rằng các truyền TFTP không được mã hóa, vì vậy tốt nhất nên sử dụng nó trong các môi trường mạng đáng tin cậy hoặc cho dữ liệu không nhạy cảm.

400+ câu lệnh phổ biến trong Linux