Must be superuser after GRANT SELECT ON pg_settings(PostgreSQL)
I am not entirely sure, but I think you can't get around the "superuser" check for those settings. 

With Postgres 10 you could use the new default role pg_read_all_settings but if upgrading is not an option now, the easiest way would be to create a function that runs with superuser privileges.

Create the following function as the superuser:

create function public.list_settings() 
  returns setof pg_catalog.pg_settings
as
$$ 
  select *
  from pg_catalog.pg_settings;
$$
language sql
security definer;


The  security definer means that the function always runs with the privileges of the user who created the function (the superuser).

Then grant execute on that function to your user:

grant execute on function public.list_settings() to the_user;


The the regular user can do:

select * 
from public.list_settings()
where name = 'hba_file';


Of course you could create the function in a different schema, e.g. admin