sshd: sshd_config를 편집하지 않고 현재 세션에 AllowUsers 추가

sshd: sshd_config를 편집하지 않고 현재 세션에 AllowUsers 추가

현재 세션에 대해서만 IP 1.2.3.4에서 일시적으로 루트 액세스 권한을 부여하고 싶습니다(다음 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를 포함하세요 . 한 번에 두 서비스 중 하나만 실행할 수 있습니다. 올바른 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해당 사용자에게만 허용되고 다른 사용자에게는 허용되지 않는다는 것입니다.

관련 정보