Ver código fonte

subsystem mode: add base-home-dir flag

Nicola Murino 4 anos atrás
pai
commit
36151d1ba9
2 arquivos alterados com 55 adições e 35 exclusões
  1. 16 3
      cmd/startsubsys.go
  2. 39 32
      docs/sftp-subsystem.md

+ 16 - 3
cmd/startsubsys.go

@@ -22,6 +22,7 @@ import (
 var (
 	logJournalD     = false
 	preserveHomeDir = false
+	baseHomeDir     = ""
 	subsystemCmd    = &cobra.Command{
 		Use:   "startsubsys",
 		Short: "Use SFTPGo as SFTP file transfer subsystem",
@@ -54,8 +55,8 @@ Command-line flags should be specified in the Subsystem declaration.
 			}
 			username := osUser.Username
 			homedir := osUser.HomeDir
-			logger.Info(logSender, connectionID, "starting SFTPGo %v as subsystem, user %#v home dir %#v config dir %#v",
-				version.Get(), username, homedir, configDir)
+			logger.Info(logSender, connectionID, "starting SFTPGo %v as subsystem, user %#v home dir %#v config dir %#v base home dir %#v",
+				version.Get(), username, homedir, configDir, baseHomeDir)
 			err = config.LoadConfig(configDir, configFile)
 			if err != nil {
 				logger.Error(logSender, connectionID, "unable to load configuration: %v", err)
@@ -95,7 +96,12 @@ Command-line flags should be specified in the Subsystem declaration.
 				}
 			} else {
 				user.Username = username
-				user.HomeDir = homedir
+				if baseHomeDir != "" && filepath.IsAbs(baseHomeDir) {
+					user.HomeDir = filepath.Join(baseHomeDir, username)
+				} else {
+					user.HomeDir = filepath.Clean(homedir)
+				}
+				logger.Debug(logSender, connectionID, "home dir for new user %#v", user.HomeDir)
 				user.Password = connectionID
 				user.Permissions = make(map[string][]string)
 				user.Permissions["/"] = []string{dataprovider.PermAny}
@@ -119,6 +125,13 @@ Command-line flags should be specified in the Subsystem declaration.
 func init() {
 	subsystemCmd.Flags().BoolVarP(&preserveHomeDir, "preserve-home", "p", false, `If the user already exists, the existing home
 directory will not be changed`)
+	subsystemCmd.Flags().StringVarP(&baseHomeDir, "base-home-dir", "d", "", `If the user does not exist specify an alternate
+starting directory. The home directory for a new
+user will be:
+
+<base-home-dir>/<username>
+
+base-home-dir must be an absolute path.`)
 	subsystemCmd.Flags().BoolVarP(&logJournalD, "log-to-journald", "j", false, `Send logs to journald. Only available on Linux.
 Use:
 

+ 39 - 32
docs/sftp-subsystem.md

@@ -16,38 +16,45 @@ Usage:
   sftpgo startsubsys [flags]
 
 Flags:
-  -c, --config-dir string    Location for SFTPGo config dir. This directory
-                             should contain the "sftpgo" configuration file
-                             or the configured config-file and it is used as
-                             the base for files with a relative path (eg. the
-                             private keys for the SFTP server, the SQLite
-                             database if you use SQLite as data provider).
-                             This flag can be set using SFTPGO_CONFIG_DIR
-                             env var too. (default ".")
-  -f, --config-file string   Name for SFTPGo configuration file. It must be
-                             the name of a file stored in config-dir not the
-                             absolute path to the configuration file. The
-                             specified file name must have no extension we
-                             automatically load JSON, YAML, TOML, HCL and
-                             Java properties. Therefore if you set "sftpgo"
-                             then "sftpgo.json", "sftpgo.yaml" and so on
-                             are searched.
-                             This flag can be set using SFTPGO_CONFIG_FILE
-                             env var too. (default "sftpgo")
-  -h, --help                 help for startsubsys
-  -j, --log-to-journald      Send logs to journald. Only available on Linux.
-                             Use:
-
-                             $ journalctl -o verbose -f
-
-                             To see full logs.
-                             If not set, the logs will be sent to the standard
-                             error
-  -v, --log-verbose          Enable verbose logs. This flag can be set
-                             using SFTPGO_LOG_VERBOSE env var too.
-                              (default true)
-  -p, --preserve-home        If the user already exists, the existing home
-                             directory will not be changed
+  -d, --base-home-dir string   If the user does not exist specify an alternate
+                               starting directory. The home directory for a new
+                               user will be:
+
+                               <base-home-dir>/<username>
+
+                               base-home-dir must be an absolute path.
+  -c, --config-dir string      Location for SFTPGo config dir. This directory
+                               should contain the "sftpgo" configuration file
+                               or the configured config-file and it is used as
+                               the base for files with a relative path (eg. the
+                               private keys for the SFTP server, the SQLite
+                               database if you use SQLite as data provider).
+                               This flag can be set using SFTPGO_CONFIG_DIR
+                               env var too. (default ".")
+  -f, --config-file string     Name for SFTPGo configuration file. It must be
+                               the name of a file stored in config-dir not the
+                               absolute path to the configuration file. The
+                               specified file name must have no extension we
+                               automatically load JSON, YAML, TOML, HCL and
+                               Java properties. Therefore if you set "sftpgo"
+                               then "sftpgo.json", "sftpgo.yaml" and so on
+                               are searched.
+                               This flag can be set using SFTPGO_CONFIG_FILE
+                               env var too. (default "sftpgo")
+  -h, --help                   help for startsubsys
+  -j, --log-to-journald        Send logs to journald. Only available on Linux.
+                               Use:
+
+                               $ journalctl -o verbose -f
+
+                               To see full logs.
+                               If not set, the logs will be sent to the standard
+                               error
+  -v, --log-verbose            Enable verbose logs. This flag can be set
+                               using SFTPGO_LOG_VERBOSE env var too.
+                                (default true)
+  -p, --preserve-home          If the user already exists, the existing home
+                               directory will not be changed
 ```
 
 In this mode `bolt` and `sqlite` providers are not usable as the same database file cannot be shared among multiple processes, if one of these provider is configured it will be automatically changed to `memory` provider.