Portál AbcLinuxu, 10. května 2025 05:44

Dotaz: Skript pro zakládání uživatelů (odměna)

18.3.2007 14:47 Ltb
Skript pro zakládání uživatelů (odměna)
Přečteno: 221×
Odpovědět | Admin
Ahoj všem, potřeboval bych pomoci s 1 skriptem na Linux, sám ho bohužel asi nezvládnu :-/

Zadání je tohle: Napište skript, který založí do sys. nového uživatele tj. 1) zeptá se na login-name 2) zkontroluje zda takové jméno již neexistuje, pokud ano, vrací se na 1 3) přidělí uživateli UID (o 1 vyšší než předchozí user) 4) zeptá se na GID a na jméno login-shellu 5) zkontroluje, zda existuje; pokud ne, opakuje bod 5 6) přidá odpovídající řádku do /etc/passwd 7) vytvoří v adresáři /home domovský adresář uživatele 8) přidělí uživateli práva k jeho domovskému adresáři

-----------------------------------------------------------

Zvládl by mi to někdo napsat? Jsem ochoten věnovat odměnu 250kč ;-)

Díky, zdraví

Ltb
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.3.2007 14:55 pasmen | skóre: 45 | blog: glob | Praha
Rozbalit Rozbalit vše Re: Skript pro zakládání uživatelů (odměna)
Odpovědět | | Sbalit | Link | Blokovat | Admin
adduser tohle dela za tebe...
kozzi avatar 18.3.2007 14:59 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Skript pro zakládání uživatelů (odměna)
Odpovědět | | Sbalit | Link | Blokovat | Admin
1.) Kčemu to potřebuješ existuje dost podobných skriptů co dělají něco podobného 2.) Pokud to máš do školy, tak si to udělej sám není to zas tak těžký 3.) V jakým jazyce to má být?
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
18.3.2007 15:02 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: Skript pro zakládání uživatelů (odměna)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Troufám si tvrdit, že to zde zvládne naprostá většina, nebo alepoń hodně uživatelů L. I Ty by jsi to zvládnul, kdyby jsi chtěl. Ty ale evidentně nechceš, nebo nemáš zájem se v Linuxu naučit elemntárním věcem a zvládnout pár základních příkazů. Protože kdyby jsi chtěl a trošku se zde a jinde porozhlédl, zjistil bys, že na tom nic není. Předpokládám, že to máš nějaký dom.ú. Nechápu, proč chodíš na školu a na obor, který Tě asi moc nezajímá. To je ale Tvá věc. Jinak pokud si opravdu netroufáš a nikdo by Ti to neudělal, pošli mi e-mail, mohu Ti pomoci. Výsledek tu ale zveřejníme.
18.3.2007 16:33 sh
Rozbalit Rozbalit vše Re: Skript pro zakládání uživatelů (odměna)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Takové nějaké skripty mám ještě z dob studií schované. Nedělají sice přesně to, co chcete a tak, jak chcete, ale být vámi se na ně podívám a zkusím znovu zvážit, jestli to FAKT nezvládnete, protože je to opravdu jednoduché, a byla by věru ostuda kvůli takové hlouposti podvádět, budete pak mít těžký spaní :D

Co to je za školu?

adduser.sh:

#!/bin/bash


while true; do
  echo -n "Enter login name: "
  read LOGNAME
  LEN=`echo "$LOGNAME" | wc -c`
  if [ "$LEN" -gt 8 ] ; then
    echo Name too long
    continue
  fi
  if echo "$LOGNAME" | grep [^a-z]; then
    echo Only small letters allowed
    continue
  fi
  break
done


_UID=`tail -1 /etc/passwd |awk -F : '{print $3 + 1}'`
echo -n "Enter UID: "
   read _UIDOK
   if [ "$_UIDOK" = "" ] ; then
     _UIDOK=$_UID
   elif [ "`grep $_UIDOK /etc/passwd | awk -F : '{print $3}'`" = "" ] ; then
     _UIDOK=$_UID
   else
     echo "ERROR: UID in use"
     exit 1
  fi

_GID=`grep users /etc/group |awk -F : '{print $3}'`
echo -n "Enter GID: "
  read _GIDOK
  if [ "$_GIDOK" = "" ]; then
    _GIDOK=$_GID
  elif [ "`grep $_GIDOK /etc/group`" = "" ] ; then
    echo "ERROR: Group $_GIDOK does not exist"
    exit 1
  fi


echo -n "Enter home directory: [/home/$LOGNAME] "
 read _HOME
  if [ "$_HOME" = "" ]; then
    _HOME="/home/$LOGNAME"
  fi

echo -n "Enter login shell: [/bin/bash] "
read _SHELL
if [ "$_SHELL" = "" ]; then
  _SHELL=/bin/bash
fi
if [ ! \( -x $_SHELL \) ] ; then
  echo Shell does not exist or is not executable
  exit 1
fi

echo -n "Enter real name:  "
read _REALNAME


echo 
echo This is the information you entered:
echo 
echo User ID is: $_UIDOK
echo Group ID is: $_GIDOK
echo Home is: $_HOME
echo Login shell is: $_SHELL
echo Real name is: $_REALNAME
echo
echo /etc/passwd entry will be:
echo $LOGNAME:???:$_UIDOK:$_GIDOK:$_REALNAME:$_HOME:$_SHELL
echo 
echo -n "Is this correct? (y/n) "
read _verify
 if [ "$_verify" = n ]; then
   echo Exiting ...
   exit 1
 else 
  echo "Adding user $LOGNAME to system"
  # useradd -u $_UIDOK -g $_GIDOK -d $_HOME -s $_SHELL -c "$_REALNAME"  $LOGNAME
  # cp -r /etc/skel $_HOME 
  # chown -R $_UIDOK:$_GIDOK $_HOME 
  # passwd $LOGNAME 
fi

userid.sh:

#!/bin/bash
if [ $# != 1 ] ; then
  echo Usage: `basename $0` username
  exit 1 
fi 

_UID=`grep -F -w $1 /etc/passwd | awk -F : '{print $3}'`
if [ "$_UID" = "" ] ; then
  echo Error: User $1 not found
else
  echo User $1 has UID=$_UID
fi
18.3.2007 18:03 Ltb
Rozbalit Rozbalit vše Re: Skript pro zakládání uživatelů (odměna)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj,

díky všem za reakce na můj dotaz/prosbu!

K vašim dotazům: - ANO, je to DU a věřím tomu, že pro většinu z vás je to jednoduché. Já se svými skromnými NEznalostmi linuxu bych na tom strávil nejméně 1 den, což je ale celkem dost :-/ Linuxu sice fandím, ale nevěnuji se mu a předpokládám, že v budoucnu ani nebudu => byl by to pro mne opravdu ztracený čas. To vám raději někomu věnuji 1 dvojté KFC MENU. Se zvěřejněním skriptu tady samozř. souhlasím, od toho je to poradna ;)

Zdraví

Ltb
18.3.2007 18:42 martyone | skóre: 18
Rozbalit Rozbalit vše Re: Skript pro zakládání uživatelů (odměna)
Jen bych Vás rád upozornil, že učitelé (zvláště takovýchto předmětů) většinou nejsou blbí, a google hledá až překvapivě dobře - nevím kterou školu navštěvujete Vy, ale na naší za podobné srandy několik lidí (o kterých jsem slyšel) vyletělo ;-) tak aby Vám to za to stálo..
1.4.2007 22:35 Ltb
Rozbalit Rozbalit vše Re: Skript pro zakládání uživatelů (odměna)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj všem, za nezanedbatelné pomoci Pavla (kterému tímto díky :-)) nakonec vzniknul skript, který odpovídá zadání viz. příspěvek úplně nahoře.
#!/bin/bash

# pridani noveho uzivatele (mensi uzivatelska nadstavba nad prikaz "useradd")

echo
echo " Pridani noveho uzivatele do systemu (pouze Enter -> predcasne ukonceni)"
echo


