Có thể chạy sshd như một người dùng bình thường?


39

Tôi đang hướng tới khởi động một phiên bản thứ hai sshdtrên một cổng không có đặc quyền (ví dụ 2222) với tệp cấu hình của riêng tôi.

Rõ ràng, sshdquá trình không thể setuidđăng nhập với tư cách người dùng khác ngoài người đang chạy sshddaemon rõ ràng là không thể.

Tuy nhiên, có thể có một sshdtrình nền hoạt động sẽ hoạt động cho người dùng hiện đang chạy không? Đối với trường hợp sử dụng của tôi, điều này sẽ ổn.

Tôi đã thử khởi động một sshdcá thể với tệp cấu hình và khóa máy chủ của riêng tôi và sshdquá trình khởi động (không có khiếu nại về việc không được root, như một số lệnh), tuy nhiên khi tôi cố gắng kết nối với cổng đó, sshdquá trình sẽ chết.

$ /usr/sbin/sshd -dD -h .ssh/id_rsa -p 2222 
debug1: sshd version OpenSSH_5.6p1
debug1: read PEM private key done: type RSA
debug1: private host key: #0 type 1 RSA
debug1: setgroups() failed: Operation not permitted
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-dD'
debug1: rexec_argv[2]='-h'
debug1: rexec_argv[3]='.ssh/id_rsa'
debug1: rexec_argv[4]='-p'
debug1: rexec_argv[5]='2222'
debug1: Bind to port 2222 on 0.0.0.0.
Server listening on 0.0.0.0 port 2222.
debug1: Bind to port 2222 on ::.
Server listening on :: port 2222.
debug1: fd 6 clearing O_NONBLOCK
debug1: Server will not fork when running in debugging mode.
debug1: rexec start in 6 out 6 newsock 6 pipe -1 sock 9
debug1: inetd sockets after dupping: 5, 5
Connection from ::1 port 57670
debug1: Client protocol version 2.0; client software version OpenSSH_5.6
debug1: match: OpenSSH_5.6 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.6
debug1: list_hostkey_types: 
No supported key exchange algorithms
debug1: do_cleanup
debug1: do_cleanup
debug1: audit_event: unhandled event 12

Đường debug1: setgroups() failed: Operation not permitteddây rõ ràng bị kẹt, nhưng nó không chết cho đến khi nó cố chấp nhận kết nối.

Câu trả lời:


35

Sau một chút đào bới xung quanh tôi đã tìm ra nó.

Bắt đầu quá trình với sshd -f ~/.ssh/sshd_confignơi /.ssh/sshd_configlà một tập tin mới mà bạn đã tạo. Trong số các tùy chọn khác (chẳng hạn như khóa máy chủ khác, cổng khác, v.v.), bạn cần thêm dòng UsePrivilegeSeparation no. Điều này sẽ ngăn sshdquá trình cố gắng thực hiện bất kỳ setuidhoặc setgidcuộc gọi nào và cho phép nó tiếp tục chạy với tư cách là người dùng của bạn và chấp nhận kết nối với tư cách là người dùng của bạn.

EDIT: Một lát sau khi phát hiện ra ai đó đã tweet liên kết này với tôi, điều này xác nhận đây là cách chính xác để làm điều này: http://cygwin.com/ml/cygwin/2008-04/msg00363.html


1
Bạn cũng cần tắt PAM bằng cách cài đặt UsePamthành no.
haridsv

@bjeanes nó có hiệu quả với bạn không? bạn có thể chia sẻ tập tin sshd_config của bạn? nó phàn nàn "Set" không phải là một lệnh hợp lệ đối với tôi khi tôi thử trên Ubuntu.
jojo

@jojo Tôi không chạy cấu hình này vì vậy tôi không có tệp để chia sẻ. Bạn sẽ phải bắt đầu với một tệp làm việc đã biết và điều chỉnh theo nhu cầu của bạn.
Bo Jeanes

1
Điều vô hiệu hóa PAM chỉ dành cho các trường hợp cụ thể. Hoạt động cho tôi trên Fedora mà không gây rối với cài đặt pam. Xem thông báo email được liên kết trong câu trả lời để biết thêm ý tưởng những gì khác cần phải thay đổi để có được mọi thứ tốt đẹp. Tôi sẽ cập nhật sớm các ghi chú của mình về cách tôi làm cho nó hoạt động cho docker : hub.docker.com/r/aosqe/ssh-git-server (vui lòng cho phép một vài ngày trước khi đọc nó)
akostadinov

