You are on page 1of 18

Taller 5: Permisos especiales, procesos, empaquetado, compresin, bash

################################################################################
###########################
Atributos Especiales (ext3, etx4):
--------------------------------------$> su $> vim prueba
hola mundo
$> chattr +i prueba
aade el bit de inmutabilidad, el archivo no puede ser modificado
$> lsattr prueba
lista los atributos de un archivo
$> vim prueba
hola mundo
que tal
ESC:wq!
$> chattr -i prueba
quita el bit de inmutabilidad
$> vim prueba
hola mundo
que tal
ESC:wq
$> chattr +a prueba
establece que el archivo solo se puede escribir aadiendo contenido
$> echo "esto no funciona"> prueba
$> echo "esto si funciona">> prueba
$> cat prueba
$> chattr -a prueba
quita la opcion de solo aadir
$> man chattr
para ver lista de atributos
Permisos Especiales:
---------------------------------------------------------SUID

--->

system UID, permite ejecutar un archivo con los


permisos del uid asignado.

SGID

--->

system GID, permite ejecutar un archivo con los


permisos del gid asignado.

Sticky --->

bit de persistencia, solo el propietario del archivo


puede borrar el archivo o directorio.

Nivel especial: (solo root puede asignar este bit)


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

0 ---> ningun permiso, valor por defecto


1 ---> sticky
2 ---> sgid
3 ---> sgid+sticky
4 ---> suid
5 ---> suid+sticky
6 ---> suid+sgid
7 ---> suid+sgid+sticky
ejemplo de Sticky (Bloqueando borrado de archivos)
------------------------------------------------$> su $> mkdir /a
$> chmod 1777 /a
Dando permisos de sticky al directorio; solo root podra borrar los archivos del
directorio; aunque estos tengan permisos totales
$> echo "date" > /a/lahora
$> chmod 777 /a/lahora
le damos permisos totales al archivo lahora
$> ls -ld /a
se verifica el sticky del directorio
$> su - alumno
Como alumno intentar borrar lahora
$> rm /a/lahora
no puede borrar el archivo ya que el directorio con sticky
protege a los archivos, solo root puede borrar
Ejemplo de SUID (ejecutando un archivo como el dueo)
----------------------------------------------------$> su $> chmod 4755 /usr/bin/vim
Asignando el SUID al editor de texto vim
Loguearnos como usuario
$> su - alumno
Editar archivo /etc/hosts, agregando al final, grabar con ESC:wq!
$> vim /etc/hosts
192.168.10.10 mail.adiestra.pe
El usuario alumno pudo grabar en el archivo /etc/hosts porque ejecuto vim como s
i fuera root

$> su $> chmod 0755 /usr/bin/vim


Reestablece los permisos originales y le quita el SUID
Ejemplo de SGID (directorio de grupo)
------------------------------------------$> groupadd sistemas
$> mkdir /sistemas
$> chgrp sistemas /sistemas
$> chmod 2770 /sistemas
$> gpasswd -a alumno sistemas
$> gpasswd -a tuxito sistemas
$> su - alumno
$> touch /sistemas/unarchivo
$> exit
$> su - tuxito
$> touch /sistemas/otroarchivo
$> exit
$> su - root
$> touch /sistemas/nuevoarchivo
$> ls -l /sistemas ---> se observa que los archivos se crearon con grupo sistem
as
* NOTA
Se recomienda usar una mscara 0007 para los usuarios
del grupo o mnimo una mscara 0002
Configuracin de sudo (programa para ejecutar comandos como root)
------------------------------------------------------------------$> yum -y install sudo
Ejemplo
--------------------------------------------------------$> sudo yum install nmap (ejecutar como usuario alumno)
Para que un usuario pueda ejecutar sudo tiene que estar en el /etc/sudoers
su usuario o un grupo y ser parte de el
$> su $> vim /etc/sudoers (archivo de configuracion de sudo)
define el alias SERVICES para comandos de servicio
33: Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig, /bin/systemctl
permiso por defecto para que root pueda ejecutar sudo
98: root = (ALL) ALL
le da permiso al usuario alumno para ejecutar comandos de servicio
99:alumno ALL=(ALL)
SERVICES
Habilita al grupo wheel ejecute todos los comandos con permisos de root
106: %wheel = (ALL) ALL
ESC:wq!
Ejemplo: reiniciando la red como usuario alumno
$> su - alumno
$> sudo service network restart

