sshd:sshd_configを編集せずに現在のセッションにAllowUsersを追加する

sshd:sshd_configを編集せずに現在のセッションにAllowUsersを追加する

現在のセッションに対してのみIP 1.2.3.4で一時的にrootアクセスを許可したい(次のSSHDまたはサーバーが再起動されるまで)

に追加してからsshd_config削除することを忘れないでください。

AllowUsers [email protected]

しかし、もっと良い方法がありますか?設定ファイルを編集しなくても、現在実行中のsshdデーモンの現在の設定を変更できますか?

答え1

その後、削除することを忘れないでください

覚えたり忘れたりしないように、すぐに削除してください。私の言葉は:

  1. 編集sshd_configして変更を保存します。
  2. デーモンを再起動してください。
  3. まもなく編集に戻り、sshd_config変更を保存します。
  4. 欲しくないデーモンを再起動してください。

これにより、現在実行されている(つまり新しく起動された)デーモンは読み取り構成であるため一時構成を使用しますが、構成ファイルが再編集されたため、将来のデーモンは通常の構成を使用します。現在実行されているデーモンのメモリーを除いて、一時構成はもう存在しないので、次回またはsshdサーバーを再始動するまで必要に応じてください。

別のコンソールで(2)を実行できる場合は、(1)と(3)はエディタを終了せずにテキストエディタの単一インスタンスで簡単に実行できます。テキストエディタで「元に戻す」機能を提供している場合は、それを使用して再編集するときに間違える危険性を排除できます。

メモ:

  • sshdOpenSSH が SIGHUP シグナルを受け取ると、起動した名前とオプションで自己実行して設定ファイルを再読み込みします。sshdこの方法は、OpenSSHがシステムサービスとして起動されているかどうかに関係なく機能する必要があります。

  • 再起動(または停止)sshd 既存の接続には影響しません。

答え2

FreeBSDでは、rcシステムは起動/再起動前に変数を設定sshdしてデーモンプロセスにフラグを渡すメカニズムを提供します。システムはファイル名/etc/rc.conf.d/sshd/*を探し、「service sshd」呼び出しからそのファイルをすべて取得します。これにより、正しいディレクトリにワンタイムの一意のファイル名を作成し、サービスを再起動し、その一意のファイル名を削除することが非常に簡単になります。これで作業が完了します。sshd_flagssshdrc

私が知っている限り、Linuxには特定のデーモンのランタイム動作を設定するために任意の名前のファイルを配置できる専用ディレクトリはありません。特定の場所()でソースファイルを取得するために/ etc / default / sshを変更して(Ubuntu)LinuxでFreeBSDメカニズムを模倣しようとしましたが、/etc/default/ssh.tmp.*成功しませんでした。一般的に、私が利用できるLinuxシステムには、/etc/default/ssh名目上次のものがあるようです。

# Default settings for openssh-server. This file is sourced by /bin/sh from
# /etc/init.d/ssh.

# Options to pass to sshd
SSHD_OPTS=

一部のシステムでは、ここで重要な変数名があるように見えるOPTIONSので、systemdサービスファイルを確認してsshd確認してください。

計画Aが機能しなかったため、期待値を下げて計画Bを選択しました。これは、基本的にコンテンツがないsshd_configため、必要なランタイムオプションを追加することがおそらく追加するよりも優れていることを除いて、計画の変更と本質的に同じです。/etc/default/ssh必須ランタイムオプションはより安全ですか/etc/ssh/sshd_config?さらに、構文はシェル構文であるため、SSHD_OPTSを追加して以前に割り当てた変更値は、次の呼び出しで上書きされ、再度名前が変更されると復元されるため、/etc/default/ssh比較的安全な感じです。SSHD_OPTS/etc/default/ssh.safety/etc/default/ssh

# cat << EOF > test.sh
cp -p /etc/default/ssh /etc/default/ssh.safety
printf 'SSHD_OPTS='\''-o "AllowUsers [email protected]"'\''\n' >> /etc/default/ssh
service sshd restart
mv /etc/default/ssh.safety /etc/default/ssh
EOF

だから:

# service ssh status
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2022-12-08 16:36:00 PST; 51s ago
  Process: 43364 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
 Main PID: 43367 (sshd)
    Tasks: 1 (limit: 9830)
   CGroup: /system.slice/ssh.service
           └─43367 /usr/sbin/sshd -D

...snip...

そして:

# cat /etc/default/ssh 
# Default settings for openssh-server. This file is sourced by /bin/sh from
# /etc/init.d/ssh.

# Options to pass to sshd
SSHD_OPTS=

次に、次を使用します。

# cat test.sh
cp -p /etc/default/ssh /etc/default/ssh.safety
printf 'SSHD_OPTS='\''-o "AllowUsers [email protected]"'\''\n' >> /etc/default/ssh
service ssh restart
mv /etc/default/ssh.safety /etc/default/ssh

私たちは次のことができます。

# sh test.sh
# service ssh status
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2022-12-08 16:37:42 PST; 3min 2s ago
  Process: 54918 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
 Main PID: 54923 (sshd)
    Tasks: 1 (limit: 9830)
   CGroup: /system.slice/ssh.service
           └─54923 /usr/sbin/sshd -D -o AllowUsers [email protected]

...snip...

これは、sshd私たちに必要な短期コマンドラインオプションを使用して実行されていることに注意してください。

また、/etc/default/ssh変更されていない状態に戻ります。

# cat /etc/default/ssh 
# Default settings for openssh-server. This file is sourced by /bin/sh from
# /etc/init.d/ssh.

# Options to pass to sshd
SSHD_OPTS=

これは次回の意味です。

# service ssh restart

私たちは次のことを見るでしょう:

# service ssh status
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2022-12-08 16:43:56 PST; 7s ago
  Process: 44890 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
 Main PID: 44896 (sshd)
    Tasks: 1 (limit: 9830)
   CGroup: /system.slice/ssh.service
           └─44896 /usr/sbin/sshd -D

ネイキッド在庫サービスに戻りますsshd

繰り返しますが、これは本質的に修正と同じトリックです/etc/ssh/sshd_config。ちょうどsshd_config混乱している、削除された、または名前が変更された場合、回復するのは、同様のファイルから回復するよりも難しいかもしれません/etc/default/ssh/etc/default/ssh基本的に空であるため、rm最悪の場合、sshd賢いトリックを試す前の実行方法に簡単に戻すことができます。

答え3

独自のユニットファイルを作成し、必要な変更をすべて含む他のファイルをmysshd.serviceポイントしてsshd_config実行します。Conflicts=sshd.service正しいsshdサービスを停止するには、aを含めてください。一度に 2 つのサービスのうち 1 つしか実行できません。正しい sshd サービスが再起動すると、mysshd が停止します。

以下のようにRAWファイル-oにオプションを追加して使用することもできます。彼らは最初に考慮されます。 (この例はの出力から抽出されました。これは異なる分布によって異なる場合があります。)ExecStart=sshd_configsystemctl cat sshd

cat >/etc/systemd/system/mysshd.service <<\!
[Unit]
Description=my let root in OpenSSH server daemon
Conflicts=sshd.service
[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY -o 'AllowUsers [email protected]'
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
!
systemctl daemon-reload
systemctl start mysshd

部屋の象は、追加がAllowUsers x@yそのユーザーにのみ許可され、他のユーザーには許可されません。

関連情報