Sometimes there is a need to restrict user access based on time. This could be access to one particular service, or all PAM enabled services. A common example is to only allow access for the user ‘bob’ monday through friday between 9:00AM – 6:00PM. This can be enforced by utilizing the pam_time module.
The pam_time module is an account module type. No arguments are passed directly to the module, but instead all configuration takes place within /etc/security/time.conf.
The time.conf operates based on rules, and each rule uses the following syntax:
services;ttys;users;times
Example Rules
Restrict SSHD access for bob to weekdays between 9:00AM – 7:00PM
sshd;*;bob;Wk0900-1900
Restrict ALL access for bob to weekdays between 9:00AM – 5:00PM
*;*;bob;Wk0900-1700
Restrict ALL access for ALL users except root to weekdays between 9:00AM – 5:00PM
sshd;*;bob;Wk0900-1700
Restrict SSH access for ALL users except bob and jane to weekdays between 9:00AM – 5:00PM
sshd;*;!bob|!jane;Wk0900-1700
To only allow bob to access SSH on Tuesdays between 3:23PM and 4:24PM:
sshd;*;bob;Tu1523-1624
Below is all the available abbreviates for the days of the week:
Mo : Monday Fr : Friday Wd : Sa/Su Tu : Tuesday Sa : Saturday wk : Mo/Tu/We/Th/Fr We : Wenesday Su : Sunday Th : Thursday Al : All Days
Installation And Configuration
In our example, I am going be setting this up on a CentOS 5.x server. For the restricted user, the following variables will be used:
username: bob allowed access times: 9:00AM - 6:00PM restricted services: SSHD
First, add the user and time restriction to /etc/security/time.conf:
sshd;*;bob;Wk0900-1800
Now, update the pam module for login and sshd. You are including ‘account required pam_time.so‘. But I’ll post entire file for reference
cat /etc/pam.d/sshd #%PAM-1.0 auth required pam_sepermit.so auth include password-auth account required pam_time.so account required pam_nologin.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session optional pam_keyinit.so force revoke session include password-auth
cat /etc/pam.d/system-auth #%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authconfig is run. auth required pam_env.so auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 500 quiet auth required pam_deny.so
account required pam_time.so account required pam_unix.so account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 500 quiet account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3 type= password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok password required pam_deny.so
session optional pam_keyinit.so revoke session required pam_limits.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so
And finally, restart SSH
service sshd restart