로드 테스트 vsftpd로 인해 unix_chkpwd로 인해 CPU 로드가 높아짐

로드 테스트 vsftpd로 인해 unix_chkpwd로 인해 CPU 로드가 높아짐

저는 삼바 파일 공유를 vsftpd(TLS를 통해)로 대체하기 위한 개념 증명 작업을 진행 중입니다. 이것은 공용 파일 저장소가 아니므로 보안이 중요합니다. 클라이언트는 서버가 수신하고 처리할 수 있도록 이 위치에만 기록합니다.

그러나 JMeter를 사용하여 FTP 부분의 로드 테스트를 시작했을 때 몇 가지 문제에 직면했습니다. 부하 테스트 시나리오는 각 사용자가 로컬 계정으로 연결 및 로그인하고 작은 파일을 업로드한 후 로그아웃하고 1초 동안 기다리는 것입니다.

최대 300명 정도의 사용자에게 잘 작동합니다. 그 후 문제가 나타나기 시작했습니다. unix_chkpwds-wave는 몇 초마다 엄청난 CPU 스파이크를 일으키기 시작했고, 약 1분 후에 지속적인 로드가 되었습니다. 16개 논리 코어 시스템에서 로드 평균은 60~80 사이로 표시됩니다. 섀도우 파일을 해독하고 읽는 것이 그렇게 큰 부담이 되어서는 안 될 것 같습니다.

현재 /etc/pam.d/vsftpd구성은 다음과 같습니다.

auth required pam_succeed_if.so user = citsl_ftp
auth required pam_unix.so
account sufficient pam_permit.so

익명 로그인을 활성화하거나 인증에 모듈을 /etc/pam.d/vsftpd사용하지 않도록 편집하면 pam_unix.so문제를 "수정"할 수 있습니다. 프로세스 수가 제한을 초과하지 않았는지 확인했는데 ps -A --no-header | wc -l약 400~800개의 프로세스만 표시됩니다. 그러나 나는 또한 프로세스의 PID가 매우 빠르게 상승하고 약 10초마다 반복하고 있다는 것을 알아차렸습니다(약간 걱정스러운 것처럼 보였지만 이것이 실제 문제인지 알 수 있을 만큼 Linux에 대해 충분히 알지 못합니다).

그동안 많은 것을 배웠으니 제가 바보라면 FTP는 개인 쓰기 전용 파일 저장에 잘못된 도구라고 말해 주세요. 하지만 unix_chkpwd이 경우에는 예상한 동작이 맞는 걸까요, 아니면 제가 뭔가를 놓치고 있는 걸까요? 비밀번호로 보호된 로컬 사용자를 사용하는 것이 잘못된 방법인가요? 매우 제한된 익명 로그인을 사용하면 나 자신이 얼마나 취약해질 수 있습니까?

편집: TooTea가 의심했듯이 범인은 비밀번호의 해싱 알고리즘입니다. SHA-512 사용에서 md5로 변경하면 평균 CPU 사용량이 약 9로 줄었습니다. 서버에 가하는 부하가 낮다는 점을 고려하면 여전히 약간 높지만 옵션이 제공됩니다.

답변1

이는 비밀번호 해싱 비용 때문일 수 있습니다. /etc/shadow암호화되지 않은 이 파일에는 적절한 비밀번호 해시 함수에서 파생된 비밀번호 해시가 포함되어 있습니다. 최신 시스템은 암호 추측 공격을 막기 위해 의도적으로 계산 비용이 많이 드는 고급 해시 함수를 사용합니다.

/etc/shadow두 번째 필드의 처음 몇 글자를 보고 확인하세요. $6$또는 $y$달러 기호와 같은 접두사가 있을 수 있습니다 . 이는 해시 함수를 결정합니다. man 5 crypt접두사의 의미를 살펴보세요.

영향을 받은 계정이 비용이 많이 드는 해시 함수를 사용하는 경우 원하는 처리량을 달성하기 위해 더 저렴한 해시 함수로 전환(또는 최신 조정 가능 함수를 사용하는 경우 해시 매개변수 조정)하는 것을 고려하십시오. 그런 다음 무차별 대입 공격에 문제가 없도록 계정이 매우 길고 임의의 비밀번호를 사용하는지 확인하십시오.

또는 비밀번호를 사용하는 대신 FTP용 클라이언트 인증서 TLS 인증 배포를 고려할 수도 있습니다(특히 전송 중인 데이터를 보호하기 위해 이미 TLS를 사용하는 경우).

관련 정보