我正在用火狱来沙箱火狐。当我使用lsof -i时,没有显示连接。Firejail对进程执行名称空间隔离,所以我这样做。
ps aux | grep firefox | awk ' { print $2} ' | while read p ; do nsenter -t $p lsof -i ; done
输入每个命名空间并输入lsof -i。我也尝试过nsenter -t -n lsof -i,但是什么也没有出现。但是当我把它当成根的时候,这个就会起作用了。用户难道不能列出打开的套接字连接吗?
发布于 2021-10-14 07:48:48
这个ps | grep | awk管道是丑陋的,因为它是古老的(这是非常古老)。
顺便说一句,grep将与它自己的pid....which相匹配,这就是为什么大多数变体使用一些技巧来排除grep的pid。通常是像ps aux | grep command | grep -v grep这样可怕的东西。其中最好的是使用一个括号表达式来表示grep的正则表达式。更好的版本意识到,将grep导入awk几乎总是毫无意义,不是必需的,甚至是不必要的,因为awk可以进行正则表达式匹配,并最终得到类似于ps aux | awk '/[c]ommand/ {print $2}'的东西)。
无论如何,不要用那些可怕的胡说八道。它本应在90年代死去,但它的僵尸却不断地被复活或重新发明。
将pgrep或ps与h (无标头)、-C (匹配cmdlist)和-o (输出格式设置)选项一起使用。这就是它们的用途。
例如:
pgrep -f firefox | xargs -I {} nsenter -n -t {} lsof -i或
ps h -C firefox -o pid | xargs -I {} nsenter -n -t {} lsof -i或者,如果没有xargs:
for pid in $(pgrep -f firefox) ; do
nsenter -n -t "$pid" lsof -i
done这远远不是完美的,但这是一个更好的起点,你正在做的事情。
顺便说一句,pgrep可以列出名称空间中的所有PID。还有lsns,用于检查和提取有关名称空间的各种细节。甚至ps也有列出与PID关联的各种名称空间的选项。如果您想要在没有自己的these....especially二进制文件或映射到系统的lsof和/或/usr/bin/目录的名称空间中列出网络连接,那么您可能应该阅读所有lsof的手册页。
不幸的是,在未来的版本中,lsof本身似乎没有任何内置的命名空间support....maybe。
发布于 2021-10-16 09:12:56
事实证明,firefox似乎为运行中的firefox进程和派生的firefox进程创建了另一个沙箱。因此,如果用户在命令行中使用firefox启动防火墙,则将显示当前用户的lsns。
但是,如果在相同的命令行(针对所有firefox进程的grep命令行)中,并将nsenter输入到网络命名空间中,lsof -i将失败,因为:
nsenter: cannot open /proc/8958/ns/net: Permission denied
作为root,lsns显示每个名称空间的firefox进程和相关的pids。如果输入所有名称空间和lsof -i,就会得到某些pids的firefox输出。
当我ls /proc/ pid,其中pid uid是用户并已经生成lsof -i输出时,文件都是由root而不是用户拥有的,这就是为什么lsof -i在所有firefox进程上作为用户执行时不能工作的原因。
很难说这是否是预期的行为,因此,任何投入都将受到赞赏。
https://unix.stackexchange.com/questions/673163
复制相似问题