프로그램이 시작 시 갑자기 /etc/ld.so.preload를 읽게 만드는 원인은 무엇입니까?

프로그램이 시작 시 갑자기 /etc/ld.so.preload를 읽게 만드는 원인은 무엇입니까?

의류 시행 메시지가 Trisquel 7 컴퓨터의 시스템 로그에 나타나기 시작했습니다. 영향을 받는 프로그램이 읽기 모드에서 open파일을 요청했지만 /etc/ld.so.preload의류 정책에 의해 거부되었습니다. 다음은 이 메시지의 첫 번째 인스턴스입니다.

May  8 21:25:54 box kernel: [928193.797140] type=1400 audit(1462739154.627:76): \
apparmor="DENIED" operation="open" profile="/usr/lib/NetworkManager/nm-dhcp-client.action" \
name="/etc/ld.so.preload" pid=13471 comm="nm-dhcp-client." requested_mask="r" \
denied_mask="r" fsuid=0 ouid=0

cupd 및 mysqld를 포함하여 여러 다른 의류 제한 프로그램이 동일한 요청을 거부했습니다.

의류 구성 파일은 변경되지 않았으며 이러한 메시지는 이전에 나타난 적이 없습니다. 따라서 이러한(및 아마도 다른 제한되지 않은) 프로그램이 갑자기 (빈) 파일을 읽으려고 시도하기 시작한 것 같습니다 /etc/ld.so.preload.

내 유일한 단서는 그날 일찍 내가 편집했다는 것입니다마 메이첫 번째. 첫 번째 메시지가 나타나기 전에 시뮬레이션된 머신을 실행하고 무인 상태로 두었습니다. 콘솔로 돌아온 직후 콘솔이 응답하지 않게 되었고 해당 메시지가 나타난 후 약 20분 후에 콘솔을 재설정해야 했습니다.

그렇다면 이 두 가지가 연관되어 있는 걸까요? 이러한 프로그램이 현재 사전 로드 라이브러리를 찾는 이유를 어디서부터 찾아야 합니까?

답변1

모든 프로그램은 열려고 시도하며 /etc/ld.so.preload이 동작은 Glibc에 내장되어 있습니다. 그러나 존재하는 경우에만 열려고 합니다(Glibc가 먼저 호출됨 access).

일반적으로 /etc/ld.so.preload존재하지 않으므로 각 프로세스는 을 호출하고 access부정적인 대답을 얻은 후 계속 진행합니다. AppArmor에서는 아무 것도 실행되지 않습니다.

그러나 파일이 존재하면 프로세스 호출 open이 파일을 읽습니다. 파일이 비어 있으면 동적 연결은 영향을 받지 않으며 유일한 영향은 매우 약간의 성능 저하입니다. 특정 프로그램이 파일을 열 때 실행되는 AppArmor 규칙이 있는 경우 이러한 경고가 표시됩니다.

/etc/ld.so.preloadmame을 컴파일하는 것이 궁극적으로 생성되는지 아니면 관련이 없는지 모르겠습니다 . 어쨌든 파일이 비어 있으면 삭제하면 됩니다.

관련 정보