On 12/11/16 14:48, debbie10t wrote:
> 
> 
> On 12/11/16 11:38, David Sommerseth wrote:
>> There are several changes which allows systemd to take care of several
>> aspects of hardening the execution of OpenVPN.
>>
>> - Let systemd take care of the process tracking directly, instead
>>   of doing that via PID files
>>
>> - Make systemd prepare proper runtime directories for the OpenVPN
>>   process.
>>
>> - Let systemd do the chdir() before starting OpenVPN.  This allows
>>   us to avoid using the --cd option when executing openvpn.
>>
>> - CAP_DAC_OVERRIDE was needed when using --chroot.  Otherwise
>>   the root user would not be allowed to access files/directories
>>   not owned by root.  This will change in the future, when we
>>   find better ways to avoid calling chroot() in OpenVPN and
>>   rather let systemd prepare a more isolated namespace.
>>
>> - Client configurations are now started with --nobind and
>>   the OpenVPN client process have lost the CAP_NET_BIND_SERVICE
>>   capability which allows binding to port < 1024.
>>
>> - Documentation URL now points at the OpenVPN 2.4 man page URL
>>
>> The majority of these changes have been proposed by Elias Probst
>> (eliasp) in the GitHub PR #22.
>>
>> v2 - Change RuntimeDirectory= to a profile specific (client, server)
>>      directory to avoid clashing with older distro unit files
>>
>> Contribution-by: Elias Probst <m...@eliasprobst.eu>
>> Signed-off-by: David Sommerseth <dav...@openvpn.net>
>> ---
>>  distro/systemd/openvpn-client@.service | 11 ++++++-----
>>  distro/systemd/openvpn-server@.service | 14 ++++++++------
>>  2 files changed, 14 insertions(+), 11 deletions(-)
>>
>> diff --git a/distro/systemd/openvpn-client@.service 
>> b/distro/systemd/openvpn-client@.service
>> index 56d93a9..661f4a9 100644
>> --- a/distro/systemd/openvpn-client@.service
>> +++ b/distro/systemd/openvpn-client@.service
>> @@ -3,15 +3,16 @@ Description=OpenVPN tunnel for %I
>>  After=syslog.target network-online.target
>>  Wants=network-online.target
>>  Documentation=man:openvpn(8)
>> -Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
>> +Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
>>  Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO
>>
>>  [Service]
>>  PrivateTmp=true
>> -Type=forking
>> -PIDFile=/var/run/openvpn/client_%i.pid
>> -ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/client --config %i.conf 
>> --daemon --writepid /var/run/openvpn/client_%i.pid
>> -CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE 
>> CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_READ_SEARCH
>> +RuntimeDirectory=openvpn-client
>> +RuntimeDirectoryMode=0710
>> +WorkingDirectory=/etc/openvpn/client
>> +ExecStart=/usr/sbin/openvpn --suppress-timestamps --nobind --config %i.conf
>> +CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_RAW CAP_SETGID 
>> CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE
>>  LimitNPROC=10
>>  DeviceAllow=/dev/null rw
>>  DeviceAllow=/dev/net/tun rw
>> diff --git a/distro/systemd/openvpn-server@.service 
>> b/distro/systemd/openvpn-server@.service
>> index c4c9a12..48d9271 100644
>> --- a/distro/systemd/openvpn-server@.service
>> +++ b/distro/systemd/openvpn-server@.service
>> @@ -1,16 +1,18 @@
>>  [Unit]
>>  Description=OpenVPN service for %I
>> -After=syslog.target network.target
>> +After=syslog.target network-online.target
>> +Wants=network-online.target
>>  Documentation=man:openvpn(8)
>> -Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
>> +Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
>>  Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO
>>
>>  [Service]
>>  PrivateTmp=true
>> -Type=forking
>> -PIDFile=/var/run/openvpn/server_%i.pid
>> -ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/server --status 
>> /var/run/openvpn/server_%i-status.log --status-version 2 --config %i.conf 
>> --daemon --writepid /var/run/openvpn/server_%i.pid
>> -CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE 
>> CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_READ_SEARCH
>> +RuntimeDirectory=openvpn-server
>> +RuntimeDirectoryMode=0710
>> +WorkingDirectory=/etc/openvpn/server
>> +ExecStart=/usr/sbin/openvpn --status %t/openvpn-server/status-%i.log 
>> --status-version 2 --suppress-timestamps --config %i.conf
>> +CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE 
>> CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE
>>  LimitNPROC=10
>>  DeviceAllow=/dev/null rw
>>  DeviceAllow=/dev/net/tun rw
>>
> 
> Out of curiosity, is there a reason to put --config last ?

Yes, that is to allow a sys-admin to easily change our defaults without
modifying the unit file.

With that said, I do see a potential little trap.  A config file cannot
use --daemon, as that will break how systemd expects the process to
behave when being started successfully.  We should probably add a simple
'grep' check in the config file, to ensure "^daemon" is not found there.
 I'll check this out further.


-- 
kind regards,

David Sommerseth
OpenVPN Technologies, Inc


Attachment: signature.asc
Description: OpenPGP digital signature

------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to