When developers install Drupal modules, they rely on Drush or version control to manage their work.
However, most ordinary Drupal users do everything through the admin interface. They install modules via the "Install new modules" link.
Sometimes that link goes missing. If you can't find your "Install new modules" link, here are four possible solutions.
#1. The Update Manager module is disabled
The most common reason why people can't see the "Install new module" link is that the Update Manager module is enabled.
Go to your Modules page and make sure it is enabled:
#2. Administer modules permission
It is possible that you don't have the correct permissions to install modules.
One way to double-check whether this is your problem, is to visit this URL on your site: /admin/modules/install. If you see "You are not authorized to access this page.", then you've found the issue.
The permission you need is called "Administer modules" and you'll find it under People > Permissions > System.
#3. Your hosting company
Quite a few hosting companies won't allow you to upload modules via the Drupal interface.
For example, here's what Acquia says:
"One of the most common tasks you'll accomplish while developing or maintaining a Drupal website is adding a Drupal contributed module. If you're used to working in a local installation of Drupal 7, you may be used to doing this directly in the Drupal admin interface, using the core Update Manager module. If your site is hosted on Acquia Cloud, your site's module directories are managed in your code repository. This means that you can't just add a module using the Update Manager or SFTP. Instead, you need to use your version control system (Git or SVN). "
Managing your modules with version control is definitely aligned with Drupal's best practices, but it does explain why your "Install new module" link is missing.
Other hosting companies also disable "Install new module" for the same reasons.
#4. Check your settings.php file
Open up your site's files and go to /sites/default/settings.php. Look for this line of code:
#$conf['allow_authorize_operations'] = FALSE;
Make sure that the # symbol exists at the front of this line.
If it doesn't exist, add the # symbol so it matches the code above. Or, you can change that code to this:
$conf['allow_authorize_operations'] = TRUE;