我有一台 Debian 机器,它收到警告(通过 Tiger 自动审计器)rcp.statd正在监听某某套接字。谷歌搜索显示rpc.statd是 NFS 使用的守护进程。据我所知,我没有使用(也没有安装)任何与 NFS 相关的东西。
什么会安装/启动这个服务,我需要做什么来禁用适当的rcp.statdNFS 守护进程?
StackOverflow 上有一个关于为守护进程提供更好的锁(由Eduardo Fleury合成)的很好的答案,该锁不依赖于守护进程的通用 PID 文件锁定机制。关于为什么 PID 锁定文件有时会导致问题,那里有很多很好的评论,所以我不会在这里重新讨论它们。
简而言之,该解决方案依赖于 Linux 抽象命名空间域套接字,它通过名称为您跟踪套接字,而不是依赖于文件,文件在守护进程被 SIGKILL 后仍然存在。该示例显示 Linux 似乎在进程死后释放套接字。
但是我在 Linux 中找不到明确的文档来说明当绑定进程被 SIGKILL 时 Linux 对抽象套接字做了什么。有人知道吗?
换句话说,抽象套接字何时被释放以供再次使用?
我不想用抽象套接字替换 PID 文件机制,除非它最终解决了问题。
如果这不是这个问题的最佳论坛,请原谅我,但它似乎与内核相关而不是与编程本身相关。
我正在编写一个脚本来查询系统的开放端口,以便我们可以绘制和监视统计信息。为此,我使用了 iproute 包中的“ss”命令。如果执行,ss -s|grep estab您将收到类似于以下内容的输出:
TCP: 296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0
Run Code Online (Sandbox Code Playgroud)
我的问题与 timewait 变量有关,它显示了 TIME_WAIT 状态下的计算套接字。当我试图找出斜线后引用的数字时,它变成了搜索源代码的旋风冒险,最终让我找到了以下代码段:
printf("TCP: %d (estab %d, closed %d, orphaned %d, synrecv %d, timewait %d/%d), ports %d\n",
s.tcp_total + slabstat.tcp_syns + s.tcp_tws,
sn.tcp_estab,
s.tcp_total - (s.tcp4_hashed+s.tcp6_hashed-s.tcp_tws),
s.tcp_orphans,
slabstat.tcp_syns,
s.tcp_tws, slabstat.tcp_tws,
slabstat.tcp_ports
);
Run Code Online (Sandbox Code Playgroud)
我必须承认,我对“slabstat”应该意味着什么的搜索最终导致我了解了 /proc/slabinfo 中的平板缓存及其报告界面。
问题:slabtable 与 TIME_WAIT 套接字计算有什么关系?我不明白为什么报告这个数字,因为每次我在我尝试过的每台服务器上运行命令时,这个数字总是零。
在 Linux 下,我可以使用netstat -tulpnwand ps,如下所示:
# netstat -tulpnw | grep :53
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 1482/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 1482/named
# ps aux | fgrep 1482
named 1482 0.0 1.0 93656 44900 ? Ssl Sep06 3:17 /usr/sbin/named -u named
root 20221 0.0 0.0 4144 552 pts/0 R+ 21:09 0:00 fgrep --color=auto 1482
#
Run Code Online (Sandbox Code Playgroud)
ksh在 AIX 6 中使用时,如何获取绑定到端口的程序的完整路径?
我正在为C使用Unix Domain Socket的 Debian 系统编写守护进程。
如果守护进程的工作目录是根目录,那么是否有一个惯用的目录来将套接字放置在文件系统上?
一个香草ss -l列表(在我当前的机器上)许多打开的套接字,具有各种 Netid 类型,其中许多只在 localhost 上侦听。
如何获得所有且仅包含远程机器可以与机器交换数据的所有套接字的列表?
这将包括 TCP、UDP、任何其他传输层协议、RAW 套接字以及我可能不知道的任何其他协议。(ss在这个意义上是完整的吗?)
我相信这将排除 UNIX 套接字(它们仅在本地文件系统上,对吗?或者 UNIX 套接字可以远程操作,它们应该包括在内)。
可以忽略受本地主机限制的侦听器,但我不知道在如何表示/映射本地主机方面是否有任何警告。
基本标准是“如果侦听过程允许,我可以远程入侵任何套接字”。
(我记得ss几年前的命令显示的结果比我现在得到的要少得多。这让我想知道某些发行版是否配置ss为默认隐藏内容。我正在寻找一个ss或类似的实用程序命令,它尽可能可移植, 只要它不会仅仅因为它在不同的环境中运行而隐藏任何东西。此外,从安全理论的角度来看,对于威胁模型,我们可以假设机器完全在我们的控制之下并且运行正常,非恶意软件。)
那么如何列出所有且仅相关的套接字?
在 Linux 上(我的实时服务器在 RHEL 5.5 上 - 下面的 LXR 链接指向内核版本),man 7 ip说:
已绑定的 TCP 本地套接字地址在关闭后的一段时间内不可用,除非设置了 SO_REUSEADDR 标志。
我没有使用SO_REUSEADDR. “一段时间”是多长时间?我怎样才能知道它有多长,我怎样才能改变它?
我一直在谷歌上搜索这个,并找到了一些信息,但没有一个能从应用程序程序员的角度真正解释这一点。以机智:
net/tcp.h是“要等待多久才能破坏TIME-WAIT状态”,固定为“大约60秒”我绊倒的地方在于弥合内核的 TCP 生命周期模型和程序员的端口不可用模型之间的差距,即理解这些状态与“一段时间”的关系。
我有两个非特权容器,我想在它们之间共享一个 unix 套接字。每个容器在主机上都有自己的用户,并具有单独的 subuid 和 subguid 映射。
我尝试在容器中创建组并将它们映射到主机上的一个组。但是,这不起作用。我不想创建额外的用户,以尽可能减少所涉及的用户数量和潜在的安全漏洞,而不会将容器相互暴露。
可能重复:
/proc/PID/fd/X 链接号
我有一个关于文件描述符及其在 proc 文件系统中的链接的问题。我观察到,如果我从 proc 列出某个进程的文件描述符,ls -la /proc/1234/fd我会得到以下输出:
lr-x------ 1 root root 64 Sep 13 07:12 0 -> /dev/null
l-wx------ 1 root root 64 Sep 13 07:12 1 -> /dev/null
l-wx------ 1 root root 64 Sep 13 07:12 2 -> /dev/null
lr-x------ 1 root root 64 Sep 13 07:12 3 -> pipe:[2744159739]
l-wx------ 1 root root 64 Sep 13 07:12 4 -> pipe:[2744159739]
lrwx------ 1 root root 64 Sep 13 07:12 5 -> socket:[2744160313]
lrwx------ 1 …Run Code Online (Sandbox Code Playgroud) 我多次遇到“socket”这个词,所以我在不同的网站上查了一下,但每个网站都需要太多的知识才能理解解释。
我读到的是这样的:
我并没有真正了解大局,套接字的真正目的是什么。您能否用不需要太多技术知识的术语(如 C 语言)来解释它?
socket ×10
linux ×3
daemon ×2
debian ×2
proc ×2
aix ×1
containers ×1
lsof ×1
lxc ×1
netstat ×1
networking ×1
nfs ×1
open-files ×1
pipe ×1
process ×1
security ×1
services ×1
system-calls ×1
tcp ×1
timeout ×1
unix-sockets ×1