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\\ Before applying the restrictive run time arguments, the __TempAccounts__ and __Preview__ folders need to be moved under the path set for user root. The server __SSL keystore__ file to be moved under the server root. Then the settings updated accordingly.\\ Especially in case of setting the __Dcrushftp.server.file.strict__ flag to __true__, for in case of any kind of misconfiguration in this area, the server process will not start.\\