wfsctl(8) System Manager's Manual wfsctl(8)

wfsctlWebDAV File Sharing control utility

wfsctl command [arg]

The wfsctl utility allows administrators to start, stop, and check the status of the WebDAV File Sharing service (WFS). It also allows administrators to create and delete WebDAV share points. It operates by configuring the Apache httpd server. The wfsctl command requires root privileges.

wfsctl provides the following commands:

Enable the WFS configuration, and either start or restart the Apache web server to pick it up. If necessary, this action will create an SSL Identity matching the machine's host name as determined by the hostname(1) command, and place it in the System keychain. It will also update, if necessary, environment variable definitions for use by parameterized httpd config files. (Note that starting the Apache web server is the equivalent of "apachectl start" which loads a launch job for the httpd process.)
Disable the WFS configuration, and restart Apache if it's already running.
Display the status of WFS, either "enabled" or "disabled", whether or not Apache is running.
Display existing WebDAV share points.
path
Create a WebDAV share point for the specified file system path.
path | name
Disable WebDAV for the share point at the specified file system path or share point name, and delete the share point if no other file sharing service (AFP or SMB) was enabled on that share point.
Display detailed status of Apache and WebDAV-related processes.

WebDAV File Sharing operates by:

  1. Recognizing WebDAV clients when they send OPTIONS or PROPFIND directives
  2. Requiring such clients to provide OD credentials
  3. Assigning those authenticated users an HTTP cookie to recognize them as WebDAV clients
  4. Launching an instance of the Apache httpd process on behalf of that user, configured as a WebDAV server
  5. Reverse-proxying HTTP traffic to that user-specific instance of httpd, so that the WebDAV client (typically an iWork app on iOS) can access the home directory and share points on the server machine with privileges of the authenticated user
  6. Recognizing share points that are marked as WebDAV share points.

Depending on how Apache is configured, this can coexist with other Apache web service functions.

Certain settings are kept in /etc/wfs/wfs.plist and are configurable by the administrator, including:

The host name the Apache web server should use, and also the Common Name of the identity certificate. If this is not configured, or set to an empty string, the hostname(1) of the machine is used.
The IP address the Apache web server should use to listen for HTTPS requests. Default is "*", which means all addresses.
The TCP port the Apache web server should use to listen for HTTPS requests. Default is the standard HTTPS port, 443.
The Open Directory group allowed access to the WebDAV File Sharing service. The default is "everyone", which gives access to any authenticated user. Administrators can change this setting to restrict access further. Authenticated users will have, at most, the privileges they are normally allowed by file system permissions. There is no provision for guest access, so unauthenticated users have no access.
Whether to allow remote WebDAV clients to see their home directory as a share point. Default is True.

The Apache config file for WebDAV File Sharing is parameterized, and the httpd server is managed by the httpd-wrapper utility, which passes parameters to httpd. This is normally transparent, but note that to check the Apache config file syntax, do not use "apachectl configtest" or "httpd -t". Instead, use "httpd-wrapper -t".

wfsctl returns a status code of 0 for success. In the event of failure it returns a non-zero status, and may also dump additional diagnostic information.

/etc/wfs/httpd_webdavsharing.conf
The parameterized Apache config file for the main instance of httpd
/etc/wfs/httpd_webdavsharing_template.conf
The parameterized Apache config file for the user-specific instances of httpd
/etc/wfs/httpd_webdavsharing_sharepoints.conf
The Apache config file providing directives specific to each share point; dynamically generated when share points are modified by wfsctl
/etc/wfs/wfs.plist
The file where admin-configurable settings for WFS are stored.
/etc/apache2/env.plist
The file where environment variable definitions are managed automatically; these variables are passed to httpd for use in parameterized config files.
/Library/Logs/WebDAVFileSharing.log
The main WebDAV File Sharing log file
/etc/apache2/other/httpd_webdavsharing.conf
A symlink seen by Apache when WebDAV File Sharing is enabled. When WebDAV File Sharing is disabled, this symlink is moved aside.
/var/run/webdavsharing/<username>/
A directory created on the behalf of each authenticated user to store user-specific WebDAV File Sharing logs.
/usr/share/sandbox/wfs.sb
The parameterized sandbox profile for user-specific httpd instances.
/etc/wfs/wfs.sb
The dynamically generated portion of the sandbox profile

When macOS Server is installed and promoted, and the Apache instance for Profile Manager is enabled, WebDAV File Sharing is reconfigured to support the WebDAV behaviors presented by Server:

  1. macOS Server provides HTTP-based services (for Profile Manager) on standard HTTP/S TCP ports 80 and 443. So to avoid port conflict, the desktop Apache configuration (including the configuration for WebDAV File Sharing) is switched to port 81, on localhost only, and WFS traffic is reverse proxied to localhost:81.
  2. macOS Server manages its own SSL certificates, and provides the SSL endpoint. So the desktop Apache configuration for WebDAV File Sharing is switched to non-SSL.

    When macOS Server is installed and promoted, and the Apache instance for Profile Manager is enabled, it is still possible to use wfsctl to manage WebDAV share points, e. g.:

        sudo wfsctl share /Volumes/Data/Share1

  3. Any share points created in the UI on versions of macOS Server that predate High Sierra remain across updates, and those that were marked as WebDAV share points should continue to be available after the update to High Sierra or newer, whether or not macOS Server is installed.

When the Apache instance for Profile Manager is disabled, or when macOS Server is removed or demoted, the port changes and SSL changes described above are reversed.

httpd(8) httpd-wrapper(8)

Sept. 20, 2017 macOS