#!/bin/bash # # useradd(8) wrapper for vservers # # Copyright (c) 2004 The Trustees of Princeton University (Trustees). # # $Id: vuseradd,v 1.3 2004/08/23 18:30:55 mlh-pl_kernel Exp $ # : ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars} test -e "$UTIL_VSERVER_VARS" || { echo "Can not find util-vserver installation; aborting..." exit 1 } . "$UTIL_VSERVER_VARS" usage() { echo "usage: $0 name" exit 1 } [ -z "$1" ] && usage NAME=$1 # add user useradd -s /bin/vsh $NAME # change shell (in case user already exists) usermod -s /bin/vsh $NAME # automount keys (eval expands ~) eval rm -rf ~$NAME/.ssh eval ln -nsf /var/pl_sshd/keys/$NAME ~$NAME/.ssh USERID=$(awk -F: "\$1 == \"$NAME\" { print \$3 }" < /etc/passwd) GROUPID=$(awk -F: "\$1 == \"$NAME\" { print \$3 }" < /etc/passwd) # create vserver configuration file if [ ! -f /etc/vservers/$NAME.conf ] ; then sed -e "s/#S_CONTEXT=/S_CONTEXT=$USERID/" \ < /etc/vservers/vserver-reference.conf \ > /etc/vservers/$NAME.conf fi if [ ! -d "$VROOTDIR/$NAME" ] ; then # check the cache shopt -s nullglob for i in "$VROOTDIR/.vcache/"* ; do [ -d "$i" ] && mv "$i" "$VROOTDIR/$NAME" && break done # build vserver if [ ! -d "$VROOTDIR/$NAME" ] ; then # build image in .vtmp TMP=$(mktemp -d "$VROOTDIR/.vtmp/$NAME.XXXXXX") "$PKGLIBDIR/vbuild" "$VROOTDIR/vserver-reference" "$TMP" RETVAL=$? # move it to .vcache when complete if [ $RETVAL -eq 0 ] ; then mv "$TMP" "$VROOTDIR/$NAME" else echo "Error $RETVAL building $VROOTDIR/$NAME" rm -rf "$TMP" exit $RETVAL fi fi fi if [ -d "$VROOTDIR/$NAME" ] ; then # fix permissions chmod 755 "$VROOTDIR/$NAME" # add user in vserver vserver $NAME suexec root groupadd -g $GROUPID $NAME vserver $NAME suexec root useradd -u $USERID -g $GROUPID -p '' $NAME fi