首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sshd:为当前会话添加AllowUsers,而不编辑sshd_config

sshd:为当前会话添加AllowUsers,而不编辑sshd_config
EN

Unix & Linux用户
提问于 2022-12-01 15:12:39
回答 2查看 283关注 0票数 3

我希望临时从ip 1.2.3.4授予根访问权限,仅用于当前会话(直到下次sshd或服务器重新启动)。

我可以将它添加到sshd_config中,然后记住删除它:

代码语言:javascript
复制
AllowUsers root@1.2.3.4

但还有更好的方法吗?我是否可以更改当前运行的sshd守护进程的当前设置,而无需编辑配置文件?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2022-12-09 00:57:33

在FreeBSD中,rc系统提供了将标志传递给sshd守护进程的机制,即在启动/重新启动sshd之前设置sshd_flags变量。rc系统将查找文件名称/etc/rc.conf.d/sshd/*,并在任何“服务sshd”调用中创建所有此类文件。这使得在正确的目录中创建一个一次性的唯一文件名、重新启动服务、删除那个唯一的文件名都变得非常简单,我们就完成了。

据我所知,Linux缺乏一个专用目录,可以将任意数量的任意命名的文件放置到其中,以便配置特定守护进程的运行时行为。我试图模仿FreeBSD在(Ubuntu)中的机制,修改/etc/default/ssh,以便从特定位置(/etc/default/ssh.tmp.*)搜索源文件,但没有成功。一般来说,在我手头的Linux系统上,似乎/etc/default/ssh名义上有:

代码语言:javascript
复制
# 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文件更安全。此外,由于/etc/default/ssh的语法是shell语法,因此一旦感到相对安全,通过追加修改后的SSHD_OPTS值,以前为下一次调用而重写的SSHD_OPTS赋值将被覆盖,然后在/etc/default/ssh.safety被重命名为/etc/default/ssh后将其还原。

代码语言:javascript
复制
# cat << EOF > test.sh
cp -p /etc/default/ssh /etc/default/ssh.safety
printf 'SSHD_OPTS='\''-o "AllowUsers root@1.2.3.4"'\''\n' >> /etc/default/ssh
service sshd restart
mv /etc/default/ssh.safety /etc/default/ssh
EOF

所以从以下几个方面开始:

代码语言:javascript
复制
# 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...

和:

代码语言:javascript
复制
# 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=

然后加上:

代码语言:javascript
复制
# cat test.sh
cp -p /etc/default/ssh /etc/default/ssh.safety
printf 'SSHD_OPTS='\''-o "AllowUsers root@1.2.3.4"'\''\n' >> /etc/default/ssh
service ssh restart
mv /etc/default/ssh.safety /etc/default/ssh

我们可以:

代码语言:javascript
复制
# 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 root@1.2.3.4

...snip...

请注意,sshd是用我们想要的短期命令行选项运行的!

还请注意,/etc/default/ssh回到了其未更改的状态:

代码语言:javascript
复制
# 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=

这意味着下次我们:

代码语言:javascript
复制
# service ssh restart

我们将看到:

代码语言:javascript
复制
# 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
EN

Unix & Linux用户

发布于 2022-12-05 23:06:37

然后记得把它移走

马上把它拿掉,这样就没什么好记的了,也没什么好忘记的了。我是说:

  1. 编辑sshd_config,保存更改。
  2. 重新启动守护进程。
  3. 立即编辑sshd_config返回,保存更改。
  4. 不要重新启动守护进程。

通过这种方式,当前运行(即新启动的)守护进程使用临时配置,因为它是它读取的配置;但是,将来的守护进程将使用常规配置,因为配置文件已经被编辑回来了。除了当前正在运行的守护进程的内存之外,临时配置不再存在,因此只有在下一次sshd或服务器重新启动之前,才能完全按照您的要求进行配置。

(1)和(3)可以方便地从文本编辑器的单个实例中执行,而无需退出编辑器,只要您可以从另一个控制台执行(2)。如果您的文本编辑器提供“撤销”,那么使用它取消错误的风险,同时编辑回来。

备注:

  • 来自sshd的OpenSSH在接收挂起信号SIGHUP时重新读取它的配置文件,方法是使用启动时的名称和选项执行它自己。不管sshd of OpenSSH是作为systemd服务启动还是以其他方式启动,此方法都应该可以工作。
  • 重新启动(甚至停止) sshd 不影响现有连接。
票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/726964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档