6

Là một bản cập nhật cho chủ đề này, OpenSSH trong phiên bản 7.5 không dùng tùy chọn UsePriv đặc biệt, không thể vô hiệu hóa phân tách đặc quyền. Có vẻ như việc chạy SSHD như một người dùng bây giờ là không thể.

Xem https://www.openssh.com/releasenotes.html


Tùy thuộc vào cấu hình máy chủ, điều này có thể không phải là trường hợp. Tôi không gặp vấn đề gì khi chạy sshd như một người dùng bình thường trong khi chỉ ra "UsePrivilegeSeparation yes" hoặc "UsePrivilegeSeparation sandbox" trong tệp cấu hình sshd của tôi.
a3nm

Chà, tôi chưa thử nó, nhưng tôi nghĩ bây giờ nó đã được "sửa": "sshd (8): khi bắt đầu không có quyền root, không yêu cầu người dùng tách đặc quyền hoặc đường dẫn tồn tại. Làm cho việc chạy thử nghiệm hồi quy dễ dàng hơn mà không cần chạm vào hệ thống tập tin. "
Daniel Santos

2

Tôi đã kiểm tra chi tiết khả năng chạy dịch vụ sshd như một người dùng bình thường. Chi tiết phiên bản của chương trình:

phiên bản sshd OpenSSH_7.4, OpenSSL 1.0.2k

Cuối cùng sau khi giải quyết được nhiều lỗi, tôi đã đạt đến điểm SSHD đã hủy bỏ với lỗi sau:

Cố gắng ghi hồ sơ đăng nhập bởi người dùng không root (hủy bỏ)

Tôi đã kiểm tra mã nguồn để xem liệu có thể giải quyết vấn đề mà không thay đổi mã nguồn hay không. Xem mã ở đây . Một số phần gây ra phá thai của chương trình:

#ifndef HAVE_CYGWIN
    if (geteuid() != 0) {
        logit("Attempt to write login records by non-root user (aborting)");
        return (1);
    }
#endif

Nó kiểm tra đặc quyền người dùng bởi (geteuid() != 0)và ở đây gây ra vấn đề.


1

Giả sử những gì @magiclogio đã lưu ý ở trên và giả sử bạn không muốn vá sshdsẽ có thứ gì đó giống như Dropbear có hiệu quả với bạn không? Nó được sử dụng trong nhiều thiết bị nhúng muốn có một máy chủ ssh có dấu chân nhỏ hơn (và ít tính năng / cấu hình hơn).


1
dropbear -E -F -R -w -g -a -p 2222 -P ./dbearPID # thực hiện thủ thuật
dotbit

1

Dưới đây là một chuỗi bash userland dựa trên câu trả lời của Bo Jeanes rằng:

  • Tạo dir làm việc tại nhà
  • tạo khóa máy chủ trong thư mục làm việc
  • tạo tập tin cấu hình cơ bản với tập tin pid nằm trong thư mục làm việc
  • khởi chạy SSH daemon

mkdir ${HOME}/custom_ssh
ssh-keygen -f ${HOME}/custom_ssh/ssh_host_rsa_key -N '' -t rsa
ssh-keygen -f ${HOME}/custom_ssh/ssh_host_dsa_key -N '' -t dsa
echo "Port 2222
HostKey ${HOME}/custom_ssh/ssh_host_rsa_key
HostKey ${HOME}/custom_ssh/ssh_host_dsa_key
AuthorizedKeysFile  .ssh/authorized_keys
ChallengeResponseAuthentication no
UsePAM yes
Subsystem   sftp    /usr/lib/ssh/sftp-server
PidFile ${HOME}/custom_ssh/sshd.pid" > ${HOME}/custom_ssh/sshd_config
/usr/bin/sshd -f ${HOME}/custom_ssh/sshd_config
echo "
--------
Process ID : ${HOME}/custom_ssh/sshd.pid
-------"
  • OpenSSH_7.9p1, OpenSSL 1.1.1a ngày 20 tháng 11 năm 2018
  • pam auth (được thử nghiệm với cùng một người dùng cục bộ và từ xa)

Tôi vẫn thấy: "debug1: setgroups () không thành công:
Thao tác

Giải pháp tốt, nhưng bạn nên làm cho các lệnh trông tốt hơn. Xấu xí.
MAChitgarha
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.