Linux Security and Hardening
General Linux Security
Physical Security for Linux
Network Security in Linux
Additional Security Resources
In this section, you’ll take a deep dive into Linux security. You’ll build your knowledge and skills through a comprehensive overview of the key areas that you need to know to secure Linux systems.
You’ll begin with Linux security in general before moving on to physical security and the countermeasures you can employ to protect your hardware. From there, you’ll explore authentication systems and the various account types on a Linux system, and how to secure each one. You'll also learn how to enforce strong passwords and manage account and password expirations.
In the networking section, you'll learn how to secure network services that run on Linux systems. You'll also learn how the local firewall works in Linux and how to configure it. You’ll learn about file system security and how permissions work in detail, including special modes, file attributes, and ACLs. You'll also discover what rootkits are, how to detect them, and how to remove them.
You’ll also find several security resources you can use to continue your security education and stay on top of the latest security issues for Linux distributions.
There are several knowledge checks as you go through these resources. These will help you identify any areas that you might need or want to review. At the end you’ll find a final exam, where you can test yourself on what you’ve learnt.
- Get a general view of Linux security including roles, network services, encryption, accounts, and multifactor authentication
- Learn specific strategies for mitigating physical security risks and protecting your Linux systems against the most common physical attacks
- Learn about data encryption and how to implement it on new Linux systems, as well as those that are already in service
- Understand the different types of accounts you'll find on a Linux system and the special precautions you need to take with each account type
- Learn how to enforce good password security practices on your Linux systems
- Learn about multi-factor authentication and how it can be implemented in Linux
- Learn techniques and strategies to secure network services
- Learn how to secure your files and directories on Linux through permissions, data sharing, special modes, file attributes, ACLs, and rootkits
So why is Linux secure? What makes it secure, and what are some of the security features of Linux? First off, Linux is a multiuser system, meaning that many users and accounts can use the system at once. Having multiple accounts allows for separation of roles and permissions. On Linux systems the administrator of the system is called the superuser. Specifically the account named root is the superuser of a Linux system. Root the superuser can do anything. It's the all powerful account on a Linux system. For example, normal users can't hide things from the root account. Even if they create files that should only be accessed by them, root can still access those files. This is a very important concept. If someone has a root access, they own the entire system. Also, root privileges are required to do things like install system-wide software, configure network devices, and create or disable other accounts. This is why it's extremely important to keep this account secure. Don't give access to the root account to someone unless it's absolutely necessary. We'll be talking about secure ways to do that in another section of this course. All other accounts on a system besides the root account are normal accounts. These accounts can be used by people. For example, when I log into a system I might use the login name of Jason. Each user on a system should be given their own account. And we'll talk about why this is important in just a minute. You can also have accounts that are used to run services or applications on a system. For example, you could create an account to use for the web server on a Linux system. Having separate accounts for users and applications has some advantages. The first advantage is being able to use file permissions. The ability to view a file, edit it, or even execute it as a program is controlled by file permissions. Each file on a Linux system has an owner. The root user owns the files associated with the operating system. Each individual user owns the files that they create. Typically those files live in their individual home directories. If we're using accounts for services or applications the files associated with those services or applications will be owned by that application user. If we are using a dedicated user for our web server then that user will own the files that are used by the web server to serve up web pages. Files owned by one user cannot be modified by another user unless the other user is given explicit access to that file. You can even use file permission so that other users can't even see the contents of a file or even see the file name itself. So if someone were to break into my Jason account they wouldn't have access to the files owned by the web server account, for example. This is just one thing that provides a layer of security to Linux. The next advantage to using separate accounts is that each process is run by an account. By default each account can only start processes as themselves. Likewise, each account can only stop or kill their own processes. The exception to the rule is with the root account. The root user can stop any process on a system no matter what account owns the process. Again, the superuser is all powerful. In the case of our web server example the web server process can only be stopped by the web server user or root. If someone were to gain access to my Jason account they couldn't stop the web server process. Also if the web server process was exploited, then the attacker would only have the web server user privileges since that process is running as the web server user. This adds another layer of security to the Linux system. This is one reason why you don't want to run applications as the root user. Many times attackers are lazy. They want big and easy wins. For many attackers Linux is simply a poor target. For one thing, there are simply more Windows-based computers than there are Linux computers. Right off the bat, Linux is a smaller attack surface. Also Linux is typically used by computer professionals or computer enthusiasts. These people aren't your average computer user. They typically have more knowledge about how computers work and about computer security. These types of people pay more attention to security than your average casual user of Windows, for example. Since there aren't as many Linux targets and the targets that exist are harder to break into, many times Linux is left alone by attackers and virus writers. It doesn't mean that this doesn't happen but currently Windows is a much easier target. Linux is open source, meaning that anyone can see the source code. By using Linux you don't have to trust just one person or one company. It would be practically impossible for someone to sneak some malicious code into the Linux kernel without thousands and thousands of developers noticing it. Also using open source software greatly increases the odds of security holes and bugs being found and fixed. Once a bug or hole is found, it can be quickly fixed. There is no corporate bureaucracy and secrecy surrounding Linux. Windows, on the other hand, is a black box. It can be doing anything under the hood and you would probably never know. Only Microsoft can release security patches to their OS and holes can go unpatched for years at a time. Yet another thing that enhances the security of Linux is that the OS software is centralized through the use of packages and package managers. A package is a collection of files that make up an application. A package manager is used to install, upgrade, and remove packages. Linux distributions provide repositories of packages which allow you to download and install software from a single cryptographically trusted provider. When you install a package on Linux the package manager downloads that package from the repository. Packages in the repository are signed using a public key to prove that the package that was published by the repository has not changed since the signature was applied. This provides some protection against installing software that may have been maliciously altered after the package was created but before you downloaded it. If you are using packages from a well-known Linux distribution you can feel fairly confident that those packages are free from viruses, free from malware, and that they are what they say they are. Each program available in the official repository is thoroughly tested. Not only is the Linux kernel open source the operating system tools are open source as well. Also the overwhelming majority of software applications that run on Linux are open source. Again, this means that anyone can readily view the source code for those Linux programs and security flaws can be spotted and fixed. As security issues are addressed packages in the repository are updated. This way you can easily keep your system up to date by installing the latest versions of the packages available. Another advantage of using software provided by a distribution is that when you perform updates and patches, you not only get bug fixes and security updates for the Linux kernel, you also get updates for all the other software being used on the system. This includes network services, like web servers or database servers, and user space software, like web browsers, for example. On a Linux system, if you want to install software, you search the repository using the package manager and install it. Contrast this to other operating systems like Windows. If you want to install a piece of software you search for it on the internet and download it off some website. That software has not been reviewed by Microsoft or tested by them. Also, it's probably not open source software so you really have no idea what it does. The best you can do is hope that it will do what it says it does and no more. Unfortunately, it's a common practice to include, bundle, or slip in some additional software. You may only want to install that one piece of software and you might not realize that it also installs additional software. In the worst case scenarios this additional software is malicious. These problems arise because the software is coming from a third-party source, a source outside of the operating system ecosystem. I use Windows as an example but if you don't use packages from your distribution, then you're open to all the same issues on Linux as well.