elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Mensajes
Páginas: [1] 2
1  Programación / Programación General / [Power Shell] Noob al canto con script en: 9 Abril 2014, 23:05 pm
Hola a todos, soy muy nuevo en PS pero me gustaría que pudierais ayudarme con el siguiente script, y esque ya tengo una parte pero las cosas iniciales que pondré ahora no se ni como empezar, a pesar de haber buscado solo me sirven pequeños conceptos:

Debo realizar un script de Power Shell dado un documento .csv con las siguientes filas:


nombre;apellido1;apellido2;Unidad Organizativa
Carlos;Pedro;Torres;Sistemas
Fernando;Font;Fernandez;Administración
Rebeca;Suarez;Moreno;Administración
Cristian;Ortega;;Producción
Pedro;Garcia;Gomez;Desarrollo
Ruben;Urel;Mendez;Producción
Israel;Moreno;Abadin;Producción
David;Nito;Leon;Ventas
Ferran;Galvez;Soriano;
Len;Carter;Rubio;Ventas


donde la primera fila son los metadatos y las filas siguientes los datos en si

V-Bien, lo primero seria coger el csv e importarlo -> fácil
X-Si existe la Unidad Organizativa = no la creo, si no existe, la creo (con el nombre dado por el csv) -> se como crear UO, pero no como comprobarlo por csv si existen
X-Si el grupo Shadow de la UO existe = no lo creo, si no existe, lo creo -> no se como podria comprobar lo del grupo shadow, no se me ocurre la manera
V-Si el usuario no existe lo creo en la UO asignada y lo activo con: password, miembro grupo shadow y el nombre de cuenta será el apellido1 -> se como crear los usuarios darle la pass y su username, pero no se como asignarle la UO que le pertoca, ni hacerle miembro del grupo Shadow
X-Si le pasara otro csv donde un usuario existente tiene otra UO, que el script moviera ese usuario existente a la UO nueva que indica el csv, si no, que se quede el usuario en la UO que esta (si coincide, claro)

Son bastantes cosas pero bueno debía poner todo bien especificado, mas que nada por si alguien me puede aportar conceptos, o links, o cualquier cosa
Muchas gracias de verdad!
2  Programación / Scripting / Re: [BASH] Ideas para realizar este script? en: 24 Marzo 2014, 15:12 pm
si llegas a encontrar tu solucion, estaria bien que la compartieras con el foro. Quizas alguien mas lo pueda usar en el futuro


Pues sí, para quien lo quiera usar (o ayudar) de momento tengo esto:


Código:

#!/bin/bash
clear

echo "Escribe el numero para los Mb:"
read numero
typeset -r __TRUE=0
typeset -r __FALSE=1
function isNumber {
  typeset TESTVAR="$(echo "$numero" | sed 's/[0-9]*//g' )"
  [ "${TESTVAR}"x = ""x ] && return ${__TRUE} || return ${__FALSE}
}
isNumber $numero
if [ $? -eq ${__TRUE} ] ; then
  echo "Es un numero entero y puedes seguir"
  echo "Pulsa un boton para continuar ..."
  read 
  rm borra
  rm borrados.txt

  var1='si'
  echo "Has escogido: " $numero " Mb"
  echo "Pulsa Enter para continuar ..."
  read

  while [ "$var1" != "no" ]
  do
  echo "----------------------------------"
  echo "Hora de insertar usuarios y grupos: "
  echo "----------------------------------"
  echo "Inserta el usuario:"
  read usuario
  echo "Inserta el grupo:"
  read grupo
  echo "Su busqueda ha sido de:"
  echo "Tamaño:" $numero
  echo "Usuario:" $usuario
  echo "Grupo:" $grupo

  find ./ -type f -size +$numero -user $usuario >> borra
  echo "Quieres continuar (si/no)?"
  read var1
  done

  #cat fichero | awk -F":" '(print "find ./ -type f -size +"$1")'
  for i in nombre
  do
  nombre2= `ls -la $i |awk -F " " '(echo $9)'`
  propietario= `ls -la $i |awk -F " " '(echo $3)'`
  tamano= `ls -la $nombre |awk -F " " '(echo $5)'`
  echo "El archivo: " $nombre2 "como propietario a: " $propietario " de tamaño " $tamano >> borrados.txt
  rm -rf $i
  done



else
  echo "Este numero no es un entero o no es un numero"
  echo -e "Saliendo del programa ..."
  sleep .80
fi


De momento este codigo comprueba que el primer numero introducido es entero y es numero.
Usara este primer numero introducido para determinar el tamaño en Mb de lo que debera buscar y borrar, los siguientes parametros introducidos serán usuarios o grupos, que usará para indicar al archivo txt quien ha sido el que ha borrado ese archivo superior a "x" mb, y bueno viene siendo un poco lo que pedía al principio, aun le falta darle un poco de giro a la logica pero lo voy planteando a ver que saco, porque todavía falla  :rolleyes:


