Câu hỏi 1
Câu hỏi của tôi là, làm cách nào để hạn chế lệnh chỉ chuyển SFTP này trong khóa chung được tạo?
Có 2 phương pháp để làm điều này.
1. - Hạn chế thông qua sshd
Phương pháp này liên quan đến việc thiết lập tính năng SFTP trong trình nền SSH của bạn , sshd
. Điều này được kiểm soát thông qua các /etc/ssh/sshd_config
tập tin cấu hình. LƯU Ý: Điều này sẽ hạn chế người dùng, backup
chỉ được phép SFTP vào máy chủ.
# /etc/ssh/sshd_config
Subsystem sftp internal-sftp
## You want to put only certain users (i.e users who belongs to sftpusers
## group) in the chroot jail environment. Add the following lines at the end
## of /etc/ssh/sshd_config
Match User backup
ForceCommand internal-sftp
2. - Hạn chế thông qua ủy quyền
Phương pháp này không liên quan đến bất kỳ thay đổi nào đối với sshd_config
tệp. Bạn có thể giới hạn người dùng + khóa SSH chỉ bằng một lệnh thông qua command=
tính năng mà bạn đã đề cập trong câu hỏi của mình. Bí quyết là trong những gì bạn bao gồm lệnh. Bạn có thể đặt máy chủ SFTP trong command=
dòng này , có tác dụng tương tự như thiết lập máy chủ SFTP trong sshd_config
tệp của bạn .
# User backup's $HOME/.ssh/authorized_keys file
command="/usr/libexec/openssh/sftp-server" ssh-dss AAAAC8ghi9ldw== backup@host
LƯU Ý: nếu người dùng có quyền ghi ~/.ssh/authorized_keys
, họ có thể đọc và / hoặc sửa đổi nó. Ví dụ, họ có thể tải xuống nó, chỉnh sửa nó và tải lại nó tước đi commmand=...
, cấp cho anh ta quyền truy cập lệnh không bị thay đổi, bao gồm cả vỏ. Nếu người dùng có quyền truy cập ghi ~/.ssh
, họ cũng có thể chỉ cần hủy liên kết và tạo lại tệp hoặc chmod
để ghi quyền truy cập. Nhiều giải pháp có thể tồn tại, chẳng hạn như đặt các ~/.ssh/authorized_keys
tệp ở nơi không thể ghi được, chẳng hạn như:
Match Group sftponly
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
Câu hỏi 2
Và vì tôi đang ở trên một địa chỉ IP động, làm cách nào để khắc phục vấn đề "máy chủ bị thiếu đã biết" mỗi khi IP của tôi thay đổi?
Điều này là khó khăn hơn nhưng cũng có thể sử dụng from=
tính năng trong authorized_keys
tệp. Ở đây chúng tôi giới hạn truy cập chỉ từ máy chủ , somehost.dyndns.org
.
từ = "somehost.dyndns.org", lệnh = "/ usr / libexec / openssh / sftp-server", không chuyển tiếp cổng, chuyển tiếp không X11, chuyển tiếp không đại lý, không pty ssh-dss AAAAC8ghi9ldw == sao lưu @ máy chủ
Các cài đặt bổ sung sau command=
cũng quan trọng không kém, vì chúng sẽ giới hạn việc sử dụng khóa SSH hơn nữa.
sự cố
from='hostname1,hostname2,''
- Hạn chế quyền truy cập từ các mẫu IP hoặc tên máy chủ được chỉ định
command='command'
- Chạy lệnh được chỉ định sau khi xác thực
no-pty
- Không phân bổ một pty (không cho phép đăng nhập tương tác)
no-port-forwarding
- Không cho phép chuyển tiếp cổng
no-X11-forwarding
- người dùng sẽ không thể xóa GUI X11 hiển thị
no-agent-forwarding
- người dùng sẽ không thể chuyển tiếp qua máy chủ này đến các máy chủ nội bộ khác
Để thoát khỏi thông báo về "máy chủ bị thiếu", bạn có thể thêm tùy chọn SSH này vào máy khách khi kết nối như vậy:
$ ssh -o StrictHostKeyChecking=no ....
Xem trang người đàn ông, ssh_config
để biết chi tiết đầy đủ về công tắc này.
Hạn chế trình bao của người dùng
Đối với cả hai giải pháp trên, bạn cũng có thể muốn khóa backup
người dùng bằng cách giới hạn trình bao của người dùng này trong /etc/passwd
tệp. Thông thường bạn sẽ muốn đặt nó scponly
, nhưng cũng có những lựa chọn khác cho việc này. Xem phần Hỏi & Đáp này của U & L có tiêu đề: " Bạn có cần vỏ cho SCP không? " Để biết cách thực hiện việc này.
Việc sử dụng /sbin/nologin
cũng có thể được sử dụng nếu bạn chọn sử dụng tính năng chroot từ sshd_config
như được nêu trong mục số 1 ở trên. Tuy nhiên, nếu bạn chọn sử dụng phương pháp được nêu trong # 2 , thì bạn có thể sẽ phải sử dụng scponly
hoặc một cái gì đó khác cho trình bao của người dùng /etc/passwd
.
THƯỞNG - Mở rộng số 2 ở trên
Nếu bạn cần để lộ một bộ lệnh cho người dùng này, bạn cũng có thể làm điều này. Tạo một kịch bản như vậy , /home/backup/commands.sh
:
#!/bin/sh
case $SSH_ORIGINAL_COMMAND in
"diskspace")
df -h
;;
"dirlist")
ls -1
;;
"apache_restart")
/etc/init.d/apache restart
;;
*)
echo "Unknown command"
esac
Sau đó, bạn thiết lập authorized_keys
tệp như vậy:
command="/bin/sh /home/user/commands.sh" ssh-dss AAAAC8ghi9ldw== user@host
Sau đó, backup
người dùng có thể chạy các lệnh này như sau:
# diskspace
$ ssh -q user@remote_host diskspace
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/dev-root 39G 2.2G 35G 6% /
# dirlist
$ ssh -q remote_host dirlist
commands.sh
dump.sql
Người giới thiệu