$> sudo systemctl restart NetworkManager


$> su Cambiando de grupo principal wheel al usuario alumno para que pueda ejecutar sud
o
$> usermod -g wheel alumno
$> su - alumno
$> sudo yum install nmap
Procesos:
-------------------------------------------------------------------$> ps
lista procesos del usuario
$> ps ax
lista todos los procesos
$> ps axf
lista todos los procesos, jerarqua y ruta de los comandos
$> ps ax | grep gdm
verifica si en la lista de procesos se esta ejecutando gdm
2550

PID

TTY

--> consola desde donde se esta ejecutando

sS

STATE

--> estado del proceso

0:00

TIME

COMMAND

--> identifica el proceso

--> tiempo que se esta ejecutando el proceso


--> comando del proceso

$> man ps
verifica fligs en la pagina del manual
Matar procesos:
-------------Ejecuta un proceso que guarda en el archivo boom y lo manda a segundo plano
$> yes (te muestra y infinitamente)
ctr+c ---> cancela el proceso
$> yes > boom (lo direcciona a un archivo y bloquea la consola)
ctrl +c
$> yes > boom &
lo manda en segundo plano y desbloquea la consola
$> ps ax | grep yes
verifico la ejecucion del proceso
$> ls -l boom
$> killall -9 yes
(-9 indica maximo nivel de matanza)
mata el proceso por el nombre del proceso

$> ps ax | grep yes


verificar la ejecucion del proceso
$> yes > boom &
$> ls -l boom
$> ps ax | grep yes
verifico cual el PID del proceso (Ej 2525)
$> kill -9 2525

--> 2525 es el PID del proceso, es un ejemplo

$> ps ax | grep yes


$> rm -f boom
Consumo de recursos de procesos:
------------------------------Centos 6
#######################################################################
$> top --> los primeros procesos son los que mas recursos consumen
? --> muestra la ayuda de top
O --> elije una columna para ordenar los procesos (por defecto es el cpu)
k --> cpu
n --> memoria
q

--> sale del top

CentOS 7
########################################################################
Ordenar por memoria
$> top -o %MEM
Ayuda del top
?
Ayuda en lnea
$> man top
htop
############################################################
Instalar EPEL
Luego
$> yum -y install htop
$> htop
Opciones con (F1,F2, etc)
q --> sale
Ejecucion de procesos y tareas:
----------------------------------$> yes
ejecuta proceso en primer plano ctrl+c cancela la ejecucion del comando

$> yes >/dev/null &


ejecuta el proceso en segundo plano, /dev/null es el agujero negro
$> ps axf | grep yes
muestra la ruta del comando ejecutado
$> jobs
lista los procesos ejecutados por el usuario
$> fg 1
vuelve a primer plano el proceso 1 de la lista anterior
ctrl + c -> interrumpe y cancela el proceso (trata de matar)
$> yes > /dev/null
ctrl + z
---> pone en stop el proceso (detenido, pero
no muerto)
$> fg 1
ctcl + c
$> ps ax | grep yes
$> kill -9 PID

( -9 maximo nivel de matanza )

$> nohup yes >/dev/null &