Editado: Había puesto un código que no era
3  Programación / Scripting / Re: [BASH] Ideas para realizar este script? en: 20 Marzo 2014, 12:28 pm
busca informacion acerca del comando "find", de por si se puede usar para eliminar archivos de mas de cierto tamaño


Muchas gracias esas son las ideas que necesito, es que realmente no sabia mucho como empezar, te lo agradezco
4  Programación / Scripting / Re: Ideas para realizar este script? en: 19 Marzo 2014, 21:22 pm
¿Vas a especificar el lenguaje que estás utilizando o estás esperando a que alguien lo adivine?, si no importa el lenguaje al menos aclara ese detalle..

Saludos


[OFFTOPIC]
PD: Cuanta falta hace el uso de las plantillas...
[OFFTOPIC]



Editado, sorry
5  Programación / Scripting / [BASH] Ideas para realizar este script? en: 19 Marzo 2014, 19:33 pm
Tengo que realizar un script en bash para linux que haga esto:



- Script pide unos parametros:
   -El primer parametro insertado el programa lo considera megabytes
   -Los parametros siguientes el programa lo considerara usuarios o grupos

- El mismo programa borrara todos los archivos del directorio "actual" que se sobrepase del tamaño indicado al principio y cuyo usuario o grupo este en la lista d eparametros pasados


Condiciones:

- Si el primer parametro no es un numero entero ---> msg error y script detenido
- Se creara un archivo de texto "borrados.txt" con nombre tamaño y propietario de los archivos borrados





Necesitaria alguna idea para empezar este script, mas o menos la tengo, pero como le digo por ejemplo que el primer parametro sea considerado como MB?



