OpenWrt: adduser script

Update 2015-10-07: su für OpenWrt

Das Paket shadow-useradd stellt den Befehl "useradd" zur Verfügung. Der Befehl su befindet sich in shadow-su

opkg update; opkg install shadow-useradd shadow-su

Ursprünglicher Artikel

OpenWrt ist nicht als Multiuser-System gedacht, es fehlen adduser und addgroup. Dieses Script vereinfacht das Erstellen weiterer User. Man kann es mit oder ohne Parameter aufrufen. Am einfachsten geht es mit:

addusergroup.sh username

Das Script findet selber die nächste uid (beginnend ab 1000). Man kann auch selber die uid bestimmen als 2. Option.

Das Script kann unten herunter geladen werden. Unter OpenWrt installiert man es einfach mit:

cd /usr/bin
w get http://www.inetcom.ch/sites/default/files/usergroupadd.script # remove space between w get!
mv usergroupadd.script usergroupadd.sh
chmod +x usergroupadd.sh

#!/bin/sh
# version 0.1 20121209 iNetCom/Jan Holler

login=$1
uid=$2

passwdf="/etc/passwd"
passwdfmin="/etc/passwd-"
shadowf="/etc/shadow"
shadowfmin="/etc/shadow-"
groupf="/etc/group"
smbpasswdf="/etc/samba/smbpasswd"
homerootdir="/home"
shell="/bin/ash"

echo "Add a new user:"
if [ "$1" != "" ] ; then
  login=$1
else
  echo -n "login: " ; read login
fi

# change '5000' for the top end of your allowed uids
username=`grep $login $passwdf|awk -F : '{print $1}'`
if [ "$username" = "$login" ]; then                               
  echo "ERROR: The user $login already exists, so please use a different login name."
  exit 1
else
  echo "using username: $login"
fi

if expr "$2" : '-\?[0-9]\+$' >/dev/null ; then
  uid=$2
else
  uid="$(awk -F: '{ if (big < $3 && $3 < 5000) big=$3 } END { print big + 1 }' $passwdf)"
  # set to new user layout (fedora) starting uids from 1000 on
  if [ $uid -lt 1000 ] ; then
    uid=1000
  fi
fi
userid=`grep $uid $passwdf|awk -F : '{print $1}'`
if [ "$userid" = "$uid" ]; then
  echo "ERROR: The userid $uid already exists, so please use a different userid."
  exit 1
else
  echo "using uid/guid: $uid"
fi

homedir=$homerootdir/$login

# gid=uid as in Fedora
gid=$uid

echo -n "Optional: full name: " ; read fullname
#echo -n "shell: "     ; read shell

if [ "$fullname" = "" ] ; then
  fullname=$login
fi

echo ${login}:x:${uid}:${gid}:${fullname}:${homedir}:$shell >> $passwdf
echo ${login}:*:${uid}:${gid}:${fullname}:${homedir}:$shell >> $passwdfmin
echo ${login}:*:11647:0:99999:7::: >> $shadowf
echo ${login}:*:11647:0:99999:7::: >> $shadowfmin

echo "${login}:x:${gid}:$login" >> $groupf

if [ ! -d "$homerootdir" ]; then
  mkdir  $homerootdir
fi
if [ ! -d "$homedir" ]; then
  mkdir $homedir
fi

#cp -R /etc/skel/.[a-zA-Z]* $homedir
chmod 755 $homedir
find $homedir -print | xargs chown ${login}:$login

passwd $login

exit 0

 

AnhangGröße
usergroupadd.script1.83 KB