permite ejecutar un proceso a nivel sistema de tal forma que el proceso no esta
enlazado al tyy se sigue ejecutando cuando se cierra
la session
Ejemplo: Nos conectamos a un servidor a traves de ssh
--------$> ssh 200.53.97.85
$> nohup wget -c http://ubuntu.com/ubuntu.iso &
se crea un archivo nohup.out donde se muestra el avance del wget
$> exit
aunque salga de la sesion el proceso se sigue ejecutando
Empaquetado y comprension:
-------------------------$> mkdir /backups
$> cd /backups
$> tar -cvf home.tar /home
empaqueta el directorio en un solo archivo home.tar
$> gzip home.tar
comprime en formato gzip un archivo y le aade extension .gz
$> tar -cvf home.tar /home
$> bzip2 home.tar
comprime en formato bzip2 un archivo y le aade extension .bz2

$> ls -l
$> tar -zcpvf home.tgz /home
empaqueta y comprime en formato gzip
z
c
p
v
f

-->
-->
-->
-->
-->

comprimir con gzip


empaquetar
preservar los permisos
verbose
file (archivo a generar)

$> tar -jcpvf home.tbz /home


empaqueta y comprime en formato bzip2
j --> comprimir en bzip2
$> gunzip home.tar.gz
descomprime un archivo de formato bzip
$> ls -l
$> tar -xvf home.tar
desempaqueta un archivo de formato tar
x --> desempaqueta
$> bunzip2 home.tar.bz2
descomprime un archivo de formato bzip2
$> ls -l
$> tar -xvf home.tar
$> tar -zxpvf home.tgz
descomprime y desempaqueta un archivo de formato gzip
$> tar -jxpvf home.tbz
desempaqueta y descomprime un archivo de formao bzip2
Archivos Zip windows
------------------------------------------------------$> yum -y install unzip
$> unzip archivo.zip
descomprime un archivo .zip
Archivos rar
----------------------------------------------------------Hay que instalar unrar (habilitar repositorio nux-dextop)
Instalar primero EPEL
$> yum -y install epel-release
Luego instalar el rpm del repositorio de nux-dextop
$> rpm -Uhv http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0
-1.el7.nux.noarch.rpm
$> vim /etc/yum.repos.d/nux-dextop.repo
4: enabled=1
$> yum -y install unrar

$> unrar -x archivo.rar


descomprime un archivo .rar
Programa grfico para KDE
$> yum -y install ark
$> ark
Opciones adicionales de tar
---------------------------------------------------------------$> tar -zxpvf home.tar.gz -C /
descomprime y desempaqueta el archivo tomando como directorio base el /
$> tar -ztf home.tgz
Visualiza el contenido del archivo empaquetado sin descomprimirlo
t --> visualizar contenido
Informacion del sistema:
-----------------------Informacin del Hardware
##############################################
Instalar EPEL
$> yum -y install lshw lshw-gui
$> lshw | less
$> lshw-gui
Dar Refresh y doble click en los nodos para que muestre informacin
$> su Comandos con informacin especfica
#######################################################
$> hostname
muestra el nombre de la pc
$> uptime
tiempo total desde el ultimo arranque de la Pc
$> uname -a
muestra la version del kernel y la arquitectura del pc
$> dmesg | less
muestra los eventos log del kernel desde que se inicio la Pc
$> free
informacion de la ram disponible y usada
$> fdisk -l
muestra todas las particiones fisicas existentes (Tabla ms-dos)
$> parted -l
muestra todas las particiones fisicas existentes (Tabla GPT o ms-dos)
$> df -h
informacion de las particiones montadas y los espacios en disco usado
$> du -sH /usr
informacion del espacio en disco usado por /usr

$> du -bh /usr | less


