AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-112625

zwol's questions

Martin Hope
zwol
Asked: 2020-10-03 12:28:47 +0800 CST

通过 systemd 套接字激活传递 8192 个套接字 - E2BIG 失败

  • 2

我正在尝试让 systemd 启动一个守护进程并将 8,192 个监听套接字传递给它。我有一个.service和.socket文件可以可靠地使用更多“正常”数量的侦听套接字,如下所示:

# a-daemon.socket
[Unit]
Description=A Daemon (sockets)
After=network.target

[Socket]
Accept=no
ListenStream=8192

# a-daemon.service
[Unit]
Description=A Daemon
After=network.target
Requires=a-daemon.socket

[Install]
WantedBy=multi-user.target

[Service]
Type=notify
ExecStart=/usr/local/sbin/a-daemon

但是如果我换成a-daemon.socket一个有 8,192ListenStream行的版本,每个 TCP 端口从 8192 到 16383(含)一个,那么守护程序将不再启动。套接字单元可以正常启动,但服务单元失败;我得到的唯一错误信息是

systemd[17563]: a-daemon.service: Failed to execute command: Argument list too long
systemd[17563]: a-daemon.service: Failed at step EXEC spawning /usr/local/sbin/a-daemon: Argument list too long

据我了解,这实际上不是参数 list的问题,因为 systemd 不会将套接字 fd 编号放在守护进程的命令行或类似的东西上。我猜这是同时打开文件数量限制的问题,所以我设置DefaultLimitNOFILE=32768了/etc/systemd/system.conf一个等效设置/etc/security/limits.conf并重新启动。没变。然后我把ExecStartPre=/usr/sbin/prlimit -n.service文件放进去,尝试重启,确认增加的限制已经生效:

prlimit[18134]: RESOURCE   DESCRIPTION                             SOFT      HARD UNITS
prlimit[18134]: NOFILE     max number of open files               32768     32768 files

但是服务仍然失败,同样的方式。现在我没有主意了。你能建议我可以尝试做些什么来完成这项工作吗?

(我知道监听 8,192 个连续的 TCP 端口是一件很奇怪的事情。请相信我,我有一个很好的理由,我不能分享。)

socket systemd max-file-descriptors
  • 1 个回答
  • 357 Views
Martin Hope
zwol
Asked: 2015-06-20 14:02:28 +0800 CST

UDel ntpd - 完全禁用时间服务器发现

  • 1

我将 UDel ntpd(版本 4.2.6.p5)配置为我的组织运营的三台服务器的客户端,(我认为)没有其他服务器。

server xx.yy.zz.1 iburst
server xx.yy.zz.2 iburst
server xx.yy.zz.3 iburst

restrict default ignore
restrict xx.yy.zz.1 nomodify notrap nopeer noquery
restrict xx.yy.zz.2 nomodify notrap nopeer noquery
restrict xx.yy.zz.3 nomodify notrap nopeer noquery

正常运行大约五分钟后,ntpq 报告守护程序发现并添加了另外两个时间服务器(也由我的组织运营,但不在他们的时间服务器官方列表中):

ntpq> pe
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*xx.yy.zz.1          aa.bb.cc.dd  2 u   16   64    1    0.157   -2.230   0.032
 xx.yy.zz.2          aa.bb.cc.dd  2 u   15   64    1    0.207   -2.191   0.032
 xx.yy.zz.3          aa.bb.cc.dd  2 u   14   64    1    0.211   -2.171   0.014
 xx.yy.zz.4         .INIT.       16 u    -   64    0    0.000    0.000   0.000
 xx.yy.zz.5         .INIT.       16 u    -   64    0    0.000    0.000   0.000

由于这些服务器不在地址白名单中(因为我不知道它们),客户端与它们通信的尝试显然失败了。

我不知道这到底是怎么发生的,但我从文档中得到的印象是服务器 A 可以通过某种方式告诉客户端“嘿,你也应该与服务器 B、C 和 D 交谈”。我发现的文档有很多关于各种方法的杂乱无章的措辞,但绝对没有关于如何控制它。

因此,问题是:我如何完全关闭它,以便客户端只尝试与配置文件中明确列出的服务器通信,无论如何?


根据请求:

