Có cách nào để định cấu hình người dùng trên hộp Linux (Centos 5.2 trong trường hợp này) để họ có thể sử dụng scp để truy xuất tệp, nhưng thực tế không thể đăng nhập vào máy chủ bằng SSH?
Có cách nào để định cấu hình người dùng trên hộp Linux (Centos 5.2 trong trường hợp này) để họ có thể sử dụng scp để truy xuất tệp, nhưng thực tế không thể đăng nhập vào máy chủ bằng SSH?
Câu trả lời:
vỏ rssh ( http://pizzashack.org/rssh/ ) được thiết kế cho mục đích chính xác này.
Vì RHEL / CentOS 5.2 không bao gồm gói cho rssh, bạn có thể xem tại đây để nhận RPM: http://dag.wieers.com/rpm/packages/rssh/
Để sử dụng, chỉ cần đặt nó làm vỏ cho một người dùng mới như thế này:
useradd -m -d /home/scpuser1 -s /usr/bin/rssh scpuser1
passwd scpuser1
.. hoặc thay đổi vỏ cho một cái hiện có như thế này:
chsh -s /usr/bin/rssh scpuser1
..và chỉnh sửa /etc/rssh.conf
để định cấu hình shell rssh - đặc biệt là dòng uncomment allowscp
để cho phép truy cập SCP cho tất cả người dùng rssh.
(Bạn cũng có thể muốn sử dụng chroot để giữ người dùng trong nhà của họ nhưng đó là một câu chuyện khác.)
Tôi đến muộn nhưng bạn có thể sử dụng các khóa ssh và chỉ định lệnh chính xác được phép trong tệp ~ / .ssh / ủy quyền của họ, vd
không chuyển tiếp cổng, không pty, lệnh = "mục tiêu nguồn scp" ssh-dss ...
Bạn có thể cần sử dụng ps trên mục tiêu để đặt cài đặt lệnh đúng.
PS: Nếu bạn chạy lệnh kiểm tra scp bằng "-v", bạn có thể thấy một cái gì đó như thế này
debug1: Sending command: scp -v -t myfile.txt
Bạn sẽ lưu ý rằng "-t" là một tùy chọn scp không có giấy tờ, được chương trình sử dụng ở phía xa. Điều này cung cấp cho bạn ý tưởng về những gì bạn cần đưa vào ủy quyền.
EDIT: Bạn có thể tìm thêm thông tin (với một số liên kết) trong câu hỏi StackOverflow này .
Dưới đây là một ví dụ hoạt động về điều này, cho một người dùng có tên backup_user
ở phía máy chủ.
~backup_user/.ssh/authorized_keys
nội dung về phía máy chủ (với một số hạn chế bảo mật hơn):
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="scp -v -r -d -t ~/CONTENT" ssh-rsa AAAAMYRSAKEY...
Tạo một liên kết trong ~ backup_user / liên kết đến thư mục nơi nội dung sẽ có thể truy cập được.
$ ln -s /path/to/directory/with/accessible/content ~backup_user/CONTENT
Bây giờ, từ phía máy khách, lệnh sau sẽ hoạt động:
scp -v -r -P 2222 -i .ssh/id_rsa_key_file path/to/data backup_user@SERVER:~/CONTENT
Lệnh này làm gì:
-v
tệp từ cả hai lệnh và tệp ủy quyền)-r
khỏi cả tệp lệnh và tệp ủy quyền nếu bạn không muốn tạo một bản sao đệ quy)-P 2222
khỏi lệnh)-i .ssh/id_rsa_key_file
path/to/data
sẽ được sao chép vào/path/to/directory/with/accessible/content/
Để tạo một bản sao của một tệp (hoặc một số) từ máy chủ đến máy khách, bạn nên tạo một tập lệnh shell xử lý việc này như được mô tả ở đây
chmod 400 ~/.ssh/authorized_keys
.
~/.bashrc
(và bất cứ điều gì khác Bash thực thi) và chỉ ~/.ssh/rc
đọc. Nhưng nếu người dùng độc hại có quyền truy cập vào rsync hoặc sftp, anh ta vẫn có thể xóa ~/.bashrc
và tải lên một cái mới. Vì nó khó bảo vệ, tôi khuyên bạn nên chống lại phương pháp này ( command="..."
).
Tôi đến bữa tiệc hơi muộn, tuy nhiên tôi sẽ đề nghị bạn xem qua ForceCommand
chỉ thị của OpenSSH.
Subsystem sftp internal-sftp
Match group sftponly
ForceCommand internal-sftp
Cấp, đây là SFTP và không phải SCP, nhưng nó đạt được cùng một mục tiêu, an toàn hơn so với vỏ bị hạn chế. Ngoài ra, bạn có thể chroot người dùng nếu bạn muốn.
chrootDirectory %h
và AllowTcpForwarding no
sau phần khớp để buộc người dùng sftponly chroot đến nhà của họ. xin lưu ý rằng trận đấu phải (phải!) là phần cuối cùng trên cấu hình ssh và các tùy chọn sau đó là các tùy chọn chỉ dành cho người dùng phù hợp
ForceCommand internal-sftp -u 0077 -d /uploaddir
có thể làm nó cứng hơn bằng cách buộc một ô trên một thư mục tải lên. Kết hợp với 'ChrootDirectory`, nó tạo ra một môi trường tải lên bị cô lập, bị kiểm soát chặt chẽ. Phần thưởng lưu ý: thư mục mặc định và ô phải được đặt trong ForceCommand
, không phải trong lệnh Subsystem
, nếu bạn muốn chúng hoạt động.
Tôi khuyên bạn nên sử dụng một cách khéo léo.
Nó là một lớp vỏ bị hạn chế cho phép người dùng thực hiện những gì nó nghe giống như các tệp SCP cho máy chủ, nhưng không thực sự đăng nhập. Thông tin và mã nguồn tải xuống cho phần mềm có sẵn ở đây và các gói RPM được biên dịch sẵn có qua Kho lưu trữ EPEL YUM .
Sau khi cài đặt, bạn sẽ cần định cấu hình từng tài khoản người dùng mà bạn muốn hạn chế quyền truy cập để sử dụng trình bao bị hạn chế mới cài đặt. Bạn có thể thực hiện việc này một cách thủ công qua / etc / passwd hoặc sử dụng lệnh sau: usermod -s /usr/bin/scponly USERNAME
scponly
được THIẾT KẾ cho chính xác mục đích này.
Tôi sử dụng MySecureShell để làm điều này. Bạn có thể cấu hình các hạn chế khác quá.
https://github.com/mysecureshell/mysecureshell
Giới hạn kết nối chỉ với SFTP / SCP. Không có quyền truy cập vỏ.
Tôi đã tìm thấy một cách hay là sử dụng tính năng lệnh = "..." của tệp ủy quyền. (Đề xuất với tôi bởi trang này )
Lệnh bạn chạy sẽ là một lệnh kiểm tra các đối số bắt đầu bằng scp (và rsync).
Đây là tập tin ủy quyền:
# authorized_keys
command="/usr/local/bin/remote-cmd.sh" ssh-rsa.....== user@pewpew
Đây là nội dung của remote-cmd.sh:
#!/bin/bash
# /usr/local/bin/remote-cmd.sh
case $SSH_ORIGINAL_COMMAND in
'scp'*)
$SSH_ORIGINAL_COMMAND
;;
'rsync'*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Access Denied"
;;
esac
Tôi đoán có lẽ bạn vẫn cần bảo vệ tệp ủy quyền của người dùng, nhưng mục đích của tôi là có một khóa không có mật khẩu mà tôi có thể sử dụng để sao lưu, mà không phải tạo một người dùng hoàn toàn mới và có khóa không cung cấp vỏ (ok, dễ dàng)
~/.ssh/authorized_keys
, ~/.bashrc
(và bất cứ điều gì khác Bash thực thi) và chỉ ~/.ssh/rc
đọc cho người dùng. Nhưng nếu người dùng độc hại có quyền truy cập vào rsync hoặc sftp, anh ta vẫn có thể xóa ~/.bashrc
và tải lên một cái mới. Vì nó khó bảo vệ, tôi khuyên bạn nên chống lại phương pháp này ( command="..."
).
Thay đổi vỏ đăng nhập của người dùng thành một cái gì đó hạn chế, cho phép người dùng chỉ chạy scp , sftp-server và rsync , và nó cũng kiểm tra các đối số không an toàn không được phép (ví dụ: scp -S ... và rsync -e .. . không an toàn, xem tại đây: http://Exloit-db.com/Exloits/24795 ). Ví dụ cho shell đăng nhập hạn chế như vậy:
Bạn có thể muốn chạy một trong những thứ này trong một chroot hoặc trong một môi trường bị hạn chế khác (ví dụ: nsjail trên Linux), để vô hiệu hóa truy cập mạng và để kiểm soát (danh sách trắng) dễ dàng hơn những thư mục nào có thể được đọc và / hoặc ghi.
Tôi không khuyên bạn sử dụng command="..."
trong ~/.ssh/authorized_keys
, bởi vì không có bảo vệ bổ sung cẩn thận (như chmod -R u-w ~
cho người sử dụng) một người sử dụng độc hại có thể tải lên một phiên bản mới của ~/.ssh/authorized_keys
, ~/.ssh/rc
hay ~/.bashrc
, và do đó có thể bao gồm và thực hiện các lệnh tùy ý.
Đây không phải là giải pháp duyên dáng nhất, nhưng bạn có thể ném thứ gì đó như thế này vào người dùng .bashrc
if [ "$TERM" != "dumb" ]; then
exit
fi
Tôi đã phát hiện ra rằng người dùng SCP nhận được HẠN 'câm' và những người khác thường sẽ nhận được vt100.
Tôi tưởng tượng người dùng có thể tìm kiếm một .bashrc mới, điều này làm cho đây không phải là giải pháp tốt nhất, nhưng đối với một giải pháp nhanh và bẩn, điều này sẽ hoạt động
~/.bashrc
). Điều này cũng không ổn theo nghĩa là có thể các phiên bản mới hơn của OpenSSH sẽ đặt TERM
biến khác nhau hoặc một số cài đặt cấu hình sshd có thể ảnh hưởng TERM
.
ssh -o SetEnv TERM=dumb yourserver bash
??