How can I hide the user profile from users?
You can do this with hook_menu_alter changing the access callback and access arguments for the relevant user menu items.

e.g

/**
 * Implements hook_menu_alter
 */
function MYMODULE_menu_alter(&amp;$items){
  // Change user view and edit callbacks to be "administer users" access only.
  $items['user/%user/view']['access callback'] = 'user_access';
  $items['user/%user/view']['access arguments'] = array('administer users');
  $items['user/%user_uid_optional']['access callback'] = 'user_access';
  $items['user/%user_uid_optional']['access arguments'] = array('administer users');
  $items['user/%user_category/edit']['access callback'] = 'user_access';
  $items['user/%user_category/edit']['access arguments'] = array('administer users');
}


Clear menu cache to apply.