# ntpq -pncrv | redact
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+xx.yy.zz.1      aa.bb.cc.dd  2 u   56 1024  377    0.177   -0.010   0.070
*xx.yy.zz.2      aa.bb.cc.dd  2 u  690 1024  377    0.237    0.028   0.046
+xx.yy.zz.3      aa.bb.cc.dd  2 u  226 1024  377    0.229    0.013   0.052
 xx.yy.zz.4      .INIT.      16 u    - 1024    0    0.000    0.000   0.000
 xx.yy.zz.5      .INIT.      16 u    - 1024    0    0.000    0.000   0.000
associd=0 status=061b leap_none, sync_ntp, 1 event, leap_event,
version="ntpd [email protected] Fri Apr 10 19:04:04 UTC 2015 (1)",
processor="x86_64", system="Linux/3.16.0-4-amd64", leap=00, stratum=3,
precision=-22, rootdelay=0.405, rootdisp=38.394, refid=128.2.1.21,
reftime=d951542d.a6db3cdc  Wed, Jul 15 2015 17:50:37.651,
clock=d95156df.0d2756da  Wed, Jul 15 2015 18:02:07.051, peer=9102, tc=10,
mintc=3, offset=0.009, frequency=-5.266, sys_jitter=0.024,
clk_jitter=0.030, clk_wander=0.003

# redact < /etc/ntp.conf
driftfile /var/lib/ntp/ntp.drift
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
server aa.bb.cc.1 iburst
server aa.bb.cc.2 iburst
server aa.bb.cc.3 iburst
restrict -4 default ignore
restrict -6 default ignore
restrict aa.bb.cc.1 nomodify notrap nopeer noquery
restrict aa.bb.cc.2 nomodify notrap nopeer noquery
restrict aa.bb.cc.3 nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1

我在这里看不到任何有关从 DHCP 获取其他服务器的信息。

configuration
  • 1 个回答
  • 89 Views
Martin Hope
zwol
Asked: 2014-07-24 11:56:11 +0800 CST

进程组A默认路由tun0、B默认路由tun1等

  • 1

我有一个带有N个隧道接口、tun0、等的 Linux 机器tun1。

我想进行设置,以便特定进程组A将其默认(且唯一)路由指向tun0. 同时,第二组进程B的默认(也是唯一)路由指向tun1,依此类推。A、B等不一定是 POSIX 意义上的“进程组”;理想情况下,配置将提前建立,之后,任何进程都可以在启动时声明自己是A或B或 ... 的成员。(如果只有运行 as 的进程root可以这样做,那也没关系。)

如果这些进程组中的任何一个曾经将流量发送到错误的隧道接口或真正的网络接口,这就是一个错误eth0。如果同一主机上的不相关进程曾经将流量发送到任何隧道接口,这也是一个错误;他们应该继续eth0直接使用。

我的印象是这可以通过“网络名称空间”来完成,但我一直无法弄清楚如何;我要求分步说明。

linux
  • 1 个回答
  • 210 Views
Martin Hope
zwol
Asked: 2014-07-09 07:53:12 +0800 CST

Linux NFLOG - 文档,来自 C 的配置

  • 6

