Requires __CrushFTP__ version __9.3.1__+

The concept of a limited server is such that the owner of the hardware or OS can delegate server administration out to a third party, another admin.  This delegation allows the server owner to set a locked location for server config files, and the server install versus the location user data files are placed.\\

In this limited mode, the __TempAccounts__ and __Preview__ folders need to be moved from the default CrushFTP folder location to a location within the user data root. Then correct the path settings on Preferences->Preview page "Previews Path", respectively on Server Admin->Shares page, "General Settings" menu "Location of temp account file system" field. Otherwise image/document preview thumbnails or shared files can not be retrieved. If also the __"server.file.strict"__ flag is set to __"true"__, the CrushFTP service won't even start up for it's in violation of it's own access rules.\\

Example:\\
The server install could be: /C:/CrushFTP9/ , in __UNIX-style__ path notation, regardless of operating system family \\
So prefs, user config, certificates, private keys can all be there.\\

The user data storage could be: /D:/UserData/ , same UNIX-style path notation \\
So even if the admin tried to, they could not give a user access to something located in the C: drive.  They can only give users access to things in the D:\UserData\ folder area and sub areas.  The core functions in CrushFTP prevent accessing items out of their area.

The configuration is done via startup flags that change the behavior of CrushFTP.\\
__file.warn__ = log an error about the violation, mainly useful for debugging why something got blocked (default=true)\\
__file.log__ = if a separate audit log should be kept with all the error info (default=false)\\
__file.strict__ = if its true, the action is blocked. Otherwise its allowed and just the error info is logged (default=false)\\
__security.exec__ = controls if external processes can be launched from the Preview config or not (default=true)\\
!Windows:
Edit the CrushFTPServer.ini file in the "service" subdirectory of the CrushFTP installation folder and append this to it (note the double backslashes due to config file encoding):\\
{{{
vmarg.2=-Dcrushftp.server.root=C:/CrushFTP9/
vmarg.3=-Dcrushftp.user.root=C:/ftproot/
vmarg.4=-Dcrushftp.server.file.warn=true
vmarg.5=-Dcrushftp.server.file.log=false
vmarg.6=-Dcrushftp.security.exec=true
vmarg.7=-Dcrushftp.server.file.strict=true
}}}
!OSX / Linux / Other
Edit the startup launcher (OSX=CrushFTP.command file in the CrushFTP folder, CrushFTP9.app/Contents/MacOS/CrushFTP.command) (Linux=/var/opt/CrushFTP9/crushftp_init.sh)\\
\\
Find the "-Xmx" which is setting the memory arguments and configure these arguments before it:
{{{
-Dcrushftp.server.root=/var/opt/CrushFTP9/ -Dcrushftp.user.root=/home/UserData/ -Dcrushftp.server.file.warn=true -Dcrushftp.server.file.log=false -Dcrushftp.server.file.strict=true -Dcrushftp.security.exec=true -Xmx.........
}}}

''Path arguments are __case sensitive__ even if the OS/filesystem is not.''

Applying the crushftp.server.root and crushftp.user.root JVM runtime parameters at least , will have the equivalent results of UNIX chrooting.
\\
!IMPORTANT\\
The __TempAccounts__ and __Preview__ folders need to be moved under the path set for user root then the settings updated accordingly for preview paths and temp account paths.\\
\\
Also if the __Dcrushftp.server.file.strict__ flag is set __true__, on any kind of misconfiguration in this area, the server process will not start.