<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.scalelogicinc.com/index.php?action=history&amp;feed=atom&amp;title=Extension%3AFTP_File_Sharing_rev_06</id>
	<title>Extension:FTP File Sharing rev 06 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.scalelogicinc.com/index.php?action=history&amp;feed=atom&amp;title=Extension%3AFTP_File_Sharing_rev_06"/>
	<link rel="alternate" type="text/html" href="http://wiki.scalelogicinc.com/nx/index.php?title=Extension:FTP_File_Sharing_rev_06&amp;action=history"/>
	<updated>2026-05-05T04:25:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.5</generator>
	<entry>
		<id>http://wiki.scalelogicinc.com/nx/index.php?title=Extension:FTP_File_Sharing_rev_06&amp;diff=1645&amp;oldid=prev</id>
		<title>Ai-B: Initial article for xc-ftpd rev 06 (FTP File Sharing extension)</title>
		<link rel="alternate" type="text/html" href="http://wiki.scalelogicinc.com/nx/index.php?title=Extension:FTP_File_Sharing_rev_06&amp;diff=1645&amp;oldid=prev"/>
		<updated>2026-04-23T16:04:59Z</updated>

		<summary type="html">&lt;p&gt;Initial article for xc-ftpd rev 06 (FTP File Sharing extension)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&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;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; FTP File Sharing is delivered as an optional Small Update (the &amp;#039;&amp;#039;&amp;#039;xc-ftpd&amp;#039;&amp;#039;&amp;#039; module). This article describes revision &amp;#039;&amp;#039;&amp;#039;06&amp;#039;&amp;#039;&amp;#039;. If your system was updated to a newer revision, refer to the matching &amp;#039;&amp;#039;Extension:FTP_File_Sharing_rev_NN&amp;#039;&amp;#039; article.&lt;br /&gt;
&lt;br /&gt;
== How to access ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Protocol:&amp;#039;&amp;#039;&amp;#039; FTP (plain, unencrypted)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Port:&amp;#039;&amp;#039;&amp;#039; 21&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Username:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;anonymous&amp;#039;&amp;#039;&amp;#039; (or &amp;#039;&amp;#039;&amp;#039;ftp&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Password:&amp;#039;&amp;#039;&amp;#039; none (empty)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;URL:&amp;#039;&amp;#039;&amp;#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 &amp;#039;&amp;#039;Site Manager&amp;#039;&amp;#039; (or the Quickconnect fields), set:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Protocol:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;FTP &amp;amp;ndash; File Transfer Protocol&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Host:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;storage-server-ip-address&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Port:&amp;#039;&amp;#039;&amp;#039; 21&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Encryption:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;Only use plain FTP (insecure)&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Logon Type:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;Anonymous&amp;#039;&amp;#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 &amp;#039;&amp;#039;/Pools&amp;#039;&amp;#039; directory and users navigated the pool/dataset hierarchy directly (e.g. &amp;#039;&amp;#039;Pool-0/dataset1/&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
ProFTPD configuration is visible from rootconsole under &amp;#039;&amp;#039;&amp;#039;/mnt/host/etc/proftpd/&amp;#039;&amp;#039;&amp;#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;
| &amp;#039;&amp;#039;&amp;#039;/mnt/host/etc/proftpd/proftpd.conf&amp;#039;&amp;#039;&amp;#039; || read-only || Main config &amp;amp;mdash; not user-editable&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;/mnt/host/etc/proftpd/modules.conf&amp;#039;&amp;#039;&amp;#039; || read-only || Module loading &amp;amp;mdash; not user-editable&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;/mnt/host/etc/proftpd/conf.d/&amp;#039;&amp;#039;&amp;#039; || read-write || User drop-in configs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;/mnt/host/etc/proftpd/share_*.conf.inc&amp;#039;&amp;#039;&amp;#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 &amp;#039;&amp;#039;&amp;#039;.conf&amp;#039;&amp;#039;&amp;#039; files in &amp;#039;&amp;#039;/mnt/host/etc/proftpd/conf.d/&amp;#039;&amp;#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;
* &amp;#039;&amp;#039;&amp;#039;limits.conf&amp;#039;&amp;#039;&amp;#039; &amp;amp;mdash; connection limits and timeouts. Sets &amp;#039;&amp;#039;MaxClients&amp;#039;&amp;#039;, &amp;#039;&amp;#039;MaxClientsPerHost&amp;#039;&amp;#039;, &amp;#039;&amp;#039;MaxInstances&amp;#039;&amp;#039; (all unlimited by default), timeouts for idle/stalled/login, &amp;#039;&amp;#039;MaxLoginAttempts&amp;#039;&amp;#039;, and &amp;#039;&amp;#039;AllowForeignAddress&amp;#039;&amp;#039; (FXP).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;proftpd.conf.inactive&amp;#039;&amp;#039;&amp;#039; &amp;amp;mdash; template for binding ProFTPD to a specific IP address. Rename to &amp;#039;&amp;#039;&amp;#039;proftpd.conf&amp;#039;&amp;#039;&amp;#039; to activate. Uncomment and set &amp;#039;&amp;#039;&amp;#039;DefaultAddress&amp;#039;&amp;#039;&amp;#039; to restrict which interface FTP listens on.&lt;br /&gt;
&lt;br /&gt;
Naming convention:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;*.conf&amp;#039;&amp;#039;&amp;#039; &amp;amp;mdash; active, loaded by ProFTPD&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;*.conf.inactive&amp;#039;&amp;#039;&amp;#039; &amp;amp;mdash; disabled template (rename to &amp;#039;&amp;#039;&amp;#039;.conf&amp;#039;&amp;#039;&amp;#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;
* &amp;#039;&amp;#039;&amp;#039;/mnt/host/var/log/xc-ftpd/proftpd/proftpd.log&amp;#039;&amp;#039;&amp;#039; &amp;amp;mdash; main daemon log&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;/mnt/host/var/log/xc-ftpd/proftpd/extended.log&amp;#039;&amp;#039;&amp;#039; &amp;amp;mdash; detailed per-command log&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;/mnt/host/var/log/xc-ftpd/proftpd/xferlog&amp;#039;&amp;#039;&amp;#039; &amp;amp;mdash; file transfer log&lt;br /&gt;
&lt;br /&gt;
=== Security restrictions ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;VRootAlias and VRootEngine directives are not allowed in conf.d/.&amp;#039;&amp;#039;&amp;#039; Any VRoot directives placed there will be silently ignored or rejected. This prevents exposing paths outside the storage pools.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Share paths are validated.&amp;#039;&amp;#039;&amp;#039; Only shares under &amp;#039;&amp;#039;/Pools/&amp;#039;&amp;#039; are accepted; any others are rejected and the rejection is logged via syslog.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Share mappings are auto-generated only.&amp;#039;&amp;#039;&amp;#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;
* &amp;#039;&amp;#039;&amp;#039;Anonymous access only.&amp;#039;&amp;#039;&amp;#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;
* &amp;#039;&amp;#039;&amp;#039;No encryption.&amp;#039;&amp;#039;&amp;#039; FTPS (explicit TLS) and SFTP (SSH File Transfer Protocol) are &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; enabled in this revision. Configuration templates for both protocols are present in &amp;#039;&amp;#039;/mnt/host/etc/proftpd/&amp;#039;&amp;#039; but are disabled. Support for FTPS and SFTP is planned for a future revision.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;No per-share FTP toggle.&amp;#039;&amp;#039;&amp;#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;
* &amp;#039;&amp;#039;&amp;#039;Unencrypted traffic.&amp;#039;&amp;#039;&amp;#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 &amp;#039;&amp;#039;/mnt/host/etc/proftpd/&amp;#039;&amp;#039;; &amp;#039;&amp;#039;conf.d/&amp;#039;&amp;#039; writable for user tuning&lt;br /&gt;
* VRoot directives blocked in &amp;#039;&amp;#039;conf.d/&amp;#039;&amp;#039; (security: prevents path exposure)&lt;br /&gt;
* Share path validation (only &amp;#039;&amp;#039;/Pools/&amp;#039;&amp;#039; allowed)&lt;br /&gt;
* Share list auto-refresh on pool mount/unmount events&lt;br /&gt;
* &amp;#039;&amp;#039;lxc@ftpd&amp;#039;&amp;#039; init script: &amp;#039;&amp;#039;service lxc@ftpd reload/restart&amp;#039;&amp;#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 &amp;#039;&amp;#039;MaxClients&amp;#039;&amp;#039;, &amp;#039;&amp;#039;MaxClientsPerHost&amp;#039;&amp;#039; to none (as no limit)&lt;br /&gt;
* Setting &amp;#039;&amp;#039;MaxConnections&amp;#039;&amp;#039; to none&lt;br /&gt;
&lt;br /&gt;
=== rev 02 ===&lt;br /&gt;
&lt;br /&gt;
* Option &amp;#039;&amp;#039;AllowForeignAddress&amp;#039;&amp;#039; changed to on in order to allow &amp;#039;&amp;#039;FXP&amp;#039;&amp;#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>