sshdを通常のユーザーとして実行することは可能ですか?


39

私はsshd、独自の構成ファイルを使用して、非特権ポート(2222など)で2番目のインスタンスを起動することを目指しています。

明らかに、この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任意のやろうとしてから、プロセスをsetuidsetgid電話をして、それはあなたのユーザーとして実行を継続し、ユーザーとして接続を受け入れることができます。

編集:他の誰かが私にこのリンクをツイートしたことを理解した後、これがこれを行う正しい方法であることを確認しました:http : //cygwin.com/ml/cygwin/2008-04/msg00363.html


1
また、に設定UsePamしてPAMを無効にする必要がありnoます。
haridsv

@bjeanesはあなたのために働きますか?sshd_configファイルを共有できますか?私がubuntuで試してみると、「Set」は私にとって有効なコマンドではないと文句を言います。
ジョジョ

@jojoこの構成は実行しないので、共有するファイルはありません。既知の作業ファイルから始めて、ニーズに合わせて調整する必要があります。
ボージーンズ

1
PAMを無効にするのは、特定の場合のみです。Fedoraでpam設定をいじることなく動作します。すべてのことをうまく行うために他に何を変更する必要があるかについてのいくつかのアイデアについては、回答のリンクされた電子メールメッセージを参照してください。dockerで動作するようになったメモをすぐに更新します: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):ルート権限なしで起動した場合、権限分離ユーザーまたはパスが存在する必要はありません。回帰テストの実行を容易にします。ファイルシステムに触れることなく。」
ダニエルサントス

2

通常のユーザーとしてsshdサービスを実行する可能性を詳細に確認しました。プログラムのバージョンの詳細:

sshdバージョンOpenSSH_7.4、OpenSSL 1.0.2k

最後に、多くのエラーを解決した後、SSHDが次のエラーで中断するポイントに到達しました。

非rootユーザーによるログインレコードの書き込みの試行(中止)

ソースコードを変更せずに問題を解決できるかどうか、ソースコードを確認しました。こちらのコードをご覧ください。プログラムの中断を引き起こすコードの一部:

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

これによりユーザー権限がチェックされ(geteuid() != 0)、ここで問題が発生します。


1

@magiclanternが上記のことに注意し、パッチsshdを適用したくないと仮定すると、Dropbearのようなものが機能しますか?より小さなフットプリント(およびより少ない機能/構成)のsshサーバーを必要とする多くの組み込みデバイスで使用されます。


1
dropbear -E -F -R -w -g -a -p 2222 -P ./dbearPID#トリックん
dotbit

1

Bo Jeanesの回答に基づくユーザーランドの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を()が失敗しました:操作が許可されていない」
dotbit

良い解決策ですが、コマンドの外観を良くする必要があります。醜い。
MAChitgarha
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.