Skip to content

gallolabs/NAS

Repository files navigation

Gallo NAS

SAMBA - WEBDAV(s) - SFTP - FTP(s) - NFS

Protocols

  • SMB (samba)
  • webdav(s) (only for guest for this first implementation). Others have to be implemented with dedicated nginx by user + reverse proxy
  • SFTP (Only guest for this first implementation)
  • FTP(s) (only for guest for this first implementation)
  • NFS (only for guest for this first implementation)

This is a simple app for my needs, that can be improved.

What misses (except protocols)

  • schema check
  • a good webdav server https://github.com/fstanis/awesome-webdav?tab=readme-ov-file#servers
  • disable ipv6 (option)
  • Add build disableable services to reduce image size and attack surface
  • ftp logrotate
  • webdav list of visible shares depending of the user (or not, like SMB)
  • Galloapp integration to add various config inputs and metrics (on loggings for example)
  • support container restart

Example of use

See docker-compose.yml. The config example :

{
  "groups": [
      {
          "name": "family",
          "id": "1100"
      }
  ],
  "users": [
      {
          "name": "me",
          "id": "1001",
          "groups": ["family"],
          "password": "myself"
      },
      {
          "name": "spouse",
          "id": "1002",
          "groups": ["family"],
          "password": "heshe"
      },
      {
          "name": "anybody",
          "id": "1003"
      }
  ],
  "guestUser": "anybody",
  "shares": [
      {
          "channels": ["smb", "webdav", "sftp", "ftp", "nfs"],
          "name": "music",
          "path": "/mnt/toto",
          "uMasks": {
            "allowedForFiles": "0660",
            "allowedForDirs": "0770",
            "forcedForFiles": "0660",
            "forcedForDirs": "0770",
            "recycleDir": "0770"
          },
          "recycle": true,
          "permissions": [
              {
                  "mode": "rw",
                  "users": ["me"],
                  "groups": ["family"]
              },
              {
                  "mode": "ro",
                  "guest": true
              }
          ]
      }
  ]
}

No Linux ACL are changed, this is an intrusive behavior. Ensure your storages root directories have the good uid/guid/ACL and your configuration is logic.

Releases

No releases published

Packages

No packages published