VPN users through pptp can be authenticated to samba using the smbpasswd RADIUS module. The tutorial focuses on Debian but should be similar for all Debian-based distributions.
First install the radiusclient1 package which will be used to authenticate the pptp users:
aptitude install freeradius radiusclient1
Next, radiusclient must be configured to authenticate to the RADIUS server - in this case, the RADIUS server is on the same host. We edit /etc/radiusclient/servers to add RADIUS server:
# Make sure that this file is mode 600 (readable only to owner)! # #Server Name or Client/Server pair Key #---------------- --------------- #portmaster.elemental.net hardlyasecret #portmaster2.elemental.net donttellanyone HOSTNAME SECRET
where HOSTNAME is the hostname of the RADIUS server and SECRET is the secret defined in /etc/freeradius/clients.conf.
Now, we configure FreeRADIUS by editing /etc/freeradius/clients.conf and adding the secret:
client HOSTNAME {
...
ipaddr = 127.0.0.1
secret = SECRET
...
}
where HOSTNAME is the hostname configured for radiusclient previously.
Then, enable the smbpasswd module in sites-enabled/default. Note that on Debian this is called etc_smbpasswd but should be named smbpasswd instead:
authorize {
...
# renamed from etc_smbpasswd to smbpasswd
smbpasswd
...
}
The next step is to configure the smbpasswd module, which can be found in /etc/freeradius/modules/smbpasswd in order to point to the samba password file:
passwd smbpasswd {
...
filename = /etc/samba/smbpasswd
...
}
Samba should be configured to use the smbpasswd password backend instead of the default tdbsam backend. This can be done by editing /etc/samba/smb.conf:
... passdb backend = smbpasswd ...
Also remember to set permissions on /etc/samba/smbpasswd appropriately so that FreeRADIUS can read it:
chown root:freerad /etc/samba/smbpasswd
this is assuming that FreeRADIUS group name is freerad.
Finally, pptp must have two modules enabled, radius.so and radattr.so. A good configuration file is something like the following:
name pptpd refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 ms-dns 172.16.2.1 ms-wins 172.16.2.1 proxyarp nodefaultroute lock nobsdcomp plugin radius.so plugin radattr.so lcp-echo-failure 10 lcp-echo-interval 60
Note that we use mschap here and additionally MPPE encryption.
Now that everything is set-up, we can restart the services:
service samba restart service freeradius restart service pptpd restart
to pick-up all the changes.