| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706 |
- Index: servconf.c
- --- servconf.c.orig 2004-08-13 13:30:24 +0200
- +++ servconf.c 2004-08-17 19:57:16 +0200
- @@ -103,6 +103,15 @@
- options->authorized_keys_file2 = NULL;
- options->num_accept_env = 0;
-
- + options->log_sftp = LOG_SFTP_NOT_SET;
- + options->sftp_log_facility = SYSLOG_FACILITY_NOT_SET;
- + options->sftp_log_level = SYSLOG_LEVEL_NOT_SET;
- +
- + memset(options->sftp_umask, 0, SFTP_UMASK_LENGTH);
- +
- + options->sftp_permit_chmod = SFTP_PERMIT_NOT_SET;
- + options->sftp_permit_chown = SFTP_PERMIT_NOT_SET;
- +
- /* Needs to be accessable in many places */
- use_privsep = -1;
- }
- @@ -231,6 +240,24 @@
- if (options->authorized_keys_file == NULL)
- options->authorized_keys_file = _PATH_SSH_USER_PERMITTED_KEYS;
-
- + /* Turn sftp-server logging off by default */
- + if (options->log_sftp == LOG_SFTP_NOT_SET)
- + options->log_sftp = LOG_SFTP_NO;
- + if (options->sftp_log_facility == SYSLOG_FACILITY_NOT_SET)
- + options->sftp_log_facility = SYSLOG_FACILITY_AUTH;
- + if (options->sftp_log_level == SYSLOG_LEVEL_NOT_SET)
- + options->sftp_log_level = SYSLOG_LEVEL_INFO;
- +
- + /* Don't set sftp-server umask */
- + if (!options->sftp_umask)
- + memset(options->sftp_umask, 0, SFTP_UMASK_LENGTH);
- +
- + /* allow sftp client to issue chmod, chown / chgrp commands */
- + if (options->sftp_permit_chmod == SFTP_PERMIT_NOT_SET)
- + options->sftp_permit_chmod = SFTP_PERMIT_YES;
- + if (options->sftp_permit_chown == SFTP_PERMIT_NOT_SET)
- + options->sftp_permit_chown = SFTP_PERMIT_YES;
- +
- /* Turn privilege separation on by default */
- if (use_privsep == -1)
- use_privsep = 1;
- @@ -272,6 +299,9 @@
- sClientAliveCountMax, sAuthorizedKeysFile, sAuthorizedKeysFile2,
- sGssAuthentication, sGssCleanupCreds, sAcceptEnv,
- sUsePrivilegeSeparation,
- + sLogSftp, sSftpLogFacility, sSftpLogLevel,
- + sSftpUmask,
- + sSftpPermitChown, sSftpPermitChmod,
- sDeprecated, sUnsupported
- } ServerOpCodes;
-
- @@ -281,6 +311,12 @@
- ServerOpCodes opcode;
- } keywords[] = {
- /* Portable-specific options */
- + { "logsftp", sLogSftp},
- + { "sftplogfacility", sSftpLogFacility},
- + { "sftploglevel", sSftpLogLevel},
- + { "sftpumask", sSftpUmask},
- + { "sftppermitchmod", sSftpPermitChmod},
- + { "sftppermitchown", sSftpPermitChown},
- #ifdef USE_PAM
- { "usepam", sUsePAM },
- #else
- @@ -437,6 +473,8 @@
- char *cp, **charptr, *arg, *p;
- int *intptr, value, i, n;
- ServerOpCodes opcode;
- + unsigned int umaskvalue = 0;
- + char *umaskptr;
-
- cp = line;
- arg = strdelim(&cp);
- @@ -881,6 +919,58 @@
- case sBanner:
- charptr = &options->banner;
- goto parse_filename;
- +
- + case sLogSftp:
- + intptr = &options->log_sftp;
- + goto parse_flag;
- +
- + case sSftpLogFacility:
- + intptr = (int *) &options->sftp_log_facility;
- + arg = strdelim(&cp);
- + value = log_facility_number(arg);
- + if (value == SYSLOG_FACILITY_NOT_SET)
- + fatal("%.200s line %d: unsupported log facility '%s'",
- + filename, linenum, arg ? arg : "<NONE>");
- + if (*intptr == -1)
- + *intptr = (SyslogFacility) value;
- + break;
- +
- + case sSftpLogLevel:
- + intptr = (int *) &options->sftp_log_level;
- + arg = strdelim(&cp);
- + value = log_level_number(arg);
- + if (value == SYSLOG_LEVEL_NOT_SET)
- + fatal("%.200s line %d: unsupported log level '%s'",
- + filename, linenum, arg ? arg : "<NONE>");
- + if (*intptr == -1)
- + *intptr = (LogLevel) value;
- + break;
- +
- + case sSftpUmask:
- + arg = strdelim(&cp);
- + umaskptr = arg;
- + while (*arg && *arg >= '0' && *arg <= '9')
- + umaskvalue = umaskvalue * 8 + *arg++ - '0';
- + if (*arg || umaskvalue > 0777)
- + fatal("%s line %d: bad value for umask",
- + filename, linenum);
- + else {
- + while (*umaskptr && *umaskptr == '0')
- + *umaskptr++;
- + strncpy(options->sftp_umask, umaskptr,
- + SFTP_UMASK_LENGTH);
- + }
- +
- + break;
- +
- + case sSftpPermitChmod:
- + intptr = &options->sftp_permit_chmod;
- + goto parse_flag;
- +
- + case sSftpPermitChown:
- + intptr = &options->sftp_permit_chown;
- + goto parse_flag;
- +
- /*
- * These options can contain %X options expanded at
- * connect time, so that you can specify paths like:
- Index: servconf.h
- --- servconf.h.orig 2004-06-25 05:33:20 +0200
- +++ servconf.h 2004-08-17 19:55:16 +0200
- @@ -35,6 +35,19 @@
- #define PERMIT_NO_PASSWD 2
- #define PERMIT_YES 3
-
- +/* sftp-server logging */
- +#define LOG_SFTP_NOT_SET -1
- +#define LOG_SFTP_NO 0
- +#define LOG_SFTP_YES 1
- +
- +/* sftp-server umask control */
- +#define SFTP_UMASK_LENGTH 5
- +
- +/* sftp-server client priviledge */
- +#define SFTP_PERMIT_NOT_SET -1
- +#define SFTP_PERMIT_NO 0
- +#define SFTP_PERMIT_YES 1
- +
- #define DEFAULT_AUTH_FAIL_MAX 6 /* Default for MaxAuthTries */
-
- typedef struct {
- @@ -133,6 +146,13 @@
- char *authorized_keys_file; /* File containing public keys */
- char *authorized_keys_file2;
- int use_pam; /* Enable auth via PAM */
- + int log_sftp; /* perform sftp-server logging */
- + SyslogFacility sftp_log_facility; /* Facility for sftp subsystem logging. */
- + LogLevel sftp_log_level; /* Level for sftp subsystem logging. */
- + char sftp_umask[SFTP_UMASK_LENGTH]; /* Sftp Umask */
- + int sftp_permit_chmod;
- + int sftp_permit_chown;
- +
- } ServerOptions;
-
- void initialize_server_options(ServerOptions *);
- Index: session.c
- --- session.c.orig 2004-08-12 14:40:25 +0200
- +++ session.c 2004-08-17 19:54:21 +0200
- @@ -112,6 +112,15 @@
-
- static int is_child = 0;
-
- +/* so SFTP_LOG_FACILITY and SFTP_LOG_LEVEL can be passed through the
- + environment to the sftp-server subsystem. */
- +static const char *sysfac_to_int[] = { "0", "1", "2", "3", "4", "5", "6",
- + "7", "8", "9", "10", "11", "-1" };
- +static const char *syslevel_to_int[] = { "0", "1", "2", "3", "4", "5", "6",
- + "7", "-1" };
- +
- +static char *sftpumask;
- +
- /* Name and directory of socket for authentication agent forwarding. */
- static char *auth_sock_name = NULL;
- static char *auth_sock_dir = NULL;
- @@ -974,6 +983,7 @@
- env = xmalloc(envsize * sizeof(char *));
- env[0] = NULL;
-
- +
- #ifdef HAVE_CYGWIN
- /*
- * The Windows environment contains some setting which are
- @@ -1118,6 +1128,67 @@
- child_set_env(&env, &envsize, SSH_AUTHSOCKET_ENV_NAME,
- auth_sock_name);
-
- + /* LOG_SFTP */
- + if (options.log_sftp == -1 )
- + child_set_env(&env, &envsize, "LOG_SFTP", "-1");
- + else if (options.log_sftp == 0)
- + child_set_env(&env, &envsize, "LOG_SFTP", "0");
- + else
- + child_set_env(&env, &envsize, "LOG_SFTP", "1");
- +
- + /* SFTP_LOG_FACILITY */
- + if (options.sftp_log_facility < 0)
- + child_set_env(&env, &envsize, "SFTP_LOG_FACILITY",
- + "-1");
- + else
- + child_set_env(&env, &envsize, "SFTP_LOG_FACILITY",
- + sysfac_to_int[options.sftp_log_facility]);
- +
- + /* SFTP_LOG_LEVEL */
- + if (options.sftp_log_level < 0)
- + child_set_env(&env, &envsize, "SFTP_LOG_LEVEL",
- + "-1");
- + else
- + child_set_env(&env, &envsize, "SFTP_LOG_LEVEL",
- + syslevel_to_int[options.sftp_log_level]);
- +
- + /* SFTP_UMASK */
- +
- + if (options.sftp_umask[0] == '\0')
- + child_set_env(&env, &envsize, "SFTP_UMASK",
- + "" );
- + else {
- + if (!(sftpumask = calloc(SFTP_UMASK_LENGTH,1))) {
- +
- +logit("session.c: unabled to allocate memory for SftpUmask. SftpUmask control \
- +will be turned off.");
- +
- + child_set_env(&env, &envsize, "SFTP_UMASK",
- + "" );
- + } else {
- + strncpy(sftpumask, options.sftp_umask,
- + SFTP_UMASK_LENGTH);
- + child_set_env(&env, &envsize, "SFTP_UMASK",
- + sftpumask );
- + }
- + }
- +
- + /* SFTP_PERMIT_CHMOD */
- + if (options.sftp_permit_chmod == -1 )
- + child_set_env(&env, &envsize, "SFTP_PERMIT_CHMOD", "-1");
- + else if (options.sftp_permit_chmod == 0)
- + child_set_env(&env, &envsize, "SFTP_PERMIT_CHMOD", "0");
- + else
- + child_set_env(&env, &envsize, "SFTP_PERMIT_CHMOD", "1");
- +
- + /* SFTP_PERMIT_CHOWN */
- + if (options.sftp_permit_chown == -1 )
- + child_set_env(&env, &envsize, "SFTP_PERMIT_CHOWN", "-1");
- + else if (options.sftp_permit_chown == 0)
- + child_set_env(&env, &envsize, "SFTP_PERMIT_CHOWN", "0");
- + else
- + child_set_env(&env, &envsize, "SFTP_PERMIT_CHOWN", "1");
- +
- /* read $HOME/.ssh/environment. */
- if (options.permit_user_env && !options.use_login) {
- snprintf(buf, sizeof buf, "%.200s/.ssh/environment",
- Index: sftp-server.8
- --- sftp-server.8.orig 2003-10-15 07:50:43 +0200
- +++ sftp-server.8 2004-08-17 19:54:21 +0200
- @@ -41,6 +41,20 @@
- .Cm Subsystem
- option.
- See
- +.Xr sshd 8
- +for more information. Sftp-server transactions may be logged
- +using the
- +.Cm LogSftp ,
- +.Cm SftpLogFacility ,
- +and
- +.Cm SftpLogLevel
- +options. The administrator may exert control over the file and directory
- +permission and ownership, with
- +.Cm SftpUmask ,
- +.Cm SftpPermitChmod ,
- +and
- +.Cm SftpPermitChown
- +. See
- .Xr sshd_config 5
- for more information.
- .Sh SEE ALSO
- Index: sftp-server.c
- --- sftp-server.c.orig 2004-07-17 06:07:42 +0200
- +++ sftp-server.c 2004-08-17 19:56:22 +0200
- @@ -31,6 +31,13 @@
- #define get_string(lenp) buffer_get_string(&iqueue, lenp);
- #define TRACE debug
-
- +/* SFTP_UMASK */
- +static mode_t setumask = 0;
- +
- +static int permit_chmod = 1;
- +static int permit_chown = 1;
- +static int permit_logging = 0;
- +
- extern char *__progname;
-
- /* input and output queue */
- @@ -381,6 +388,14 @@
- a = get_attrib();
- flags = flags_from_portable(pflags);
- mode = (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) ? a->perm : 0666;
- +
- + if (setumask != 0) {
- + if ( permit_logging == 1 )
- + logit("setting file creation mode to 0666 and umask to %o", setumask);
- + mode = 0666;
- + umask(setumask);
- + }
- +
- TRACE("open id %u name %s flags %d mode 0%o", id, name, pflags, mode);
- fd = open(name, flags, mode);
- if (fd < 0) {
- @@ -394,6 +409,8 @@
- status = SSH2_FX_OK;
- }
- }
- + if ( permit_logging == 1 )
- + logit("open %s", name);
- if (status != SSH2_FX_OK)
- send_status(id, status);
- xfree(name);
- @@ -430,6 +447,7 @@
- (u_int64_t)off, len);
- if (len > sizeof buf) {
- len = sizeof buf;
- + if ( permit_logging == 1 )
- logit("read change len %d", len);
- }
- fd = handle_to_fd(handle);
- @@ -449,6 +467,8 @@
- }
- }
- }
- + if ( permit_logging == 1 )
- + logit("reading file");
- if (status != SSH2_FX_OK)
- send_status(id, status);
- }
- @@ -483,10 +503,13 @@
- } else if (ret == len) {
- status = SSH2_FX_OK;
- } else {
- + if ( permit_logging == 1 )
- logit("nothing at all written");
- }
- }
- }
- + if ( permit_logging == 1 )
- + logit("writing file");
- send_status(id, status);
- xfree(data);
- }
- @@ -579,24 +602,46 @@
- a = get_attrib();
- TRACE("setstat id %u name %s", id, name);
- if (a->flags & SSH2_FILEXFER_ATTR_SIZE) {
- +if ( permit_logging == 1 )
- +logit("process_setstat: truncate");
- ret = truncate(name, a->size);
- if (ret == -1)
- status = errno_to_portable(errno);
- }
- if (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) {
- + if (permit_chmod == 1) {
- ret = chmod(name, a->perm & 0777);
- if (ret == -1)
- status = errno_to_portable(errno);
- + else
- + if ( permit_logging == 1 )
- + logit("chmod'ed %s", name);
- + } else {
- + status = SSH2_FX_PERMISSION_DENIED;
- + if ( permit_logging == 1 )
- + logit("chmod %s: operation prohibited by sftp-server configuration.", name);
- + }
- }
- if (a->flags & SSH2_FILEXFER_ATTR_ACMODTIME) {
- +if ( permit_logging == 1 )
- +logit("process_setstat: utimes");
- ret = utimes(name, attrib_to_tv(a));
- if (ret == -1)
- status = errno_to_portable(errno);
- }
- if (a->flags & SSH2_FILEXFER_ATTR_UIDGID) {
- + if (permit_chown == 1) {
- ret = chown(name, a->uid, a->gid);
- if (ret == -1)
- status = errno_to_portable(errno);
- + else
- + if ( permit_logging == 1 )
- + logit("chown'ed %s.", name);
- + } else {
- + status = SSH2_FX_PERMISSION_DENIED;
- + if ( permit_logging == 1 )
- + logit("chown %s: operation prohibited by sftp-server configuration.", name);
- + }
- }
- send_status(id, status);
- xfree(name);
- @@ -611,6 +656,9 @@
- int status = SSH2_FX_OK;
- char *name;
-
- +if ( permit_logging == 1 )
- +logit("process_fsetstat");
- +
- id = get_int();
- handle = get_handle();
- a = get_attrib();
- @@ -621,11 +669,14 @@
- status = SSH2_FX_FAILURE;
- } else {
- if (a->flags & SSH2_FILEXFER_ATTR_SIZE) {
- +if ( permit_logging == 1 )
- +logit("process_fsetstat: ftruncate");
- ret = ftruncate(fd, a->size);
- if (ret == -1)
- status = errno_to_portable(errno);
- }
- if (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) {
- + if (permit_chmod == 1) {
- #ifdef HAVE_FCHMOD
- ret = fchmod(fd, a->perm & 0777);
- #else
- @@ -633,8 +684,18 @@
- #endif
- if (ret == -1)
- status = errno_to_portable(errno);
- + else
- + if ( permit_logging == 1 )
- + logit("chmod: succeeded.");
- + } else {
- + status = SSH2_FX_PERMISSION_DENIED;
- + if ( permit_logging == 1 )
- + logit("chmod: operation prohibited by sftp-server configuration.");
- + }
- }
- if (a->flags & SSH2_FILEXFER_ATTR_ACMODTIME) {
- +if ( permit_logging == 1 )
- +logit("process_fsetstat: utimes");
- #ifdef HAVE_FUTIMES
- ret = futimes(fd, attrib_to_tv(a));
- #else
- @@ -644,6 +705,7 @@
- status = errno_to_portable(errno);
- }
- if (a->flags & SSH2_FILEXFER_ATTR_UIDGID) {
- + if (permit_chown == 1) {
- #ifdef HAVE_FCHOWN
- ret = fchown(fd, a->uid, a->gid);
- #else
- @@ -651,6 +713,14 @@
- #endif
- if (ret == -1)
- status = errno_to_portable(errno);
- + else
- + if ( permit_logging == 1 )
- + logit("chown: succeeded");
- + } else {
- + status = SSH2_FX_PERMISSION_DENIED;
- + if ( permit_logging == 1 )
- + logit("chown: operation prohibited by sftp-server configuration.");
- + }
- }
- }
- send_status(id, status);
- @@ -680,6 +750,8 @@
- }
-
- }
- + if ( permit_logging == 1 )
- + logit("opendir %s", path);
- if (status != SSH2_FX_OK)
- send_status(id, status);
- xfree(path);
- @@ -753,6 +825,8 @@
- TRACE("remove id %u name %s", id, name);
- ret = unlink(name);
- status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
- + if ( permit_logging == 1 )
- + logit("remove file %s", name);
- send_status(id, status);
- xfree(name);
- }
- @@ -770,9 +844,19 @@
- a = get_attrib();
- mode = (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) ?
- a->perm & 0777 : 0777;
- +
- + if (setumask != 0) {
- + if ( permit_logging == 1 )
- + logit("setting directory creation mode to 0777 and umask to %o.", setumask);
- + mode = 0777;
- + umask(setumask);
- + }
- +
- TRACE("mkdir id %u name %s mode 0%o", id, name, mode);
- ret = mkdir(name, mode);
- status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
- + if ( permit_logging == 1 )
- + logit("mkdir %s", name);
- send_status(id, status);
- xfree(name);
- }
- @@ -789,6 +873,8 @@
- TRACE("rmdir id %u name %s", id, name);
- ret = rmdir(name);
- status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
- + if ( permit_logging == 1 )
- + logit("rmdir %s", name);
- send_status(id, status);
- xfree(name);
- }
- @@ -815,6 +901,8 @@
- s.name = s.long_name = resolvedname;
- send_names(id, 1, &s);
- }
- + if ( permit_logging == 1 )
- + logit("realpath %s", path);
- xfree(path);
- }
-
- @@ -870,6 +958,8 @@
- status = SSH2_FX_OK;
- }
- send_status(id, status);
- + if ( permit_logging == 1 )
- + logit("rename old %s new %s", oldpath, newpath);
- xfree(oldpath);
- xfree(newpath);
- }
- @@ -895,6 +985,8 @@
- s.name = s.long_name = buf;
- send_names(id, 1, &s);
- }
- + if ( permit_logging == 1 )
- + logit("readlink %s", path);
- xfree(path);
- }
-
- @@ -913,6 +1005,8 @@
- ret = symlink(oldpath, newpath);
- status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
- send_status(id, status);
- + if ( permit_logging == 1 )
- + logit("symlink old %s new %s", oldpath, newpath);
- xfree(oldpath);
- xfree(newpath);
- }
- @@ -1034,6 +1128,8 @@
- {
- fd_set *rset, *wset;
- int in, out, max;
- + unsigned int val = 0;
- + char *umask_env;
- ssize_t len, olen, set_size;
-
- /* XXX should use getopt */
- @@ -1041,6 +1137,16 @@
- __progname = ssh_get_progname(av[0]);
- handle_init();
-
- + /* Transaction logging */
- +
- + if (atoi(getenv("LOG_SFTP")) == 1)
- + {
- + permit_logging = 1;
- + log_init("sftp-server", atoi(getenv("SFTP_LOG_LEVEL")),
- + atoi(getenv("SFTP_LOG_FACILITY")), 0);
- + };
- +
- +
- #ifdef DEBUG_SFTP_SERVER
- log_init("sftp-server", SYSLOG_LEVEL_DEBUG1, SYSLOG_FACILITY_AUTH, 0);
- #endif
- @@ -1048,6 +1154,39 @@
- in = dup(STDIN_FILENO);
- out = dup(STDOUT_FILENO);
-
- + if ( permit_logging == 1 )
- + logit("Starting sftp-server logging for user %s.", getenv("USER"));
- +
- + /* Umask control */
- +
- + umask_env = getenv("SFTP_UMASK");
- + while (*umask_env && *umask_env >= '0' && *umask_env <= '9')
- + val = val * 8 + *umask_env++ - '0';
- +
- + if (*umask_env || val > 0777 || val == 0) {
- + if ( permit_logging == 1 )
- + logit("bad value %o for SFTP_UMASK, turning umask control off.", val);
- + setumask = 0;
- + } else {
- + if ( permit_logging == 1 )
- + logit("umask control is on.");
- + setumask = val;
- + };
- +
- +
- + /* Sensitive client commands */
- +
- + if (atoi(getenv("SFTP_PERMIT_CHMOD")) != 1) {
- + permit_chmod = 0;
- + if ( permit_logging == 1 )
- + logit("client is not permitted to chmod.");
- + };
- + if (atoi(getenv("SFTP_PERMIT_CHOWN")) != 1) {
- + permit_chown = 0;
- + if ( permit_logging == 1 )
- + logit("client is not permitted to chown.");
- + };
- +
- #ifdef HAVE_CYGWIN
- setmode(in, O_BINARY);
- setmode(out, O_BINARY);
- @@ -1087,6 +1226,8 @@
- len = read(in, buf, sizeof buf);
- if (len == 0) {
- debug("read eof");
- + if ( permit_logging == 1 )
- + logit("sftp-server finished.");
- exit(0);
- } else if (len < 0) {
- error("read error");
- Index: sshd_config.5
- --- sshd_config.5.orig 2004-06-30 14:39:34 +0200
- +++ sshd_config.5 2004-08-17 19:54:21 +0200
- @@ -407,6 +407,10 @@
- DEBUG and DEBUG1 are equivalent.
- DEBUG2 and DEBUG3 each specify higher levels of debugging output.
- Logging with a DEBUG level violates the privacy of users and is not recommended.
- +.It Cm LogSftp
- +Specifies whether to perform logging of
- +.Nm sftp-server
- +subsystem transactions. Must be "yes" or "no." The default value is "no."
- .It Cm MACs
- Specifies the available MAC (message authentication code) algorithms.
- The MAC algorithm is used in protocol version 2
- @@ -567,6 +571,37 @@
- .It Cm ServerKeyBits
- Defines the number of bits in the ephemeral protocol version 1 server key.
- The minimum value is 512, and the default is 768.
- +.It Cm SftpLogFacility
- +Gives the facility code that is used when logging
- +.Nm sftp-server .
- +transactions. The possible values are: DAEMON, USER, AUTH, LOCAL0,
- +LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7.
- +The default is AUTH.
- +.It Cm SftpLogLevel
- +Gives the verbosity level that is used when logging messages from
- +.Nm sftp-server .
- +The possible values are:
- +QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2 and DEBUG3.
- +The default is INFO. DEBUG and DEBUG1 are equivalent. DEBUG2
- +and DEBUG3 each specify higher levels of debugging output.
- +Logging with a DEBUG level violates the privacy of users
- +and is not recommended.
- +.It Cm SftpPermitChmod
- +Specifies whether the sftp-server allows the sftp client to execute chmod
- +commands on the server. The default is yes.
- +.It Cm SftpPermitChown
- +Specifies whether the sftp-server allows the sftp client to execute chown
- +or chgrp commands on the server. Turning this value on means that the client
- +is allowed to execute both chown and chgrp commands. Turning it off means that
- +the client is prohibited from executing either chown or chgrp.
- + The default is yes.
- +.It Cm SftpUmask
- +Specifies an optional umask for
- +.Nm sftp-server
- +subsystem transactions. If a umask is given, this umask will override all system,
- +environment or sftp client permission modes. If
- +no umask or an invalid umask is given, file creation mode defaults to the permission
- +mode specified by the sftp client. The default is for no umask.
- .It Cm StrictModes
- Specifies whether
- .Nm sshd
- Index: sshd_config
- --- sshd_config.orig 2004-05-24 02:36:24 +0200
- +++ sshd_config 2004-08-17 19:54:21 +0200
- @@ -101,3 +101,14 @@
-
- # override default of no subsystems
- Subsystem sftp /usr/libexec/sftp-server
- +
- +# sftp-server logging
- +#LogSftp no
- +#SftpLogFacility AUTH
- +#SftpLogLevel INFO
- +
- +# sftp-server umask control
- +#SftpUmask
- +
- +#SftpPermitChmod yes
- +#SftpPermitChown yes
|