Firefox를 샌드박스로 만들기 위해 Firejail을 사용하고 있습니다. 사용하면 lsof -i
연결이 표시되지 않습니다. Firejail은 프로세스의 네임스페이스 격리를 수행하므로 이렇게 합니다.
ps aux | grep firefox | awk ' { print $2} ' | while read p ; do nsenter -t $p lsof -i ; done
각 네임스페이스를 입력하고 lsof -i를 사용합니다. 나도 nsenter -t <pid> -n lsof -i
시도해 보았지만 아무 것도 나타나지 않습니다. 그러나 루트로 실행하면 작동합니다. 사용자가 열린 소켓 연결을 나열할 수 없어야 합니까?
답변1
이 ps | grep | awk
파이프는 낡고 못생겼어요.매우고대의).
그런데, grep
자신의 pid와 일치합니다. 그래서 대부분의 변종은 grep의 pid를 제외하기 위해 몇 가지 트릭을 사용합니다. 일반적으로 ps aux | grep command | grep -v grep
. 가장 좋은 방법 중 하나는 정규 표현식과 함께 대괄호 표현식에 grep을 사용하는 것입니다. 더 나은 버전은 파이핑 입력이 정규식 패턴 일치를 수행하고 다음과 같이 끝날 수 있기 때문에 grep
거의 awk
항상 중복되고 무의미하며, 필요하지 않거나 심지어 불필요하다는 것을 인식합니다 .awk
ps aux | awk '/[c]ommand/ {print $2}'
어쨌든 끔찍한 쓰레기를 사용하지 마십시오. 90년대에 죽을 예정이었지만 좀비 시체가 계속해서 부활하거나 재창조되고 있습니다.
대신 (제목 없음), (cmdlist 일치) 및 (출력 형식) 옵션 과 함께 pgrep
OR을 사용하세요 . 이것이 그들의 목적입니다.ps
h
-C
-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와 관련된 다양한 네임스페이스를 나열하는 옵션 도 있습니다. 아마도 이 모든 것에 대한 매뉴얼 페이지를 읽어야 할 것입니다...특히 lsof
시스템의 lsof 및/또는 /usr/bin/에 대한 자체 바이너리나 매핑이 없는 네임스페이스에서 네트워크에 연결된 디렉터리를 나열 하려는 경우에는 더욱 그렇습니다 .
불행하게도 lsof
자체적으로 내장된 네임스페이스 지원은 없는 것 같습니다. 아마도 향후 버전에서는 가능할 것입니다.
답변2
Firefox는 실행되고 생성된 Firefox 프로세스를 위해 또 다른 샌드박스를 생성하는 것으로 나타났습니다. 따라서 사용자가 명령줄에서 firefox를 사용하여 firejail을 시작하면 현재 사용자의 lsns가 표시됩니다.
그러나 동일한 명령줄에서 모든 Firefox 프로세스에 대해 grep을 수행한 다음 net 네임스페이스를 입력하면 lsof -i
실패합니다.
nsenter: cannot open /proc/8958/ns/net: Permission denied
루트로서 lsns는 firefox 프로세스와 각 네임스페이스에 대한 관련 pid를 표시합니다. 모든 네임스페이스를 입력하면 lsof -i
특정 PID에 대한 Firefox 소켓의 출력이 표시됩니다.
ls
pid uid가 사용자이고 생성된 lsof -i 출력이 /proc/pid인 경우 파일은 모두 사용자가 아닌 루트가 소유하므로 lsof -i
모든 firefox 프로세스에서 사용자로 실행하면 작동하지 않습니다.
이것이 예상되는 동작인지 말하기 어렵기 때문에 어떤 의견이라도 주시면 감사하겠습니다.