informacion de los espacios en disco usado por /usr y subdirectorios
$> cat /proc/cpuinfo
informacion del cpu
$> cat /proc/meminfo
informacion de la memoria Ram
$> cat /proc/interrupts
informacion de la IRQS
$> lspci
lista de todos los dispositivos PCI
$> lspci | grep Ethernet
lista las tarjetas de red Ethernet
$> lspci | grep Network
lista las tarjetas de red wireless
$> lspci | grep VGA
lsita las tarjetas de video
$> lsusb
lista los dispositivos usb
$> lsmod
lista los modulos del kernel incluidos drives que esten cargados
activos en el sistema (si carga drivers de tarjeta aqui se carga y
lista)
$> who
muestra los usuarios locales y remotos que tienen una sesion activa
(muestra que usuarios estan en el sistema en el momento)
$> w
muestra los usuarios locales y remotos que tienen una sesion activa
y que comandos estan ejecutando
$> last
muestra el historial de sesiones abiertas en el sistema
$> ifconfig -a
muestra informacion delas interfaces de redes rps,mascara,mac address
muestra tarjeta de red y toda la informacion
$> route -n
muestra informacion de las pasarelas de red
$> cat /etc/resolv.conf
muestra informacion de los servidores DNS
$> netstat -nltp
muestra informacion de los puertos TCP abiertos
$> netstat -nlup
muestra los puertos UDP abiertos
$> netstat -na

muestra todas las conexiones TCP,UDP,unix, activas


$> netstat -r
igual al comando route -n
$> cat /etc/hosts
lista los nombres de pcs asociados a su ips
$> less /etc/services
lista los puertos TCP y UDP y los nombres de servicios asociados a
ellos
$> mc (explorador de archivos de modo texto)
Instalar mc en Fedora
$> yum -y install mc
$> mc
$> mount
Muestra los dispoditivos montados y sus opciones de montaje
$> cat /etc/fstab
Muestra la configuracion de los puntos de los montajes de
las particiones de disco
$> blkid /dev/sda1
Muestra el UUID de una particin; esa informacin puede ser
usado en el fstab
Bash Script
##############################################################################
Ejecucin de Scripts
-------------------------------------------------$> vim /usr/bin/damelahora
#!/bin/bash (define el interprete del script)
echo "son las"
date "+%H:%M"
$> /usr/bin/damelahora (ejecuta el archivo si tiene permisos en ejecucion)
$> chmod 755 /usr/bin/damelahora (agrega permisos de ejecucion al archivo)
$> /usr/bin/damelahora (ejecuta el archvio, es necesario darle su ruta absoluta)
$> damelahora (ejecuta un comando que se encuentra en algunos de los directorios
de $PATH)
$> echo $PATH (muestra el valor de la variable de entorno /bin:/sbin /usr/sbin:/
usr/load/bin)
Script en php
$> vim /usr/bin/damelahora.php
#!/usr/bin/env php
<?php
echo "son las ".date("H:i")."\n";
$> chmod 755 /usr/bin/damelahora.php

Instalar intrprete php


$> yum -y install php-cli
Establecer la zona horaria en el php.ini
$> sed -i "s/\;date.timezone =/date.timezone =America\/Lima/g" /etc/php.ini
Ejecutar script
$> damelahora.php
Ejecucion en modo relativo
-------------------------$> cd /usr/bin
$> ./damelahora
/usr/bin/damelahora
$> vim hola
#!/bin/bash
echo Hola Mundo
$> chmod 755 hola
$> ./hola
La primera lnea identifica al intrprete; se usa para cualquier lenguaje de script
(perl, php, python)
Estados de la consola
--------------------Entrada estandar stdin
Salida estandar
stdout
Salida de error
stderr

Valor
0
1
2

- stdout a un fichero
Esto har que la salida de un programa se escriba en un fichero.
$> ls -l
$> ls -l > ls.txt
En este caso, se crear un fichero llamado 'ls.txt' que contendr lo que se vera en l
a pantalla si escribiese el comando 'ls -l' y lo ejecutase.
-stdin desde un fichero
$> mysql -u root -p < data.sql
- stderr a un fichero
Esto har que la salida stderr de un programa se escriba en un fichero.
$> ls loquesea
$> ls loquesea 2> error-ls.txt
$> cat error-ls.txt
En este caso, se crear un fichero llamado 'error-ls' que contendr la parte stderr
de la salida que dara el comando 'ls loquesea'.
- stdout a stderr
Esto har que la salida stdout de un programa se escriba en el mismo descriptor de

