【问题标题】:Lines commented out in Linux configuration filesLinux 配置文件中注释掉的行
【发布时间】:2020-01-06 03:33:00
【问题描述】:

我试图找出为什么在 Linux 服务配置文件中几乎所有的行都被注释掉了。我找不到答案。

那么有效的配置是什么?它是否在系统中的某处硬编码并且配置文件的更改(例如通过取消注释和更改值)通过覆盖默认配置(在注释掉的行中)应用?

取消注释这些行的结果是什么?据我所知,它应该什么都不做。那为什么他们被注释掉了呢?

我知道这听起来有点傻,但我真的很想知道为什么要实现这样的机制,这有点不直观。

这个问题适用于很多服务,例如安装后的 SSH 服务。

【问题讨论】:

  • 开发人员通常会提供注释行,以便用户通过取消注释他们需要的特定行来更轻松地配置产品。您可以使用grep -v '^#' /etc/ssh/ssh_config | grep . 快速查看活动线路。
  • 是的,我知道这一点,但我的观点是:系统从什么位置获取有关服务配置的默认值的信息,用户有没有办法访问它们?还是只是由创建服务的开发人员硬编码?我的意思是,有一些默认设置存储在“某处”。在重新启动服务时,解析器会检查配置文件的内容并对未注释的行做出“反应”,然后用配置文件中设置的默认值覆盖这些默认值。我说的对吗?
  • 产品应该(并且在许多情况下)在其文档中提供有关默认值的信息。通常有四步默认:①硬编码,②配置文件覆盖,③环境变量覆盖,④命令行参数覆盖。因此,如果您提供命令行参数,这将优先。否则将使用特定环境变量或配置文件中的内容。如果没有找到,则使用硬编码的默认值。
  • man sshd 我发现:command line option: -p port: Specifies the port on which the server listens for connections (default 22). […] Ports specified in the configuration file with the Port option are ignored when a command-line port is specified.
  • 谢谢,现在一切都清楚了,至少在这种情况下 :)

标签: linux ssh comments config-files


【解决方案1】:

在配置文件中保留注释掉的条目有很多原因。例如知道我可以使用哪些可能的配置,或者让人们知道如果他们把配置弄乱了会有故障保护。知道有默认值可以帮助你,以防更新配置文件时出错。 例如如果我决定更新 ListenAddress 并将其设置为 127.0.0.1,我可以简单地注释掉该条目以恢复标准行为,而不是记住插入的特定条目。

在其他情况下,您看到的值不是默认值,而是可能规则的建议。

例如从我的 sshd_config 文件中

# Example of overriding settings on a per-user basis
#Match User anoncvs
#   X11Forwarding no
#   AllowTcpForwarding no
#   PermitTTY no
#   ForceCommand cvs server

【讨论】:

  • 谢谢你的回答,我想你错过了一点,但我会更清楚地解释我的。让我们看看例如X11转发。该行默认被注释掉。 1. 如果这一行被注释掉,那么系统就不会意识到这一点——至少从我的角度来看是这样。或者是吗? 2. 如果系统知道尽管 sshd_config 文件中的行被注释掉,但它被设置为“no”,这个值存储在哪里? 3. 当我简单地取消注释该行时会发生什么?它不应该改变任何东西,X11Forwarding 仍然应该设置为“no”。
  • # X11Forwarding no 行记录了该行可用于(不带井号)禁用 X11 转发(某些用户可能想要)。在这种情况下,默认值可能是 ›enabled‹。因此,只要该行保持注释掉,默认就处于活动状态。
  • @Alfe 好的,那么指定 SSH 使用的端口的行呢?默认是 '# Port 22',SSH 的默认端口也是 22。如果不在这个特定的配置文件中,这个值存储在哪里?
  • 在 ssh 守护进程的可执行文件中有一个默认内置,所以如果配置文件没有指定覆盖,则使用 22。在提供的配置文件中可能有一行# Port 22 来明确如何覆盖默认值(即通过放置类似Port 8022 的行)但是因为提供不知道用什么来覆盖22(因为这完全是对用户来说,没有任何特定的值足以将其放入模板配置中),他们只是再次声明# Port 22Port 22 行当然不会改变任何事情。
  • “端口 22 行当然不会改变任何东西。”我认为它应该改变一些东西,但只能在后台 - 守护进程可能(只是猜测)覆盖(或只是比较,取决于可执行文件中硬编码的内容,我没有检查)配置文件中的值硬编码一。无论如何,服务的结果将是相同的,这些只是理论上的术语。不过,谢谢,现在一切都清楚了:)
【解决方案2】:

另外,让我们看一个取自 apache2.conf 的示例:

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 5

其结构不同,因为注释行仅包含对以下选项的说明。 但是,在默认安装的 SSH 中,所有行都被注释掉了,甚至包括基本设置作为服务使用的端口号。

【讨论】:

    猜你喜欢
    • 2015-01-02
    • 1970-01-01
    • 2011-06-01
    • 2011-03-16
    • 2013-01-08
    • 2015-03-17
    • 2017-06-02
    • 2015-12-23
    • 2023-03-12
    相关资源
    最近更新 更多