일반 사용자로 sshd를 실행할 수 있습니까?


39

sshd고유 한 구성 파일을 사용하여 권한이없는 포트 (예 : 2222) 에서 두 번째 인스턴스 를 시작하려고 합니다.

분명히 sshd프로세스는 데몬을 setuid실행하는 사용자 이외의 사용자로 로그인 할 수 없습니다 sshd.

그러나 sshd현재 실행중인 사용자 에게 작동하는 작동중인 데몬 을 가질 수 있습니까? 내 유스 케이스의 경우 이것은 좋을 것입니다.

sshd자체 구성 파일과 호스트 키로 인스턴스를 부팅하려고 시도했지만 sshd프로세스가 시작되었지만 (일부 명령과 같이 루트가 아닌 것에 대한 불만은 없음) 해당 포트에 연결하려고하면 sshd프로세스가 종료됩니다.

$ /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

debug1: setgroups() failed: Operation not permitted라인은 분명 튀어하지만 연결을 허용하려고 할 때까지 죽지 않습니다.

답변:


35

약간의 파고 난 후에 나는 그것을 알아 냈습니다.

새 파일이있는 sshd -f ~/.ssh/sshd_config위치 에서 프로세스를 시작하십시오 /.ssh/sshd_config. 다른 옵션 (예 : 다른 호스트 키, 다른 포트 등) 중에서 줄을 추가해야합니다 UsePrivilegeSeparation no. 이렇게하면 sshd프로세스가 전화를 걸 setuid거나 시도하지 못하게하고 setgid사용자로 계속 실행하고 사용자로 연결을 수락 할 수 있습니다.

편집 : 다른 사람이 그것을 알아 낸 후 잠시 후에이 링크를 트윗하여 이것이 올바른 방법인지 확인합니다 : http://cygwin.com/ml/cygwin/2008-04/msg00363.html


1
로 설정 UsePam하여 PAM을 비활성화해야 합니다 no.
haridsv

@bjeanes 당신을 위해 작동합니까? sshd_config 파일을 공유 할 수 있습니까? 내가 우분투를 시도 할 때 "Set"은 올바른 명령이 아니라고 불평합니다.
jojo

@jojo이 구성을 실행하지 않으므로 공유 할 파일이 없습니다. 알려진 작업 파일로 시작하여 필요에 맞게 조정해야합니다.
Bo Jeanes

1
PAM 비활성화는 특정 경우에만 해당됩니다. pam 설정을 망설이지 않고 Fedora에서 작동합니다. 모든 것을 멋지게 만들기 위해 변경해야 할 다른 아이디어에 대한 답변은 링크 된 이메일 메시지를 참조하십시오. 나는 그것을 고정 표시기 작동했다 얼마나 빨리 내 노트를 업데이트 할 수 있습니다 : hub.docker.com/r/aosqe/ssh-git-server (을 읽기 전에 며칠을 허용하십시오)
akostadinov

6

이 스레드의 업데이트로 버전 7.5의 OpenSSH는 UsePrivilegeSeparation 옵션을 더 이상 사용하지 않으므로 권한 분리를 비활성화 할 수 없습니다. SSHD를 사용자로 실행하는 것이 불가능한 것으로 보입니다.

https://www.openssh.com/releasenotes.html을 참조 하십시오


서버 구성에 따라 그렇지 않을 수도 있습니다. 내 sshd 구성 파일에 "UsePrivilegeSeparation yes"또는 "UsePrivilegeSeparation sandbox"를 표시하면서 일반 사용자로 sshd를 실행하는 데 아무런 문제가 없습니다.
a3nm

글쎄요, 아직 시도하지는 않았지만 지금은 "고정"된 것 같습니다 : "sshd (8) : 루트 권한없이 시작하면 권한 분리 사용자 나 경로가 필요하지 않습니다. 회귀 테스트를보다 쉽게 ​​실행할 수 있습니다. 파일 시스템을 건드리지 않고
Daniel Santos

2

일반 사용자로 sshd 서비스를 실행할 가능성을 자세히 확인했습니다. 프로그램 버전의 세부 사항 :

sshd 버전 OpenSSH_7.4, OpenSSL 1.0.2k

마지막으로 많은 오류를 해결 한 후 SSHD가 다음 오류로 중단되는 지점에 도달했습니다.

루트가 아닌 사용자가 로그인 레코드를 쓰려고 시도 (중지)

소스 코드를 변경하지 않고 문제를 해결할 수 있는지 확인하기 위해 소스 코드를 확인했습니다. 여기 코드를 참조 하십시오 . 프로그램을 중단시키는 코드의 일부 :

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

여기에서 사용자 권한을 확인하여 (geteuid() != 0)문제를 일으 킵니다.


1

@magiclantern이 위에서 언급 것을 가정하고 패치하고 싶지 않다고 가정하면 Dropbearsshd 와 같은 것이 효과가 있습니까? 풋 프린트가 더 작고 기능 / 구성이 더 적은 ssh 서버를 원하는 많은 임베디드 장치에서 사용됩니다.


1
dropbear -E -F -R -w -g -a -p 2222 -P ./dbearPID # 트릭을 수행합니다
dotbit

1

다음은 Bo Jeanes의 답변을 바탕으로 한 userland bash sript입니다.

  • 집에서 작업 디렉토리 만들기
  • 작업 디렉토리에 서버 키 생성
  • 작업 디렉토리에있는 pid 파일로 기본 구성 파일 생성
  • SSH 데몬 시작

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 2018 년 11 월 20 일
  • pam auth (동일한 로컬 및 원격 사용자로 테스트)

"debug1 : setgroups () 실패 : 작업이 허용되지 않습니다"
도트 비트

좋은 해결책이지만 명령을 더 잘 보이게 만들어야합니다. 추한.
MAChitgarha
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.