<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.scalelogicinc.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ai-B</id>
	<title>Scalelogic Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.scalelogicinc.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ai-B"/>
	<link rel="alternate" type="text/html" href="http://wiki.scalelogicinc.com/zx/Special:Contributions/Ai-B"/>
	<updated>2026-05-05T04:49:01Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.5</generator>
	<entry>
		<id>http://wiki.scalelogicinc.com/zx/index.php?title=Extension:FTP_File_Sharing_rev_06&amp;diff=1852</id>
		<title>Extension:FTP File Sharing rev 06</title>
		<link rel="alternate" type="text/html" href="http://wiki.scalelogicinc.com/zx/index.php?title=Extension:FTP_File_Sharing_rev_06&amp;diff=1852"/>
		<updated>2026-04-23T16:05:00Z</updated>

		<summary type="html">&lt;p&gt;Ai-B: Initial article for xc-ftpd rev 06 (FTP File Sharing extension)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
FTP file sharing container powered by [http://www.proftpd.org/ ProFTPD]. Provides anonymous FTP access with full read-write permissions to all configured shares.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; FTP File Sharing is delivered as an optional Small Update (the &#039;&#039;&#039;xc-ftpd&#039;&#039;&#039; module). This article describes revision &#039;&#039;&#039;06&#039;&#039;&#039;. If your system was updated to a newer revision, refer to the matching &#039;&#039;Extension:FTP_File_Sharing_rev_NN&#039;&#039; article.&lt;br /&gt;
&lt;br /&gt;
== How to access ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Protocol:&#039;&#039;&#039; FTP (plain, unencrypted)&lt;br /&gt;
* &#039;&#039;&#039;Port:&#039;&#039;&#039; 21&lt;br /&gt;
* &#039;&#039;&#039;Username:&#039;&#039;&#039; &#039;&#039;&#039;anonymous&#039;&#039;&#039; (or &#039;&#039;&#039;ftp&#039;&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;Password:&#039;&#039;&#039; none (empty)&lt;br /&gt;
* &#039;&#039;&#039;URL:&#039;&#039;&#039; &amp;lt;code&amp;gt;ftp://&amp;amp;lt;server-ip&amp;amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All shares defined on the system are automatically exposed via FTP (not all datasets &amp;amp;mdash; only those configured as shares). There is no per-share FTP toggle in the GUI. Anonymous users have full read-write access to all shares.&lt;br /&gt;
&lt;br /&gt;
=== Using FileZilla ===&lt;br /&gt;
&lt;br /&gt;
In the FileZilla &#039;&#039;Site Manager&#039;&#039; (or the Quickconnect fields), set:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Protocol:&#039;&#039;&#039; &#039;&#039;FTP &amp;amp;ndash; File Transfer Protocol&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Host:&#039;&#039;&#039; &#039;&#039;storage-server-ip-address&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Port:&#039;&#039;&#039; 21&lt;br /&gt;
* &#039;&#039;&#039;Encryption:&#039;&#039;&#039; &#039;&#039;Only use plain FTP (insecure)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Logon Type:&#039;&#039;&#039; &#039;&#039;Anonymous&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Directory structure ===&lt;br /&gt;
&lt;br /&gt;
Shares appear as a flat list at the FTP root, identified by their share name:&lt;br /&gt;
&lt;br /&gt;
  ftp://server/&lt;br /&gt;
  +-- share-name-1/&lt;br /&gt;
  +-- share-name-2/&lt;br /&gt;
  +-- share-name-3/&lt;br /&gt;
  +-- ...&lt;br /&gt;
&lt;br /&gt;
This differs from revisions prior to rev 06, where the FTP root was the &#039;&#039;/Pools&#039;&#039; directory and users navigated the pool/dataset hierarchy directly (e.g. &#039;&#039;Pool-0/dataset1/&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
ProFTPD configuration is visible from rootconsole under &#039;&#039;&#039;/mnt/host/etc/proftpd/&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== File permissions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Path (from rootconsole) !! Access !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;/mnt/host/etc/proftpd/proftpd.conf&#039;&#039;&#039; || read-only || Main config &amp;amp;mdash; not user-editable&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;/mnt/host/etc/proftpd/modules.conf&#039;&#039;&#039; || read-only || Module loading &amp;amp;mdash; not user-editable&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;/mnt/host/etc/proftpd/conf.d/&#039;&#039;&#039; || read-write || User drop-in configs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;/mnt/host/etc/proftpd/share_*.conf.inc&#039;&#039;&#039; || read-only || Future FTPS/SFTP templates&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Customizing via conf.d/ ===&lt;br /&gt;
&lt;br /&gt;
Administrators can add or modify &#039;&#039;&#039;.conf&#039;&#039;&#039; files in &#039;&#039;/mnt/host/etc/proftpd/conf.d/&#039;&#039; to tune connection limits, timeouts, network settings and other ProFTPD directives.&lt;br /&gt;
&lt;br /&gt;
Included files:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;limits.conf&#039;&#039;&#039; &amp;amp;mdash; connection limits and timeouts. Sets &#039;&#039;MaxClients&#039;&#039;, &#039;&#039;MaxClientsPerHost&#039;&#039;, &#039;&#039;MaxInstances&#039;&#039; (all unlimited by default), timeouts for idle/stalled/login, &#039;&#039;MaxLoginAttempts&#039;&#039;, and &#039;&#039;AllowForeignAddress&#039;&#039; (FXP).&lt;br /&gt;
* &#039;&#039;&#039;proftpd.conf.inactive&#039;&#039;&#039; &amp;amp;mdash; template for binding ProFTPD to a specific IP address. Rename to &#039;&#039;&#039;proftpd.conf&#039;&#039;&#039; to activate. Uncomment and set &#039;&#039;&#039;DefaultAddress&#039;&#039;&#039; to restrict which interface FTP listens on.&lt;br /&gt;
&lt;br /&gt;
Naming convention:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;*.conf&#039;&#039;&#039; &amp;amp;mdash; active, loaded by ProFTPD&lt;br /&gt;
* &#039;&#039;&#039;*.conf.inactive&#039;&#039;&#039; &amp;amp;mdash; disabled template (rename to &#039;&#039;&#039;.conf&#039;&#039;&#039; to activate)&lt;br /&gt;
&lt;br /&gt;
After editing, reload or restart the container from rootconsole for changes to take effect:&lt;br /&gt;
&lt;br /&gt;
  service lxc@ftpd reload    # SIGHUP proftpd (fast; no session drop beyond SIGHUP)&lt;br /&gt;
  service lxc@ftpd restart   # full container restart&lt;br /&gt;
&lt;br /&gt;
=== Logs ===&lt;br /&gt;
&lt;br /&gt;
ProFTPD logs are persisted so they survive container restarts. From rootconsole they are visible at:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;/mnt/host/var/log/xc-ftpd/proftpd/proftpd.log&#039;&#039;&#039; &amp;amp;mdash; main daemon log&lt;br /&gt;
* &#039;&#039;&#039;/mnt/host/var/log/xc-ftpd/proftpd/extended.log&#039;&#039;&#039; &amp;amp;mdash; detailed per-command log&lt;br /&gt;
* &#039;&#039;&#039;/mnt/host/var/log/xc-ftpd/proftpd/xferlog&#039;&#039;&#039; &amp;amp;mdash; file transfer log&lt;br /&gt;
&lt;br /&gt;
=== Security restrictions ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;VRootAlias and VRootEngine directives are not allowed in conf.d/.&#039;&#039;&#039; Any VRoot directives placed there will be silently ignored or rejected. This prevents exposing paths outside the storage pools.&lt;br /&gt;
* &#039;&#039;&#039;Share paths are validated.&#039;&#039;&#039; Only shares under &#039;&#039;/Pools/&#039;&#039; are accepted; any others are rejected and the rejection is logged via syslog.&lt;br /&gt;
* &#039;&#039;&#039;Share mappings are auto-generated only.&#039;&#039;&#039; They are regenerated on every boot and pool change, and cannot be manually edited to persist.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
* Shares are discovered automatically at container startup.&lt;br /&gt;
* Each share is mapped by name (share name &amp;amp;rarr; path on pool).&lt;br /&gt;
* When storage pools are mounted or unmounted, the share list is refreshed automatically &amp;amp;mdash; no manual action needed.&lt;br /&gt;
&lt;br /&gt;
== Known issues and limitations ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anonymous access only.&#039;&#039;&#039; This revision does not support per-user authentication. Any client that can reach port 21 has full read-write access to every share.&lt;br /&gt;
* &#039;&#039;&#039;No encryption.&#039;&#039;&#039; FTPS (explicit TLS) and SFTP (SSH File Transfer Protocol) are &#039;&#039;&#039;not&#039;&#039;&#039; enabled in this revision. Configuration templates for both protocols are present in &#039;&#039;/mnt/host/etc/proftpd/&#039;&#039; but are disabled. Support for FTPS and SFTP is planned for a future revision.&lt;br /&gt;
* &#039;&#039;&#039;No per-share FTP toggle.&#039;&#039;&#039; All shares are exposed automatically; there is no option in the GUI to exclude a specific share from FTP. To hide a share from FTP, remove its share configuration on the system.&lt;br /&gt;
* &#039;&#039;&#039;Unencrypted traffic.&#039;&#039;&#039; File contents and directory listings are transmitted in plain text over the network. Use FTP only on trusted network segments until FTPS/SFTP are available.&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&lt;br /&gt;
=== rev 06 ===&lt;br /&gt;
&lt;br /&gt;
* FTP-only (anonymous, read-write)&lt;br /&gt;
* Flat share listing by name (previously pool/dataset hierarchy)&lt;br /&gt;
* Config visible from rootconsole at &#039;&#039;/mnt/host/etc/proftpd/&#039;&#039;; &#039;&#039;conf.d/&#039;&#039; writable for user tuning&lt;br /&gt;
* VRoot directives blocked in &#039;&#039;conf.d/&#039;&#039; (security: prevents path exposure)&lt;br /&gt;
* Share path validation (only &#039;&#039;/Pools/&#039;&#039; allowed)&lt;br /&gt;
* Share list auto-refresh on pool mount/unmount events&lt;br /&gt;
* &#039;&#039;lxc@ftpd&#039;&#039; init script: &#039;&#039;service lxc@ftpd reload/restart&#039;&#039; usable from rootconsole&lt;br /&gt;
&lt;br /&gt;
=== rev 05 ===&lt;br /&gt;
&lt;br /&gt;
* Updated base system&lt;br /&gt;
&lt;br /&gt;
=== rev 04 ===&lt;br /&gt;
&lt;br /&gt;
* Added VRoot support&lt;br /&gt;
* Share config auto-generation&lt;br /&gt;
&lt;br /&gt;
=== rev 03 ===&lt;br /&gt;
&lt;br /&gt;
* Setting &#039;&#039;MaxClients&#039;&#039;, &#039;&#039;MaxClientsPerHost&#039;&#039; to none (as no limit)&lt;br /&gt;
* Setting &#039;&#039;MaxConnections&#039;&#039; to none&lt;br /&gt;
&lt;br /&gt;
=== rev 02 ===&lt;br /&gt;
&lt;br /&gt;
* Option &#039;&#039;AllowForeignAddress&#039;&#039; changed to on in order to allow &#039;&#039;FXP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
For further customization or troubleshooting, refer to the [http://www.proftpd.org/docs/ upstream ProFTPD documentation] or contact your support representative.&lt;br /&gt;
&lt;br /&gt;
[[Category:Help topics]]&lt;br /&gt;
[[Category:Extensions]]&lt;/div&gt;</summary>
		<author><name>Ai-B</name></author>
	</entry>
</feed>