Giả sử chúng ta có một AWS EC2 instance sử dụng linux và cần upload/download file. Trong trường hợp này, chúng ta có thể sử dụng SFTP để thực hiện upload/download file lên server.
Mặc định, chúng ta cần dùng file key “.pem” để authen cho user ec2-user khi SSH vào EC2 instance. Chúng ta có thể sử dụng file .pem này để thực hiện SFTP tới instance như sau.
Chú ý: Phần Host chúng ta điền public IP của instance.
Tuy nhiên, phương pháp này có một số hạn chế và nguy cơ:
- Cần có file .pem để có thể SFTP tới EC2 instance. Rất bất tiện và yêu cầu phải chia sẻ file .pem nếu thực hiện SFTP trên nhiều thiết bị khác nhau.
- Việc chia sẻ và sử dụng file .pem để SFTP rất không an toàn. Nếu file .pem rơi vào tay kẻ xấu, họ có thể truy cập vào EC2 instance (SSH) và lấy cắp nhiều thông tin khi ec2-user có thể switch sang account root.
Để giải quyết vấn đề này, chúng ta cần thực hiện chuyển cơ chế SFTP từ key .pem sang username/password và phân quyền cho các user đó.
Chú ý, các câu lệnh sau cần được thực thi với quyền root
Đầu tiên, chúng ta tạo ra các user để dành riêng cho việc sử dụng SFTP thay vì ec2-user:
adduser user_gsthl
adduser user_gstdn
adduser user_gsthcm
Và cài đặt mật khẩu cho các user với câu lệnh sau:
passwd user_gsthl
passwd user_gstdn
passwd user_gsthcm
Tiếp đó, chúng ta cần tạo một group dành riêng cho các user có quyền được phép sử dụng SFTP đến EC2 instance và add các user đó vào group:
groupadd sftp
usermod -a -G sftp user_gsthl
usermod -a -G sftp user_gstdn
usermod -a -G sftp user_gsthcm
Chúng ta có thể kiểm tra các user ở trong group với câu lệnh sau:grep sftp /etc/group
Tiếp đó, chúng ta tạo một thư mục dành riêng cho việc lưu trữ các file chuyển qua SFTP và phân quyền cho thư mục đó.
mkdir -p /public/sftp/
chmod 755 /public/sftp/
Tiếp đó, ta tạo một file trong thư mục để client có thể download về.
touch /public/sftp/hello.txt
echo "This is a hello from SFTP directory" > /public/sftp/hello.txt
Config file SFTP bằng cách thực hiện command sausudo nano /etc/ssh/sshd_config
Thêm đoạn config sau vào cuối của file sshd_config
Port 22
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /public/sftp
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
PasswordAuthentication yes
Sau khi config, chúng ta sử dụng lệnh sudo systemctl restart sshd
để khởi động lại sshd service. Nếu có lỗi trong quá trình khởi động lại, sử dụng lệnh systemctl status sshd.service -l
để thực hiện kiểm tra trạng thái của service.
Sau đó, ta có thể sử dụng FileZilla để kiểm tra SFTP đến server như sau:
Như vậy là ta đã cài đặt xong SFTP sử dụng username/password cho một group user cho AWS EC2 chạy Linux. Mong là bài viết có thể giúp ích cho các bạn giải quyết các vấn đề liên quan đến SFTP với AWS EC2. Nếu có câu hỏi hay góp ý nào, rất mong mọi người comment, mình sẽ giải đáp và tiếp thu.
Authors
TinNH6
2 comments
Ủng hộ tinh thần tham gia nhiệt tình của ae Backend! Tiếp tục phát huy nhé em!
A Tín viết bài hay quá <3