Ches Martin tem um blog legal com detalhes de como ele configurou o Mercurial complete com o que você está pedindo.
<LimitExcept GET>
require valid-user
</LimitExcept>
Este trecho de uma configuração do Apache é parte do que é necessário para permitir a extração anônima (ou a navegação se publicada via hgweb), mas ainda requer um passe para push.