fichero que stderr.


$> grep -R da / 1>&2
En este caso, la parte stdout del comando se enva a stderr; puede observar eso de
varias maneras.
- stderr a stdout
Esto har que la salida stderr de un programa se escriba en el mismo descriptor de
fichero que stdout.
$> tail /var/log/messages loquesea > resultado 2>&1
Variables (para declarar no se usa dolar; una vez declarado se usa dolar)
------------------------------------------------------------------------$> vim holamundo
#!/bin/bash
CAD="Hola Mundo!"
echo $CAD
Ejecucin de bash dentro de bash
--------------------------------$> vim backup
i
#!/bin/bash
OF=/var/mi-backup-$(date +%Y%m%d).tgz
tar -zcf $OF /home/yo/
$> vim backup2
OF=/var/mi-backup-`date +%Y%m%d`.tgz
tar -zcf $OF /home/yo/
Variables predefinidas ($0 es el script $1,$2,$3 son los argumentos que se le p
asa al script)
--------------------------------------------------------------------------------------------$> vim fileattr
#!/bin/bash
ATRIBUTOS_SCRIPT=`/bin/ls -l $0`
echo "El usuario '$USER' ha ejecutado el script $0, en el ordenador '$HOSTNAME'.
con el argumento $1"
echo "Los atributos del script son: "
echo $ATRIBUTOS_SCRIPT
$> chmod 755 fileattr
$> ./fileattr habla
Variables locales
----------------$> vim varlocal
#!/bin/bash
HOLA=Hola
function hola {
local HOLA=Mundo
echo $HOLA
}
echo $HOLA

hola
echo $HOLA
Condicionales
--------------$> vim condicionales
#!/bin/bash
if [ "petete" = "petete" ]; then
echo expresin evaluada como verdadera
fi
if [ "petete" = "petete" ]; then
echo expresin evaluada como verdadera
else
echo expresin evaluada como falsa
fi
T1="petete"
T2="peteto"
if [ "$T1" = "$T2" ]; then
echo expresin evaluada como verdadera
else
echo expresin evaluada como falsa
fi
FILE=~/.basrc
if [ -f $FILE ]; then
echo el fichero $FILE existe
else
echo fichero no encontrado
fi
# Se puede haber usado tambien if [ 'test -f $FILE']
Operadores de conparacin
---------------------------------------------------Comparacin de enteros (nmeros)
-eq
es igual a
if [ "$a" -eq "$b" ]
-ne
no es igual a / es distinto a
if [ "$a" -ne "$b" ]
-gt
es mayor que
if [ "$a" -gt "$b" ]
-ge
es mayor que o igual a
if [ "$a" -ge "$b" ]
-lt
es menor que

if [ "$a" -lt "$b" ]


-le
es menor que o igual a
if [ "$a" -le "$b" ]
<
es menor que (dentro de doble parntesis)
(("$a" < "$b"))
<=
es menor que o igual a (dentro de doble parntesis)
(("$a" <= "$b"))
>
es mayor que (dentro de doble parntesis)
(("$a" > "$b"))
>=
es mayor que o igual a (dentro de doble parntesis)
(("$a" >= "$b"))
Comparacin de cadenas
=
es igual a
if [ "$a" = "$b" ]
==
es igual a
if [ "$a" == "$b" ]
Nota: Aunque es un sinnimo de = el operador == se comporta diferente cuando s
e usa dentro de corchetes dobles que simples, por ejemplo:
[[ $a == z* ]] # Verdadero si $a empieza con una "z" (expresin regular coin
cide).
[[ $a == "z*" ]] # Verdadero si $a es igual a z* (coincide literalmente).
[ $a == z* ]
# Ocurre divisin de palabras.
[ "$a" == "z*" ] # Verdadero si $a es igual a z* (coincide literalmente).
!=
no es igual a / Distinto
if [ "$a" != "$b" ]
NOTA: este operador usa coincidencia de patrn dentro de doble corchete.
<
es menor que (en orden alfabtico ASCII)
if [[ "$a" < "$b" ]]