几个不同的地方(例如http://wiki.wireshark.org/CaptureSetup/NFLOG)建议使用 Linux 的“NFLOG”防火墙模块来捕获由特定 UID 生成的数据包,如下所示:

# iptables -A OUTPUT -m owner --uid-owner 1000 -j CONNMARK --set-mark 1
# iptables -A INPUT -m connmark --mark 1 -j NFLOG --nflog-group 30 
# iptables -A OUTPUT -m connmark --mark 1 -j NFLOG --nflog-group 30 
# dumpcap -i nflog:30 -w uid-1000.pcap

我还没有找到任何关于它是如何工作的文档(特别是,netfilter.org有很多写得很糟糕的库 API 文档,据我所知,没有任何关于实际内核级防火墙的语义规则),所以我有几个问题:

  1. 有没有该死的文件,它藏在哪里?

  2. CONNMARK的东西真的有必要吗?也就是说,这也可以吗?

    # iptables -A INPUT -m owner --uid-owner 1000 -j NFLOG --nflog-group 30 
    # iptables -A OUTPUT -m owner --uid-owner 1000 -j NFLOG --nflog-group 30
    
  3. 是否需要运行“ulogd”才能使其正常工作?

  4. 有没有办法告诉内核为我选择一个未分配的组号并告诉我它是什么?

  5. 有没有办法告诉内核这些过滤规则应该在进程 X 终止时自动删除?(进程 X不会以 uid 1000 运行。)

  6. 大概该iptables命令会进行一些特殊ioctl调用或配置防火墙。是否有一个 C 库可用于在程序中执行相同的操作(即 Q4 中的“进程 X”)?

linux
  • 2 个回答
  • 11071 Views
Martin Hope
zwol
Asked: 2013-10-01 10:44:41 +0800 CST

EC2 实例——不止一种启动模式(维护/生产)

  • 1

据我了解,为了使用 EC2 现货实例,必须将实例的 AMI 配置为在启动时立即开始执行它应该执行的任何操作,并继续执行直到完成或实例终止。

这本身不是问题,但我需要定期使用新软件和/或配置脚本更新 AMI,所以我偶尔需要调出一个常规实例,我可以通过 ssh 进入和修改,这不会与立即开始尝试执行操作的启动脚本配合得很好(例如,当我为一堆计算工作人员更新 AMI 时,相关的控制服务器可能会关闭)。

有没有办法为同一个 AMI 配置两种(或更多)启动模式?有点像老式的 SysV 运行级别……事实上,它可以很好地用于这个应用程序,除了我看不到任何从 EC2 Web 或 CLI 界面控制内核命令行的方法。

(AMI 内的操作系统是 Linux,如果这很重要的话。)

amazon-ec2
  • 1 个回答
  • 153 Views
Martin Hope
zwol
Asked: 2013-09-19 09:40:17 +0800 CST

ssh:一个非 root 用户但不是另一个用户的“PAM 帐户配置拒绝访问”

  • 30

在我正在初始化的 VM 上,我能够通过具有公钥身份验证的 SSH 以一个非 root 用户 ( admin) 而不是另一个 ( ) 身份登录。tbbscraper我可以在任何日志文件中找到的唯一错误消息是

Sep 18 17:21:04 [REDACTED] sshd[18942]: fatal: Access denied for user tbbscraper by PAM account configuration [preauth]

在客户端,综合症是

$ ssh -v -i [REDACTED] tbbscraper@[REDACTED]
...
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: [REDACTED]
debug1: Authentications that can continue: publickey
debug1: Trying private key: [REDACTED]
debug1: read PEM private key done: type RSA
Connection closed by [REDACTED]

将 'tbbscraper' 更改为 'admin' 允许成功登录:debug1: Authentication succeeded (publickey).出现而不是“连接关闭”消息。

这似乎不是权限问题...

# for x in admin tbbscraper
> do ls -adl /home/$x /home/$x/.ssh /home/$x/.ssh/authorized_keys
> done
drwxr-xr-x 3 admin admin 4096 Sep 18 17:19 /home/admin
drwx------ 2 admin admin 4096 Sep 18 16:53 /home/admin/.ssh
-rw------- 1 admin admin  398 Sep 18 17:19 /home/admin/.ssh/authorized_keys
drwxr-xr-x 3 tbbscraper tbbscraper 4096 Sep 18 17:18 /home/tbbscraper
drwx------ 2 tbbscraper tbbscraper 4096 Sep 18 17:18 /home/tbbscraper/.ssh
-rw------- 1 tbbscraper tbbscraper  398 Sep 18 17:18 /home/tbbscraper/.ssh/authorized_keys

# cmp /home/{admin,tbbscraper}/.ssh/authorized_keys ; echo $?
0

... 也不是 PAM 级别的访问控制问题 ...

# egrep -v '^(#|$)' /etc/security/*.conf
#

...因此,对类似问题的现有答案似乎都不适用。我得到的唯一其他证据是:

root@[REDACTED] # su - admin
admin@[REDACTED] $

但

root@[REDACTED] # su - tbbscraper
su: Authentication failure
(Ignored)
tbbscraper@[REDACTED] $

这表明存在一些更大规模的 PAM 问题,但我在/etc/pam.d. 有任何想法吗?

虚拟机是 EC2 实例,操作系统是 Debian 7.1(亚马逊的现成 AMI)。

ssh
  • 7 个回答
  • 106405 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve