Cách cài đặt và sử dụng SSHFS trên Linux

theanh

Administrator
Nhân viên
SSHFS (Hệ thống tệp SSH) là một triển khai của Hệ thống tệp trong không gian người dùng (FUSE) cho phép máy khách gắn hệ thống tệp từ xa qua kết nối SSH. SSHFS sử dụng Giao thức truyền tệp SSH (SFTP) để gắn hệ thống tệp từ xa vào máy khách và các kết nối giữa máy khách và máy chủ được bảo mật và mã hóa.

SSHFS có thể được sử dụng như một giải pháp thay thế cho giao thức FTP truyền thống. Theo mặc định, giao thức này bảo mật thông qua kết nối SSH và không cần thêm bất kỳ gói hoặc cấu hình nào. SSHFS hoạt động với cấu hình SSH mặc định đơn giản.

Trong hướng dẫn này, bạn sẽ học cách gắn thư mục từ xa theo cách bảo mật bằng cách sử dụng SSHFS giữa hai máy Linux (máy khách và máy chủ). Hướng dẫn này cũng bao gồm cách thiết lập chroot trên SSHFS để ngăn người dùng truy cập vào thư mục của người dùng khác.

Điều kiện tiên quyết​

Để thực hiện theo hướng dẫn này, bạn sẽ cần hai máy Linux, một máy khách và một máy chủ. Bạn có thể sử dụng bất kỳ bản phân phối Linux nào và đảm bảo máy chủ đã cài đặt máy chủ OpenSSH và bạn có người dùng không phải root với quyền root sudo.

Cài đặt SSHFS vào máy tính cục bộ của bạn​

Theo mặc định, các gói SSHFS có sẵn trên hầu hết các bản phân phối Linux, bao gồm Debian/Ubuntu, RHEL/CentOS/Rocky và ArchLinux/Manjaro. Bạn có thể dễ dàng cài đặt nó bằng trình quản lý gói hệ thống của mình. Trong phần này, bạn sẽ cài đặt SSHFS trên máy cục bộ/máy khách của mình.

Đầu tiên, hãy cập nhật danh sách chỉ mục gói của bạn bằng cách chạy lệnh sau.
Mã:
# Đối với Debian/Ubuntu
sudo apt update

# Đối với RHEL/CentOS/RockyLinux
sudo dnf check-update

# Đối với ArchLinux/Manjaro
sudo pacman -Syu
Sau khi chỉ mục gói của bạn được cập nhật, hãy cài đặt gói SSHFS bằng trình quản lý gói của bạn như bên dưới. Trên bản phân phối Debian và Archlinux, gói được đặt tên là 'sshfs', nhưng trên bản phân phối dựa trên RHEL, gói được gọi là 'fuse-sshfs'.
Mã:
# Đối với Debian/Ubuntu
sudo apt install sshfs

# Đối với RHEL/CentOS/RockyLinux
sudo dnf install fuse-sshfs

# Đối với ArchLinux/Manjaro
sudo pacman -S sshfs
Bây giờ bạn đã hoàn tất việc cài đặt gói SSHFS trên máy cục bộ của mình. Tiếp theo, bạn sẽ học lệnh cơ bản để gắn và ngắt kết nối thư mục/phân vùng từ xa vào máy cục bộ của bạn bằng lệnh SSHFS.

Cơ bản: Gắn và ngắt kết nối bằng SSHFS​

Trước khi bắt đầu với lệnh SSHFS, hãy đảm bảo rằng bạn đã cài đặt máy chủ Linux có bật OpenSSH. Đối với xác thực người dùng vào máy chủ, bạn có thể sử dụng xác thực dựa trên mật khẩu SSH hoặc xác thực dựa trên khóa SSH. Tuy nhiên, bạn có thể cân nhắc sử dụng xác thực dựa trên khóa SSH, an toàn hơn xác thực dựa trên mật khẩu.

Trong phần này, bạn sẽ học lệnh cơ bản 'sshfs' để gắn thư mục/phân vùng từ xa từ máy chủ vào máy cục bộ/máy khách. Ngoài ra, bạn sẽ học cách ngắt kết nối sshfs khỏi máy cục bộ của mình.

1. Lệnh cơ bản 'sshfs' để gắn một thư mục vào máy cục bộ thông qua giao thức SSH như sau.
Mã:
sshfs user@server-ip:/remote/directory /local/directory
Trong thực tế, hãy gắn thư mục từ xa '/srv/data' từ máy chủ '172.16.1.10' vào thư mục máy cục bộ '~/data'. Ví dụ này sử dụng người dùng SSH 'johndoe'.
Mã:
sshfs [emailprotected]:/srv/data ~/data
Bây giờ bạn sẽ được nhắc xác thực bằng mật khẩu nếu bạn đang sử dụng xác thực dựa trên mật khẩu cho SSH của mình.



Để xác minh, hãy chạy lệnh 'ls' đến thư mục '~/data' trên máy cục bộ.
Mã:
ls -lah ~/data
Bạn sẽ thấy danh sách các tệp từ máy chủ từ xa trên máy cục bộ của mình.



2. Bây giờ, để hủy gắn thư mục từ xa khỏi máy cục bộ của bạn, hãy chạy lệnh 'fusermount' như bên dưới. Lệnh này được sử dụng để gắn và hủy gắn hệ thống tệp FUSE.
Mã:
fusermount -u ~/data


3. Một ví dụ khác về lệnh 'sshfs' mà bạn có thể quan tâm.

Lệnh 'sshfs' với tùy chọn gỡ lỗi '-d'. Bất cứ khi nào bạn gặp sự cố với lệnh 'sshfs', hãy sử dụng tùy chọn bổ sung '-d' để hiển thị tất cả các thông báo gỡ lỗi khi tạo kết nối đến máy chủ.
Mã:
sshfs user@server-ip:/remote/directory /local/directory -d
Bây giờ, nếu bạn đang chạy máy chủ có cổng SSH không chuẩn, bạn có thể thêm tùy chọn '-p' theo sau là cổng SSH của bạn.
Mã:
sshfs user@server-ip:/remote/directory /local/directory -C -p 2222
Tùy chọn '-C' sẽ bật tính năng nén, tương đương với tùy chọn '-o compression=yes' trong lệnh ssh.

Để tham khảo đầy đủ, bạn có thể sử dụng tùy chọn '--help' hoặc sử dụng trang hướng dẫn SSHFS.
Mã:
sshfs --help
man sshfs

Thiết lập Chroot trên SSHFS​

Trong phần này, bạn sẽ tìm hiểu cách bật chroot trên SSHFS, có thể thực hiện bằng cách cấu hình máy chủ SSH và chỉ định người dùng và thư mục. Môi trường chroot sẽ giới hạn quyền truy cập thư mục, nhưng người dùng của bạn vẫn có thể đọc và ghi trên thư mục gắn kết.

1. Trước tiên, bạn sẽ tạo một thư mục chroot mới cho người dùng của mình và cho phép quyền truy cập đọc và ghi. Trong hướng dẫn này, bạn sẽ tạo một thư mục chia sẻ mới '/srv/shared', sau đó tạo một thư mục home và thư mục dữ liệu mới cho mỗi người dùng.

Chạy lệnh sau để tạo một thư mục chia sẻ chính mới '/srv/shared' và thay đổi quyền sở hữu thành người dùng và nhóm 'root'.
Mã:
mkdir -p /srv/shared
sudo chown -R root:root /srv/shared
2. Bây giờ, tạo một thư mục khác cho mỗi người dùng trong thư mục '/srv/shared'. Và đảm bảo thay đổi quyền sở hữu của thư mục đó thành người dùng và nhóm 'root'.
Mã:
mkdir -p /srv/shared/johndoe
sudo chown -R root:root /srv/shared/johndoe
3. Tiếp theo, tạo thư mục 'data' bên trong thư mục home của người dùng '/srv/shared/johndoe'. Sau đó, thay đổi quyền sở hữu thư mục đó thành người dùng 'root' và nhóm 'johndoe'. Cuối cùng, cho phép nhóm 'johndoe' đọc và ghi vào thư mục đó.
Mã:
mkdir -p /srv/shared/johndoe/data
sudo chown -R root:johndoe /srv/shared/johndoe/data
sudo chmod g+rwx /srv/shared/johndoe/data
Bây giờ, bạn có thể gắn thư mục từ xa '/data', nhưng nó tương đương với thư mục '/srv/shared/johndoe/data' trên máy chủ.