# jmeno
while [ "$xJmeno" == "" ]; do
  echo -n "              Zadej jmeno pro noveho uzivatele : ";  read xJmeno
  # nic nezadano -> ukonceni skriptu
  [ "$xJmeno" == "" ] && {  echo " ! Predcasne koncim skript ...";  exit;  }
  # kontrola, zda zadany uzivatel jiz existuje (hleda prvni retezec od zacatku radku do prvni dvojtecky)
  if grep "^$xJmeno:" /etc/passwd > /dev/null;  then
    echo " Uzivatel \"$xJmeno\" jiz existuje, zadej jine jmeno!"
    xJmeno=""
  fi
done


# Nasledujici akci - zjisteni a urceni posledniho pouziteho UID zvyseneho o 1 
#  dela sam prikaz useradd, zde to ale udelame rucne
# Predpokladame, ze na poslednim radku je posledni platny uzivatel :
#  z posledniho radku /etc/passwd nacteme UID (3 polozka mezi : ) a zvysime ji o 1
xUID="$[$(sed -n "$ s#^[^:]*:[^:]*:\([0-9]\+\):.*#\1#p" /etc/passwd) + 1]"


# GID
while [ "$xGID" == "" ]; do
  # najde doporucene GID pro skupinu users  
  x="$(sed -n "/^users:/ s#^[^:]*:[^:]*:\([0-9]\+\):.*#(doporucuji: \1 pro skupinu users) #p" /etc/group)"
  echo -n " Zadej GID $x: ";  read xGID
  # nic nezadano -> ukonceni skriptu
  [ "$xGID" == "" ] && {  echo " ! Predcasne koncim skript ...";  exit;  }
  # kontrola, zda skupina existuje (hleda 3 retezec od zacatku radku, polozky jsou oddelene : )
  if ! grep "^[^:]*:[^:]*:$xGID:" /etc/group > /dev/null;  then
    echo " Skupina s GID=$xGID neexistuje, musis zadat nejakou platnou:"
    sed -n "s#^\([^:]*\):[^:]*:\([0-9]\+\):.*#GID=\2 \t \1#p" /etc/group  # vypise seznam skupin
    xGID=""
  fi
done


# login shell
while [ "$xShell" == "" ]; do
  echo -n "               Zadej login shell (1=/bin/bash) : ";  read xShell
  # nic nezadano -> ukonceni skriptu
  [ "$xShell" == "" ] && {  echo " ! Predcasne koncim skript ...";  exit;  }
  # preddefinovany shell
  [ "$xShell" == "1" ] && xShell="/bin/bash"
  # kontrola na existenci a spustitelnost souboru (shellu)
  [ -x "$xShell" ] || {  echo " Zadany shell \"$xShell\" neni platny (neexistuje, nebo neni spustitelny) !";  xShell="";  }
done


echo
echo " Shrnuti:"
echo "  Jmeno       : $xJmeno"
echo "  UID         : $xUID"
echo "  GID         : $xGID"
echo "  Login shell : $xShell"
echo
echo -n " Pridat tohoto noveho uzivatele do systemu ? Ano=a : ";  read x
echo
if [ "$x" == "a" ]; then
  # pridani uzivatele; pokud se zdari, jeste nastavit heslo
  if useradd -u $xUID -g $xGID -G $xGID -m -s $xShell $xJmeno; then
    # prikaz useradd zalozi noveho uzivatele, nastavi mu UID, GID (a prida ho do teto skupiny), nastavi
    #  mu shell, vytvori HOME adresar, nakopipruje do nej vychozi soubory a nastavi vlastnika, 
    # takze nasledujici prikazy jsou jiz zbytecne (viz. man useradd):
    # cp -r /etc/skel "/home/$xJmeno"       # nakopirovani zakladnich souboru do dom.adresare
    # chown -R $xUID:$xGID "/home/$xJmeno"  # nastavi vlastnika
    echo " Uzivatel \"$xJmeno\" pridan do systemu:  useradd -u $xUID -g $xGID -G $xGID -m -s $xShell $xJmeno"
    echo " Nyni je nutne mu jeste nastavit heslo:"
    passwd $xJmeno
  fi
else
  echo " Koncim ...  Uzivatel \"$xJmeno\" nepridan do systemu !"
fi
Mějte se fajn,

Ltb

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.