
Putty를 사용하여 내 PC를 통해 내 보드(Imx6 Humming 보드)에 SSH를 통해 연결하려고 합니다. Putty에서 로그인 프롬프트 직후에 "예기치 않게 닫힌 네트워크 연결"이 표시됩니다. 루트 파일 시스템 내부에서 이 2개의 라이브러리를 교체하면 문제가 해결됩니다. 이러한 파일이 문제를 일으키는 이유는 무엇이며 SSH에 대한 종속성은 무엇입니까? 이 두 라이브러리 파일에 관한 도움을 주시면 감사하겠습니다.
답변1
libnss_files.so는 실제로 /etc/passwd, /etc/group, /etc/hosts를 읽는 라이브러리입니다. 이것이 없으면 프로그램은 사용자 이름과 사용자 ID를 조회할 수 없습니다. OpenSSH는 UID와 홈 디렉터리를 알 수 없습니다. 사실 그것은 당신이 존재한다는 것을 알지 못할 것입니다.
마찬가지로 libnss_dns.so는 DNS 쿼리를 만드는 라이브러리입니다. 이는 시스템의 유일한 DNS 라이브러리는 아니지만 대부분의 프로그램에서 사용하는 일반적인 "주소로 도메인 확인" 기능을 처리하는 라이브러리입니다.
일반적으로 이들은 각각 DNS와 파일에서 디렉터리 정보 조회를 처리하는 Glibc 모듈입니다. 여기서 "디렉터리 정보"는 1) /etc/passwd 또는 /etc/group과 같은 사용자 계정과 2) DNS 또는 /etc/hosts와 같은 호스트 이름을 의미합니다. (즉, 전화번호부와 같은 디렉토리이지 파일 폴더와 같은 디렉토리가 아닙니다.)
그만큼libcC로 작성된 프로그램에서 사용되는 표준 라이브러리에는 소스에 관계없이 디렉토리 정보를 검색하는 일반적인 기능이 있습니다. 즉, 실제 프로그램은 DNS나 /etc에 신경 쓸 필요가 없습니다. 그들은 단지 사용자 이름(또는 호스트 이름, 그룹, TCP 포트...)을 조회하기 위해 libc 함수를 호출하고 libc는 어떤 출처에서든 적절합니다.
대부분의 Linux 시스템에서 사용되는 libc인 Glibc는모듈식정보 소스 – 시스템 관리자는 새로운 것을 추가하고 순서를 바꾸는 등의 작업을 할 수 있습니다. /etc/passwd 또는 /etc/hosts의 세부 사항을 아는 libc "core" 대신 해당 작업을 "libnss_files" 모듈에 위임합니다. , DNS에 대한 지식은 "libnss_dns" 모듈에 있습니다.
프로그램이 도메인 이름을 확인해야 할 때마다 libc는 /etc/nsswitch.conf에 구성된 각 모듈을 살펴봅니다. 먼저 'files' 모듈(/etc/hosts를 확인)에 묻고 그 다음 'dns' 모듈( 응답을 받을 때까지 DNS를 확인합니다. mDNS(".local" 도메인), NetBIOS 등에 대한 다른 모듈이 있을 수 있습니다.
마찬가지로 프로그램이 사용자 이름을 UID로, UID를 사용자 이름으로 확인해야 할 때마다 libc는 'files' 모듈에 /etc/passwd에서 사용자를 가져오도록 요청합니다. (대체 소스에서 사용자 계정 정보를 가져오는 'ldap', 'pgsql' 또는 'nis'와 같은 다른 모듈이 있을 수도 있습니다.)