서버가 있습니다. 내 서버는 안전하지만 들어온 좋은 해커를 상상해 봅시다. 이제 /etc/passwd
와를 살펴볼 수 있습니다 /etc/shadow
. 해당 파일의 이름 /etc/passwd
을 다음과 같이 바꾸고 싶습니다 /etc/xxanoda
.
링크를 만들 수 있다고 생각했지만 해커에게는 쉽게 할 수 ls -l
있습니다.
호환성 문제없이 해당 파일의 이름을 바꾸어도 OS가 계속 실행 중이거나 완전히 쓸모가 없습니까? 지식을 추구하기 위해서입니다.
답변
파일 시스템 계층 표준 에 대한 유닉스 계열 시스템이 포함되어 /etc/passwd
고정 된 위치에서, 및 도구는 결과적으로 보통 거기 찾기 위해 하드 코딩된다. 이론적으로 모든 관련 유틸리티를 다시 컴파일하여 새 위치를 찾을 수 있지만 공격자는 항상 해당 바이너리에서 문자열을 찾아 새 파일을 찾거나 정규식을 사용하여 passwd
유사한 내용의 파일을 찾을 수 있습니다 .
shadow
파일에 읽기 전용으로한다 root
(그리고 아마도라는 그룹 shadow
). 침입자가 시스템에 대한 루트 액세스 권한을 얻은 경우, 완전한 제어권을 가지며, passwd / shadow 파일을 읽을 수 있는지 여부는 그 시점과 관련이 없습니다.
예상 한 위치에 파일이없는 것이 도움이 될 수있는 몇 가지 상황이있을 수 있습니다. 예를 들어 누군가가 요청할 수 있도록 잘못 구성된 웹 서버가 http://myserver/../../etc/passwd
있는 경우 일반적으로 이러한 종류의 간접적 인 지시는 최소한의 보안 이점을 위해 많은 작업이 필요합니다.
답변
가장 좋은 방법은 “완전히 쓸모없는”것입니다. (이는 침입자에게 추가적인 장애물을 제공하지 않습니다)
/etc/passwd
계정 이름을 포함하지만 시스템에 대한 셸 액세스 권한이있는 사용자는 계정 이름을 찾을 수 있습니다.
/etc/shadow
민감한 정보 (비밀번호 해시)를 포함하지만 루트 만 읽을 수 있습니다. 침입자가 루트 권한을 얻을 수 있다면 어떻게 재난을 겪을 수 있습니까?
답변
현대 Unices (그리고 Ubuntu를 포함한 Unix와 같은) /etc/passwd
에는 비밀이 없습니다. 새 위치에서 유틸리티를 찾기 위해 몇 개의 유틸리티를 재 구축해야하는지에 따라 이름을 바꾸는 것보다 가치가 없습니다.
/etc/shadow
그 파일에는 비밀이 있기 때문에 또 다른 문제이지만 이름을 바꾸면 도움이되지 않습니다. 루트로만 읽을 수 있으므로 해커가 다른 사용자로 시스템에 침입하더라도 파일에 접근하기에는 충분하지 않습니다. 그렇기 때문에 /etc/passwd
모든 사람이 읽을 수 있어야 /etc/passwd
하지만 루트 만 실제 비밀번호를 얻을 수 있어야하기 때문에 루트 만 읽을 수있는 파일로 비밀번호를 옮겼습니다.
해커 가 루트를 얻는 경우 이름을 바꾸면 저장되지 않습니다. 간단한 재귀 grep
는 해커에게 /etc/shadow
유사한 형식 의 파일 목록을 제공 할 수 있으며 해커는 원하는 데이터를 찾기 위해 파일 을 살펴보기 만하면 됩니다. 당신은 그를 최대 몇 시간 지연 시켰으며, 아마도 그보다 적은 시간을 보냈습니다 /etc/shadow
.
답변
이 파일들의 이름 만 바꿀 수는 없습니다. Linux 시스템의 표준이기 때문에 많은 프로세스와 프로그램이 검색합니다. 할 수있는 일은 서버를 올바른 방식으로 보호하는 것입니다.
답변
/etc/passwd
및 /etc/shadow
파일 이름을 바꾸는 데 쓸모는 없지만 보안을 강화하려면 PAM (플러그 가능한 인증 모듈)과 NSS (이름 서비스 스위치)를 확인하십시오. 여기처럼
PAM을 사용하여 표준 파일에서 인증 규칙을 읽는 대신 인증 모듈을 추가하여 ldap 또는 데이터베이스와 같은 다른 소스에서 읽을 수 있습니다. 그것을 사용하면 /etc/shadow
거의 completley가 제거 될 수 있음을 의미합니다 .
NSS는 표준 파일 ( /etc/passwd
, /etc/groups
)과 독립적으로 일부 이름 확인 (이 사용자가 속한 그룹 등)을 만들어 PAM을 보완합니다 . 이것을 사용하면 암호 파일에 잠재적으로 루트에 대한 대체 옵션 만 포함될 수 있습니다. SSH 키를 사용하여 루트 로그인의 유효성을 검사하면 섀도 파일 내에 루트 암호가 없어도됩니다 (SSH 연결이 끊어지면 필요할 수 있음).
또는 별도의 데이터베이스 또는 LDAP 호스트를 통해 사용자를 인증하지 않으려면이 옵션을 권장하지 않지만 비표준 파일에서 데이터를 읽는 자체 PAM 및 NSS 모듈을 만들 수도 있습니다.
당신이 그들을 사용하려고 할 때, 알려진 작동하는 인증 계층에 어떤 종류의 폴백을 유지하는 것을 잊지 마십시오. 그렇지 않으면 루트로도 시스템에서 자신을 잠글 수 있습니다.
모든 응용 프로그램이 PAM을 지원하는 것은 아닙니다 (그러나 많은 응용 프로그램이 지원함). 그러나 NSS를 사용하여 PAM을 지원하지 않는 앱에 대한 인증을 구현할 수 있으며 NSS에 대해 읽은 일부 사이트에서는 실제로이 방법을 제안합니다. 그러나 이것은 NSS 모듈이 NSS 인증 계층에 액세스 할 수있는 모든 사람에게 (잠재적으로) 해시 된 암호를 제공한다는 것을 의미합니다. )! 따라서이 방법을 사용하는 경우 항상 NSS를 사용하여 사용자에게 기본 데이터 (예 : 내용 /etc/passwd
)를 제공하고 PAM이 인증 계층으로 사용되도록하십시오.