Index: Linux-PAM/modules/pam_limits/pam_limits.c =================================================================== --- Linux-PAM/modules/pam_limits/pam_limits.c.orig +++ Linux-PAM/modules/pam_limits/pam_limits.c @@ -74,6 +74,7 @@ int flag_numsyslogins; /* whether to limit logins only for a specific user or to count all logins */ int priority; /* the priority to run user process with */ + char chroot_dir[8092]; /* directory to chroot into */ struct user_limits_struct limits[RLIM_NLIMITS]; char conf_file[BUFSIZ]; int utmp_after_pam_call; @@ -84,6 +85,7 @@ #define LIMIT_NUMSYSLOGINS RLIM_NLIMITS+2 #define LIMIT_PRI RLIM_NLIMITS+3 +#define LIMIT_CHROOT RLIM_NLIMITS+4 #define LIMIT_SOFT 1 #define LIMIT_HARD 2 @@ -238,6 +240,8 @@ pl->login_limit = -2; pl->login_limit_def = LIMITS_DEF_NONE; + pl->chroot_dir[0] = '\0'; + return retval; } @@ -306,6 +310,8 @@ pl->flag_numsyslogins = 1; } else if (strcmp(lim_item, "priority") == 0) { limit_item = LIMIT_PRI; + } else if (strcmp(lim_item, "chroot") == 0) { + limit_item = LIMIT_CHROOT; } else { pam_syslog(pamh, LOG_DEBUG, "unknown limit item '%s'", lim_item); return; @@ -343,9 +349,9 @@ pam_syslog(pamh, LOG_DEBUG, "wrong limit value '%s' for limit type '%s'", lim_value, lim_type); - return; + return; } - } else { + } else if (limit_item != LIMIT_CHROOT) { #ifdef __USE_FILE_OFFSET64 rlimit_value = strtoull (lim_value, &endptr, 10); #else @@ -392,7 +398,9 @@ break; } - if ( (limit_item != LIMIT_LOGIN) + if (limit_item == LIMIT_CHROOT) + strncpy(pl->chroot_dir, value_orig, sizeof(pl->chroot_dir)); + else if ( (limit_item != LIMIT_LOGIN) && (limit_item != LIMIT_NUMSYSLOGINS) && (limit_item != LIMIT_PRI) ) { if (limit_type & LIMIT_SOFT) { @@ -590,6 +598,13 @@ retval |= LOGIN_ERR; } + if (!retval && pl->chroot_dir[0]) { + i = chdir(pl->chroot_dir); + if (i == 0) + i = chroot(pl->chroot_dir); + if (i != 0) + retval = LIMIT_ERR; + } return retval; } Index: Linux-PAM/modules/pam_limits/limits.conf.5.xml =================================================================== --- Linux-PAM/modules/pam_limits/limits.conf.5.xml.orig +++ Linux-PAM/modules/pam_limits/limits.conf.5.xml @@ -223,6 +223,12 @@ (Linux 2.6.12 and higher) + + + + the directory to chroot the user to + + Index: Linux-PAM/modules/pam_limits/limits.conf.5 =================================================================== --- Linux-PAM/modules/pam_limits/limits.conf.5.orig +++ Linux-PAM/modules/pam_limits/limits.conf.5 @@ -1,11 +1,11 @@ .\" Title: limits.conf .\" Author: -.\" Generator: DocBook XSL Stylesheets v1.70.1 -.\" Date: 06/22/2006 -.\" Manual: Linux\-PAM Manual -.\" Source: Linux\-PAM Manual +.\" Generator: DocBook XSL Stylesheets v1.72.0 +.\" Date: 08/19/2007 +.\" Manual: Linux-PAM Manual +.\" Source: Linux-PAM Manual .\" -.TH "LIMITS.CONF" "5" "06/22/2006" "Linux\-PAM Manual" "Linux\-PAM Manual" +.TH "LIMITS.CONF" "5" "08/19/2007" "Linux\-PAM Manual" "Linux\-PAM Manual" .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) @@ -23,38 +23,45 @@ \fI\fR .PP The fields listed above should be filled as follows: -.TP 3n +.PP \fB\fR -.RS 3n -.TP 3n -\(bu -a username -.TP 3n -\(bu -a groupname, with +.RS 4 +.sp +.RS 4 +\h'-04'\(bu\h'+03'a username +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'a groupname, with \fB@group\fR syntax. This should not be confused with netgroups. -.TP 3n -\(bu -the wildcard +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'the wildcard \fB*\fR, for default entry. -.TP 3n -\(bu -the wildcard +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'the wildcard \fB%\fR, for maxlogins limit only, can also be used with \fI%group\fR syntax. .RE -.TP 3n +.RE +.PP \fB\fR -.RS 3n -.TP 3n +.RS 4 +.PP \fBhard\fR +.RS 4 for enforcing \fBhard\fR resource limits. These limits are set by the superuser and enforced by the Kernel. The user cannot raise his requirement of system resources above such values. -.TP 3n +.RE +.PP \fBsoft\fR +.RS 4 for enforcing \fBsoft\fR resource limits. These limits are ones that the user can move up or down within the permitted range by any pre\-exisiting @@ -62,8 +69,10 @@ limits. The values specified with this token can be thought of as \fIdefault\fR values, for normal system usage. -.TP 3n +.RE +.PP \fB\-\fR +.RS 4 for enforcing both \fBsoft\fR and @@ -72,65 +81,107 @@ .sp Note, if you specify a type of '\-' but neglect to supply the item and value fields then the module will never enforce any limits on the specified user/group etc. . .RE -.TP 3n +.RE +.PP \fB\fR -.RS 3n -.TP 3n +.RS 4 +.PP \fBcore\fR +.RS 4 limits the core file size (KB) -.TP 3n +.RE +.PP \fBdata\fR +.RS 4 maximum data size (KB) -.TP 3n +.RE +.PP \fBfsize\fR +.RS 4 maximum filesize (KB) -.TP 3n +.RE +.PP \fBmemlock\fR +.RS 4 maximum locked\-in\-memory address space (KB) -.TP 3n +.RE +.PP \fBnofile\fR +.RS 4 maximum number of open files -.TP 3n +.RE +.PP \fBrss\fR +.RS 4 maximum resident set size (KB) -.TP 3n +.RE +.PP \fBstack\fR +.RS 4 maximum stack size (KB) -.TP 3n +.RE +.PP \fBcpu\fR +.RS 4 maximum CPU time (minutes) -.TP 3n +.RE +.PP \fBnproc\fR +.RS 4 maximum number of processes -.TP 3n +.RE +.PP \fBas\fR +.RS 4 address space limit -.TP 3n +.RE +.PP \fBmaxlogins\fR +.RS 4 maximum number of logins for this user -.TP 3n +.RE +.PP \fBmaxsyslogins\fR +.RS 4 maximum number of logins on system -.TP 3n +.RE +.PP \fBpriority\fR +.RS 4 the priority to run user process with (negative values boost process priority) -.TP 3n +.RE +.PP \fBlocks\fR +.RS 4 maximum locked files (Linux 2.4 and higher) -.TP 3n +.RE +.PP \fBsigpending\fR +.RS 4 maximum number of pending signals (Linux 2.6 and higher) -.TP 3n +.RE +.PP \fBmsqqueue\fR +.RS 4 maximum memory used by POSIX message queues (bytes) (Linux 2.6 and higher) -.TP 3n +.RE +.PP \fBnice\fR +.RS 4 maximum nice priority allowed to raise to (Linux 2.6.12 and higher) -.TP 3n +.RE +.PP \fBrtprio\fR +.RS 4 maximum realtime priority allowed for non\-privileged processes (Linux 2.6.12 and higher) .RE .PP +\fBchroot\fR +.RS 4 +the directory to chroot the user to +.RE +.RE +.PP In general, individual limits have priority over group limits, so if you impose no limits for \fIadmin\fR group, but one of the members in this group have a limits line, the user will have its limits set according to this line. @@ -149,7 +200,7 @@ These are some example lines which might be specified in \fI/etc/security/limits.conf\fR. .sp -.RS 3n +.RS 4 .nf * soft core 0 * hard rss 10000 Index: Linux-PAM/modules/pam_limits/limits.conf =================================================================== --- Linux-PAM/modules/pam_limits/limits.conf.orig +++ Linux-PAM/modules/pam_limits/limits.conf @@ -35,6 +35,7 @@ # - msgqueue - max memory used by POSIX message queues (bytes) # - nice - max nice priority allowed to raise to # - rtprio - max realtime priority +# - chroot - change root to directory (Debian-specific) # # # @@ -45,6 +46,7 @@ #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 +#ftp - chroot /ftp #@student - maxlogins 4 # End of file