Linux: Hardening Techniques
Password Composition Controls
Password Complexity
Password complexity requires different characters types in a password, like uppercase, lowercase, digits, and symbols. it ensures that user passwords include a mix of character types, such as uppercase letters, lowercase letters, numbers, and special characters. Password complexity is managed through PAM. To the user password complexity, edit /etc/security/pwquality.conf
# password should include at least 4 characters of different categories
minclass = 4
Password Length
Password length sets the minimum number of characters required in a password. It is also configured through the pam_pwquality
module.
# set minimum password length
minlen = 12
Password lifecycle Controls
Password lifecycle controls require users to change their passwords regularly.
Password Expiration
Password expiration forces users to change their passwords after a certain number of days. chage
is used to control this setting per user account basis.
# To change user password max age
chage -M 90 samuel
Password History
Password History keeps track of old passwords to support Password reuse.
Password Reuse
Password reuse prevents users from reusing old passwords. pam_pwhistory
tracks old passwords in order to block password reuse. To change the settings, edit /etc/pam.d/common-password
.
# to prevent any user from reusing their last 5 passwords
password requisite pam_pwhistory.so remember=5
Checking existing breach lists
Have I Been Pwned - HIBP
Checks email addresses against known public breaches.
Have I Been Pwned haveibeenpwned.com
Via API:
# check for email in breach
https://haveibeenpwned.com/api/v3/breachedaccount/jdoe@email.com
DeHashed
DeHashed provides deeper insight with email, phone number, username, ip address, and document searches in breach data.
Via API:
# to search break data for a selected email address
https://api.dehashed.com/search?query=jdoe@email.com&size=20
Intelx.io
Intelx.io provides enterprise-grade OSINT solution, aggregating data from dark-web forums, paste sites, and public breache dumps with powerful query syntax and API access.
Restricted shell use
/sbin/nologin
/sbin/nologin
prevents interactive login.
ex:
# to create a user withn o shell access. Go for automated services
useradd -s /sbin/nologin backupbot
/bin/rbash
/bin/rbash
provides limited shell access to users. It restricts actions like changing directories, modifying environment variables, or executing programs rom unexpected locations.
ex:
# create a user with restricted bash shell
useradd -s /bin/rbash -m reports
pam_tally2
pam_tally2
helps monitor and respond to failed login attempts.
/etc/pam.d/common-auth
/etc/pam.d/login
# to lock account after 5 failed attempts
# and automatically unlock it after 10 minutes
auth required pam_tally2.so onerr=fail deny=5 unlock_time=600
pam_tally2 # to view a summary of all failed attempts
pam_tally2 --user john # to view a summary of all failed attempts for a selected user
Avoid Running as root user
sudoers
/etc/sudoers
is edited using visudo
to prevent errors.
# give the user access to restart Nginx and nothing more
john ALL=(ALL) /sbin/systemctl restart nginx
PolKit (PolicyKit)
pkexec
runs a command as another user
pkaction
lists available privileged operations on the system
pkcheck
checks whether a user is authorized to perform a specific action
pkttyagent
provides a prompt for authentication in a terminal session