Muchas gracias
6  Programación / Scripting / Re: Syntax error: “(” unexpected (expecting “fi”) -- Como puede ser? en: 14 Marzo 2014, 05:45 am
es que no te inserta el addusers porque estás intentando de insertar un nombre con espacios (nombre completo, pepito feo) deberías ahí insertar el usuario pfeo; por lo que te lleva recursivamente a revisar la variable usuario...

el comando cut lo delimitas por comas tanto para password, nombre completo como para grupos, sin embargo en usuarios debes tomar la primera letra, y la segunda cadena completa, que lo limita un espacio.

bueno espero que puedas solucionarlo mirando esos puntos, luego si sigues trabado postea nuevamente el código ya que ha variado bastante, sino vamos a marearnos todos  ;D
en algunas horas vuelvo jejeje saludos!



Muchisimas gracias por tu ayuda, referente a lo del cut, he cambiado la coma por ":" a ver que tal pero sigue sin ir. Luego lo que dices de tomar la primera letra y la segunda cadena he realizado un "echo" del resultado tal y como lo tendría que insertar y me hace bien el hecho de coger la primera letra y la segunda cadena pero el problema es que no se inserta..
Por otra parte a nivel de passwd y lo cambié y lo puse en la linea de useradd como ya dije
Código:
useradd -n -c ${nombrecompleto[$x]} -p ${password[$x]} -g "${grupos[$x]}" $usuario 2> /dev/null"
con lo cual ya no está la linea de
Código:
echo "${password[$x]}" | passwd --stdin "$usuario" > /dev/null

Te dejo el código tal y como esta ahora:

Código:
#!/bin/bash

archivousers="usuarios.csv"
IFS=$'\n'

if [ ! -f "$archivousers" ]
then
echo "No se ha encontrado el archivo $archivousers"
else
#Crearemos los usuarios mediante un array si se ha encontrado el archivo
grupos=(`cut -d: -f 3 "$archivousers" | sed 's/ //'`)
nombrecompleto=(`cut -d: -f 1 "$archivousers"`)
password=(`cut -d: -f 2 "$archivousers"`)
usuarios=(`cut -d: -f 1 "$archivousers" | tr [A-Z] [a-z] | awk '{print substr($1,1,1) $2}'`)
#Miramos si el grupo existe y si no lo creamos
for grupo in ${grupos[*]}
do
  grep -q "^$group" /etc/group ; let x=$?
  if [ $x -eq 1 ]
  then
    groupadd "$group"
  fi
done
#Creamos los usuarios y los añadimos al grupo con la pass
x=0
creados=0
for  usuario in ${usuarios[*]}
do
  echo "Name: ${nombrecompleto[$x]}, Usuario: $usuarios, pw: ${password[$x]}"
  useradd -n -c ${nombrecompleto[$x]} -p ${password[$x]} -g "${grupos[$x]}" $usuario 2> /dev/null
  if [ $? -eq 0 ]
  then
    let creados=$creados +1
          fi
  x=$x+1
  echo -n "..."
  sleep .25
done
sleep .25
echo " "
echo "Completado! $creados cuentas han sido creadas y añadidas correctamente."
fi



mi csv usuarios.csves el siguiente:


Código:
Pepito Feo:12345633:156-456-3322:995 Bluto Street, Anywhere, USA 29358:3/19/1992:Accounts:22350
Jennifer Guapa:68451695:326-658-1162:583 Laurel Ave., Pensilvania, TX 65812:1/02/1996:Computer:59655


De nuevo, muchas gracias! sigo buscando a ver que puede ser. Saludos!  :D
7  Programación / Scripting / Re: Syntax error: “(” unexpected (expecting “fi”) -- Como puede ser? en: 14 Marzo 2014, 04:24 am
Si, tengo permisos en todas las carpetas, ahora estoy mirando de solucionar el tema de la password
8  Programación / Scripting / Re: Syntax error: “(” unexpected (expecting “fi”) -- Como puede ser? en: 14 Marzo 2014, 04:13 am
con respecto a usuarios.csv; como lo tienes grabado? no será problema del delimitador?

(agrego) entiendo que la opción d es el delimitador, por lo cual entiendo que si usas la coma deberías indicarla entre comillas; otro punto que veo porqué usas la opción --stdin? no es un parámetro válido de passwd:

Código:
Opciones:
  -a, --all
  -d, --delete
  -e, --expire
  -h, --help
  -k, --keep-tokens
  -i, --inactive INACTIVO
  -l, --lock
  -n, --mindays DÍAS_MIN
  -q, --quiet  
  -r, --repository REP
  -R, --root CHROOT_DIR
  -S, --status  
  -u, --unlock
  -w, --warndays DÍAS_AVISO
  -x, --maxdays DÍAS_MAX


Exacto, con lo del espacio tenias razon, pues no ejecutaba bien el script, con lo del delimitador si, tengo -d, ya que en el csv lo tengo grabado como:
pepito feo,pass1234,grupo
Con lo cual tendria que añadirse : pfeo (user) pepito feo (name, last name) y el grupo al que pertenece.

Lo de passwd --stdin pense que funcionaria pues vi en algun sitio que lo ponian ya que la opcion -p no la cogia bien es más en la linea de useradd intente ponerla de este modo:

Código:
useradd -n -c ${nombrecompleto[$x]} -g "${grupos[$x]}" -p "${password[$x]}" $usuario 2> /dev/null 

y no lanza error pero no inserta.. muchas gracias por insistir !
9  Programación / Scripting / Re: Syntax error: “(” unexpected (expecting “fi”) -- Como puede ser? en: 14 Marzo 2014, 03:02 am
(edito) hola slyfx perdón escribi una burrada, estaba con otro tema.

revisa por favor el primer if, no deberías agregarle paréntesis y negarla completa? el error entiendo que te tira en la línea 6.

----------------------
Hola Gh057, es lo que no entiendo porque me tira el error en la linea 12 es decir donde pone "grupos=(cut ...)", no entiendo porque deberia ser alli donde salta el unexpected
Gracias

Edito: ahora leo lo que pone e intento gracias de nuevo
-----------------------

Edito: Nada, sigue tirando el mismo error y en la misma linea, he puesto espacio como tu has dicho y igual, he probado de modificar la forma de hacer la creacion del array pero nada..
Gracias por tu colaboracion
10  Programación / Scripting / Syntax error: “(” unexpected (expecting “fi”) -- Como puede ser? en: 14 Marzo 2014, 02:43 am
Código:
#!/bin/bash

archivousers="usuarios.csv"
IFS=$'\n'

if [! -f "$archivousers" ]
then
echo "No se ha encontrado el archivo $archivousers"
else
#Crearemos los usuarios mediante un array si se ha encontrado el archivo

grupos=(`cut -d, -f 3 "$archivousers" | sed 's/ //'`)
nombrecompleto=(`cut -d, -f 1 "$archivousers"`)
password=(`cut -d, -f 2 "$archivousers"`)
usuarios=(`cut -d, -f 1 "$archivousers" | tr [A-Z] [a-z] | awk '{print substr($1,1,1) $2}'`)

#Miramos si el grupo existe y si no lo creamos

for grupo in ${grupos[*]}
do
  grep -q "^$group" /etc/group ; let x=$?
  if [ $x -eq 1 ]
  then
    groupadd "$group"
  fi
done


#Creamos los usuarios y los añadimos al grupo con la pass catapumchimpun

x=0
creados=0
for  usuario in ${usuarios[*]}
do
  useradd -n -c ${nombrecompleto[$x]} -g "${grupos[$x]}" $usuario 2> /dev/null
  if [ $? -eq 0 ]
  then
    let creados=$creados +1
          fi

  #En esta parte crearemos la contraseña

  echo "${password[$x]}" | passwd --stdin "$usuario" > /dev/null

  #Como extra que avise por mail

  echo "Bienvenido! Tu cuenta ha sido creada, tu usuario es $usuario y tu contraseña temporal es \"$password\" sin las comillas" | mail -s "Nueva cuenta creada para $usuario" -b root $usuario

  x=$x+1

  echo -n "..."
  sleep .25
done
sleep .25
echo " "
echo "Completado! $creados cuentas han sido creadas y añadidas correctamente."
fi





He mirado de intentar que no se por el then el cual tenga que ir :
if [] ; then  por si no hacia bien el cerrado del if pero, no veo donde cae el error... alguna idea?
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines