In Red Hat Enterprise Linux 5 (RHEL 5), when a user is listed in the /etc/sudoers file, they can execute commands with root privileges by prefixing them with sudo. The authentication mechanism requires the user to enter their own password, not the root password. This is by design and represents the standard sudo behavior across Unix-like systems.
# Example /etc/sudoers entry
george ALL=(ALL) ALL
While this might appear as a security vulnerability at first glance, it's actually a controlled delegation of privileges. The key security considerations are:
- Sudo access is explicitly granted by the system administrator
- All sudo commands are logged in
/var/log/secure - Command execution can be restricted to specific commands
- Password caching has timeout controls
To maintain security while using sudo:
# Instead of full access, grant specific commands
george ALL=(root) /usr/bin/updatedb, /usr/bin/yum update
# Configure password timeout
Defaults:george timestamp_timeout=5
Implement robust logging to track sudo activity:
# Enhanced sudo logging configuration
Defaults logfile=/var/log/sudo.log
Defaults log_input, log_output
Defaults iolog_dir=/var/log/sudo-io/%{user}
For more granular control, consider:
- Using SELinux contexts for specific applications
- Implementing RBAC (Role-Based Access Control)
- Creating restricted shells for certain users
Here's a production-grade sudoers configuration snippet:
# Allow dbadmin to manage database services without full root
User_Alias DBADMINS = dbuser1, dbuser2
Cmnd_Alias DBSERVICES = /sbin/service mysqld *, /sbin/service postgresql *
DBADMINS ALL=(root) NOPASSWD: DBSERVICES
# Developers can restart web services but not system services
User_Alias DEVS = dev1, dev2
Cmnd_Alias WEBSERVICES = /sbin/service httpd *, /sbin/service nginx *
DEVS ALL=(root) WEBSERVICES
In Red Hat Enterprise Linux 5, when a user is listed in the /etc/sudoers file, they can execute commands with root privileges by prefixing them with sudo. The authentication requires their own password, not the root password. This is indeed the expected behavior of sudo.
# Example sudoers entry: george ALL=(ALL) ALL
While this might appear as a security hole at first glance, it's actually a designed feature with proper security controls:
- Privileges are explicitly granted in sudoers file
- All sudo commands are logged in
/var/log/secure - Password authentication provides an additional layer
Improper sudo configuration can lead to privilege escalation. Consider these security best practices:
# Instead of broad permissions: # user ALL=(ALL) ALL # Use specific command restrictions: george ALL=(root) /usr/bin/yum, /usr/bin/systemctl restart httpd
For sensitive environments, implement additional restrictions:
# Require password for specific commands Cmnd_Alias CRITICAL = /bin/su, /usr/bin/passwd george ALL=(ALL) ALL, !CRITICAL # Time-based restrictions Defaults:george timestamp_timeout=30
Implement comprehensive logging:
# Enhanced sudo logging Defaults log_host, log_year, log_input, log_output Defaults!/bin/su !syslog
Regularly audit sudo usage with:
grep sudo /var/log/secure | less ausearch -m USER_CMD -ts today
For more granular control, consider:
- Implementing SELinux contexts
- Using capabilities instead of full root access
- Creating restricted shells for specific users
# Example using capabilities: setcap cap_net_raw+ep /usr/bin/ping