if [ "$a" \< "$b" ]


Nota: el operador < necesita ser escapado dentro de corchetes.
>
es mayor que (en orden alfabtico ASCII)
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
Nota: el operador > necesita ser escapado dentro de corchetes.
-z
La cadena est vaca (nulll), tiene longitud cero.
cadena='' # Variable de longitud cero (null)
if [ -z "$String" ]
then
echo "\$String est vaca."
else
echo "\$String no est vaca."
fi
-n
cadena no est vaca (contiene algo)
nota: El operador -n exige que la cadena est entre comillas entre parntesis. A
unque el uso son comillas puede funcionar es altamente recomendable usar comilla
s.
Comparaciones lgicas
-a
Y lgico (and)
exp1 -a exp2
devuelve verdadero si ambas exp1 y exp2 son verdaderas.
-o
O lgico (or)
exp1 -o exp2
devuelve verdadero si alguna de las expresiones exp1 y exp2 son verdaderas.
stos ltimos operadores son similares a los operadores de Bash && (and) y || (or) c
uando se usan con doble corchete:
[[ condition1 && condition2 ]]

$> vim bucles


#!/bin/bash
for numeros in 1 2 3 4 5 6 7 8 9
do
echo $numeros # cada numero en una linea separada
done
echo
for numeros in "1 2 3 4 5 6 7 8 9"
# Todos los nmero en la misma linea.

do

# Una lista entre comillas crea una nica variable.

echo $numeros
done
for planet in "Mercury 36" "Venus 67" "Earth 93" "Mars 142" "Jupiter 483"
do
set -- $planet
# divide los valores y crea parmetros posicionales ($1, $2 ...)
# "--" evita problemas si $planet empieza con guiones o es una cadena vaca.
echo "$1
$2,000,000 millas del sol"
#-------2 tabuladores-aade ceros al parmetro $2
done
LIMITE=10
a=1
while [ "$a" -le $LIMITE ]
do
echo -n "$a " # -n = no aade retorno de carro
let "a+=1"
done
for i in $( ls ); do
echo item: $i
done
for i in `seq 1 10`;
do
echo $i
done
CONTADOR=0
while [ $CONTADOR -lt 10 ]; do
echo El contador es $CONTADOR
# let se usa para forzar que contador sea un valor numerico
let CONTADOR=CONTADOR+1
done
echo
LIMITE=10
a=1
until [ "$a" -ge $LIMITE ]
do
echo -n "$a " # -n = no aade retorno de carro
let "a+=1"
done
echo
$> vim funciones
fun () {
if [ "$1" ]
then
echo "Parametro #1 es \"$1\".-"
fi

# Is parameter #1 zero length?

return 0

echo "sin parametros."


fun
echo
echo "1 parametro."
fun uno
echo

Ejemplo de case y un demonio


----------------------------$> vim demonio
#!/bin/bash
function sanityCheck {
q=`ps -ef |grep $0 |grep -v "grep"|grep -v $$| wc -l`
if [ $q != "0" ]; then
echo "Another instance of $0 running..."
exit 1
fi
}
function start {
sanityCheck
echo "Starting daemon..."
main
}
function shutdown {
echo "Shutting down daemon..."
kill `ps -ef |grep $0|grep -v $$ |grep -v "grep"|awk '{print($2)}'`
}
function main {
{
while [ 1 ]; do
echo "Test..."
sleep 2
done
} &
}
case $1 in
"start")
start
;;
"shutdown")
shutdown
;;
*)
start
;;
esac
$> chmod 755 demonio

Ejecutar en una consola


$> ./demonio start
Ejecutar en otra consola
$> ./demonio shutdown
Breakpoints y salida de un script
--------------------------------break es el comando que se usa para salir de un bucle
exit 0 se usa para cortar la ejecucion del script

You might also like