4. Sau khi bạn đã tạo thư mục chroot cho người dùng của mình, bạn sẽ cần chỉnh sửa cấu hình SSH '/etc/ssh/sshd_config'. Chỉnh sửa bằng nano hoặc trình soạn thảo văn bản yêu thích của bạn.
Mã:
sudo nano /etc/ssh/sshd_config
Thêm các dòng sau vào tệp.
Mã:
Subsystem sftp internal-sftp
Khớp với người dùng johndoe 
 ChrootDirectory /srv/shared/%u
 ForceCommand internal-sftp
 AllowTcpForwarding no
 X11Forwarding no
Cấu hình 'internal-sftp' cũng sẽ cho phép SSH hoạt động như một máy chủ SFTP. Sau đó, hãy định nghĩa 'ChrootDirectory' cho người dùng 'johndoe' vào thư mục '/srv/shared/%u'. '%u' có nghĩa là tên người dùng.

Lưu và đóng tệp.

5. Tiếp theo, chạy lệnh sau để xác minh cấu hình SSH và đảm bảo bạn không gặp lỗi cú pháp. Sau đó, khởi động lại dịch vụ SSH để áp dụng cấu hình mới.
Mã:
sudo sshd -t
sudo systemctl restart sshd
6. Bây giờ, quay lại máy khách/máy cục bộ, sau đó gắn thư mục từ xa vào môi trường chroot. Bạn nên sử dụng thư mục '/data', thay vì thư mục đường dẫn đầy đủ '/srv/shared/johndoe/data'. Và bạn có quyền đọc, ghi và thực thi vào thư mục 'data'.
Mã:
sshfs user@server-ip:/data ~/data
Để xác minh quyền truy cập ghi, hãy tạo một tệp mới trên máy khách của bạn bằng lệnh sau.
Mã:
cd ~/data
echo "Tệp này từ máy khách" >> another-file.md


Bây giờ, quay lại máy chủ, điều hướng đến thư mục '/srv/shared/johndoe/data', kiểm tra tệp có sẵn trong thư mục đó.
Mã:
cd /srv/shared/johndoe/data/
ls

cat another-file.md
Bạn sẽ thấy tệp mà bạn vừa tạo từ máy khách.



Trong phần này, bạn đã tạo thư mục chroot cho người dùng SSHFS và định cấu hình dịch vụ SSH để bật chroot.

Khắc phục sự cố​

Nếu gặp lỗi trên kết nối SSHFS, bạn có thể khắc phục sự cố kết nối của mình bằng các cách sau.

Bạn có thể sử dụng chế độ gỡ lỗi với tùy chọn '-d'. Với tùy chọn này, bạn sẽ thấy nhật ký kết nối của mình trên thiết bị đầu cuối shell.

Chạy lệnh 'sshfs' với chế độ gỡ lỗi như bên dưới.
Mã:
sshfs user@server-ip:/data ~/mnt -d
Một cách khác mà bạn có thể thử là kiểm tra nhật ký SSH trên máy chủ của mình. Trước khi sử dụng lệnh 'sshfs', hãy mở một thiết bị đầu cuối mới và kết nối với máy chủ của bạn, sau đó chạy lệnh 'tail' để kiểm tra dịch vụ nhật ký SSH.

Trên hệ thống chạy Ubuntu/Debian, nhật ký SSH có sẵn tại '/var/log/auth.log'. Và đối với hệ thống dựa trên RHEL/CentOS, nhật ký SSH có sẵn tại '/var/log/secure'.
Mã:
# Đối với Ubuntu/Debian
tail -f /var/log/auth.log

# Đối với RHEL/CentOS
tail -f /var/log/secure

Kết luận​

Xin chúc mừng! Bây giờ bạn đã học cách sử dụng SSHFS để gắn kết thư mục từ xa từ máy chủ vào máy cục bộ của mình. Ngoài ra, bạn đã học cách thiết lập môi trường chroot trên SSHFS và cách khắc phục sự cố kết nối SSHFS của mình.
 
Back
Bên trên