Seguridad en Linux

Iniciado por el-brujo, 18 Septiembre 2002, 19:54 PM

0 Miembros y 1 Visitante están viendo este tema.

el-brujo

Documento Original de:
http://www.bandaancha.st/documentos.php?docid=26

Importante: Se permite la reproducción de este documento siempre que se mencione la fuente, el autor y se incluya un hiperenlace hacia su ubicación original.

Seguridad en LINUX por  |^FaRLo^|
1 SeGuRiDaD eN LiLo
2 uSuaRioS y PaSSWorDs
2.1 GruPoS , chgrp , newgrp , GruPoS CoN PaSSWorDs , etc...
2.2 La oRDeN Su
2.3 PaSSWorDs eN SHaDoW

Comentarios:

Bueno, a acusa del poco tiempo que tengo voy ha tener que ir haciendo este
especie de tutorial poco a poco, por tanto he decidido dividirlo y segun como lo
vea tratare mas temas de los que aqui expongo,
esto dependera de como se desarrolle la cosa :).

PRiMeRa PaRTe

1. SeGuRiDaD eN LiLo

Para arrancar Linux se debe instalar un programa que cargue el kernel, Linux
se puede cargar de varias maneras pero lo mas habitual es usar el programa
Linux Loader (LILO), a este programa se le pueden pasar varias opciones
durante el arranque para activar características especiales del sistema o
para pasar opciones al kernel, las opciones más conocidas son:

rescue - Inicia Linux en modo de único usuario para permitir reparaciones del
sistema.

single - Similar al anterior.

root=<dispositivo> Esta opcion permite arrancar desde otro dispositivo ,
por ejemplo desde un CD_ROM.
El problema es que si alguien tiene acceso local a tu maquina y arranca con
la opcion single:

Linux single
Posss entrare en el sistema con permisos de root y sin poner contrase¤a ,
para remediar esto se ha de cambiar la configuración de LILO para que pida
una contrase¤a cuando se intente utilizar la opcion single o rescue.

El archivo de configuracion de LILO se encuentra en :

/etc/lilo.conf

Para hacer que pida password se ha de añadir lo siguiente:

password=elpasswordquequieras
restricted

Por ultimo los permisos del fichero /etc/lilo.conf deberian de ser solo de
lectura y escritura para el root y para nadie mas, como mucho para el grupo
al que pertenece el root. Ya que como el password que hemos puesto esta en
texto plano cualquiera podria verlo.

2. uSuaRioS Y PaSSWorDs:

Passowrds:

UNIX utiliza un programa llamado crypt(3) para encryptar las passwords, este
programa se basa en el algoritmo de encrytacion DES (Estandar de Encryptacion
de Datos).

Las passswords pueden tener como maximo 11 caracteres pero una vez
encryptadas tienen 13, esto es debido a que los dos primeros caracteres son
el grano de sal (condimento) y se generan a parir del contador del reloj en
el momento en el que se asigna la contraseña, este grano de sal consta de 12
bits, esto quiere decir que puede ser un valor de entre 0 y 4095. Asi para
cada contrase¤a posible hay 4095 formas diferentes de encryptacion.

En el fichero /etc/passwd se guardan el nombre de usuario, nombre real ,
informacion de identificacion, y si el sistema no esta en shadow el passwd
encryptada del usuario.
Un ejemplo:

root:WLR103VcgThbH,31AB:0:0:root:/root:/bin/bash

Donde WLR103VcgThbH es la clave encrytada y WL es el gano de sal.

El numero 3 es el maximo de vida del passwd, despues de tres semanas el
usuario debera cambiarla.

El numero 1 indica cuantas semanas deben pasar para que el usuario puede
cambiar su password.
AB Indica cuando se cambio por ultima vez la clave, (Indica el numero de
semanas que han pasado desde 1/1/1970).

Estos datos están escritos en base 64.
Si por ejemplo root:...,31AB:0:0:root:/root:/bin/bash , indica que el
usuario tendra que cambiar su clave la proxima vez que se conecte al sistema.

Para cambiar el passwd basta con teclear:

Passwd -n diasmin -x diasmax usuario

Donde diasmin es el numero de dias que han de pasar para que el usuario puede
cambiar su passwd.
diasmax es el numero de dias en que expira la clave, para deshabilitar la
expiracion basta con que el valor de tiempo sea -1. Por ejemplo en el caso
del usuario Invitado:

passwd -x 30 Invitado

El usuario Invitado tendra que cambiar su clave cada mes.

No es recomendado usar la opcion un (dias minimos para cambiar la password)
porque si el usuario sospecha que le han pillado el passwd y aun no han
pasado los dias minimos, pues no podra cambiarla hasta que no pasen dichos
dias.

Si en el campo de la clave aparece un NP, (NO password) la cuenta no tiene
password, si por el contrario aparece LK (Locked passwd) significa que la
cuenta esta bloqueada.

Para buscar las cuentas sin passwd:

egrep 'NP|::' /etc/passwd

Para buscar por ejemplo info de un usuario en el fichero passwd:

egrep 'usuario1|usuario2' /etc/passwd

El numero 0 es el identificador de Usuario (uid).
El identificador de usuario permite determinar, entre otras cosas:
Que ficheros son propiedad de dicho usuario, cuales son los que se pueden
ejecutar, a que zonas tiene acceso un usuario, etc... Con esto quiero decir
que UNIX/Linux no identifica de quien es cada cosa por el nombre de usuario
sino por el UID.

UID es un entero sin signo de 16 bits, el cual va de 0 a 65535.
Los UID's menores de 9 son habitualmente usados por funciones del sistema
como ftp.
El uid 0 corresponde a el superusuario (root), los UID para los demas
usuarios suelen empezar a partir del numero 100.

2.1 GruPoS , chgrp , newgrp , GruPoS CoN PaSSWorDs

El siguiente campo pertenece al Identificador de Grupo, en este caso root
pertenece al grupo 0. A los usuarios que van a pertenecer al mismo grupo se
les asigna el mismo gid.

El gid puede ir de 0 hasta 60000, El 0 corresponde al grupo de superusuario:
Los usuarios que estan en el mismo grupo tienen el mismo nivel de privilegios
para aquellos elementos que pertenezcan al grupo.

En el directorio /etc/group esta la lista de cada grupo, un ejemplo del
/etc/group es:

Administ:*:0:root,Charli
Programadores:*:10:Juan,Pedro,Antonio
Usuarios:*:100:

Donde:

Administ Es el nombre del grupo
* Es el password del grupo, en este caso no hay passwd
Root, Charli Los miembros del grupo.

Pueden haber un usuario que pertenezca a varios grupos, el usuario podre
entrar en todos aquellos grupos donde este su loguin, por defecto al entrar
en el sistema entrare en el grupo que corresponda a su gid, luego para
cambiar de grupo simplemente ha de teclear:

newgrp nombre-grupo

Para asociar una clave a un grupo se genera la clave para un usuario nuevo y
se copia con el editor de textos en el fichero /etc/group en el campo
correspondiente.

Los permisos para este fichero han de ser de lectura y escritura para el root
y de lectura para los demas usuarios, SI un usuario puede escribir en este
fichero puede ganar permisos de root con simplemente poner su nombre de
usuario en el mismo grupo en que esta el root y quitar la password si es que
hay.

La orden chgrp sirve para cambiar el grupo propietario de un archivo, su
sintaxis es:

chgrp [opciones] [grupo] [archivo]

La orden chown sirve para cambiar el propietario de un archivo, pero tambien
admite la utilizacion de uid y gid.

Por ejemplo:

chown 500:100 /bin/bash

Cambia el propietario del archivo al usuario con uid 500 y al grupo gid 100.
Se recomienda que /bin/chown solo pueda ser ejecutado por los usuarios con gid
0.

2.2 oRDeN Su

La orden su significa (switch user, cambiar usuario) se utiliza para cambiar
de un usuario a otro, si no se utiliza ningun campo su asume que se ha de
pasar al usuario root.

Una manera de restringir la orden su es quitando al programa /bin/su permisos
de ejecucion a los usuarios que no pertenezcan a un grupo especial, como
administradores. Como ya sabeis los permisos pueden ser para el propietario,
para el grupo y para todos los usuarios.

2.3 PaSSWorDs eN SHaDoW



Los passwords en Unix se dividen en 7 campos, (separados por dos puntos) :

tonto:h34Sd3vc23: 100:100:Alvaro:/usr/tonto:/bin/sh

- Primer campo: Tonto
Es el nombre con el que el sistema reconoce al usuario. A eso se le llama
(login). (Perdonadme los que entiendan algo de unix, pero esque lo tengo que
explicar pa alguien que no sepa na de na).

- Segundo campo: h34Sd3vc23
Esta es la palabra clave del usuario pero esta cifrada. Si contiene un
asterisco (*) este password esta desactivado y no puede usarse. :(

- Tercer campo: 100
Este es el número de usuario del sistema, (que puede ser hasta 60000). El
usuario con nivel 0 es el root o superusuario.

- Cuarto campo: 100
Es el número del grupo al que pertenece el usuario, todos los usuarios de un
mismo grupo tienen los mismos privilegios como es logico, (tambien este campo
puede ser del 0 al 60000)

- Quinto campo: Alvaro
En este campo aparecen datos adicionales del usuario, (en este caso el
nombre).

- Sexto campo: /usr/tonto
Es el directorio home del usuario en cuestion.

- Septimo campo: /bin/sh
Es el Shell que el usuario tonto utiliza.

Como si pillas un fichero de passwords que no estan en shadow y te pones a
crackearlo salen passwords como caracoles despues de la lluvia J, se decide
de poner este sistema en que las passwords encryptadas se guardan en un
archivo a parte generalmente en /etc/shadow (pero depende del sistema),
este archivo al contrario del /etc/passwd solo tiene permisos de lectura para
el root.

Luego en el fichero /etc/passwd en vez de la clave encryptada se pone un * o
algun otro simbolo, esto depende del sistema, he aqui unos ejemplos :))

Tipo de UNIX Directorio Simbolo

AIX3 /etc/security/passwd !
SunOs 5.0 /etc/shadow *
UNICOS /etc/udb *
BSD4.3-Reno /etc/master.passwd *
HP-UX /.segure/etc/passwd *
EP/IX /etc/shadow X
IRIX 5 /etc/shadow X

La estructura del fichero /etc/shadow es la siguiente:

username:passwd:last:may:must:warn:expire:disable:

Donde:

username Es el nombre de usuario.

passwd La clave encryptada.

last Los dias que hace que se cambio la clave desde 1/1/1970.

may Los dias que han de pasar para que la clave pueda ser cambiada.

must Los dias en que espira la clave.

warn Los dias en que se avisara al usurario antes de que el passwd
expire.

expire Son los dias que pueden pasar con la clave caducada antes de
que se deshabilite la cuenta.

Hay una seria de circunstancias en que poner contrase¤as a la sombra puede
dar problemas:

. Cuando en la maquina se verifica el password via NFS, NIS o algun otro
metodo.

. Cuando la maquina esta en una LAN y esta usando NIS (Network Information
Services).

En el fichero /etc/login.defs se especifica por ejemplo los dias maximos en
que puede expirar una passwd, los dias minimos, los caracteres minimos que
puede tener, el UID maximo etc...

Podemos bloquear el programa passwd para que solo un grupo de usuarios o un
usuario puedan ejecutarlo (cambiar su passwd) :

Por ejemplo:

chgrp grupo /bin/passwd

Cambia el grupo propietario del programa passwd.

chmod 4750 /bin/passwd

Cambia los permisos para que solo pueda ejecutar el propietario y el grupo
propietario del programa /bin/passwd.

NOTA: Puedes ver el contenido del fichero /etc/passwd simplemente tecleando:

cat /etc/passwd

Si estas en una red que usa un servidor NIS las contraseñas de toda la red se
guardan en este servidor, para ver el contenido del fichero passwd:

ypcat passwd


2.4 CueNTaS PoR DeFecTo
3 SisTeMaS De FicHeRos.
3.1 PerMiSoS eN FicHeRos , chown , etc ...
3.2 La oRDeN uMasK
3.3 SuiD , sGiD
3.4 La VaRiaBLe PATH


Cuentas de Invitado ("Guest")

Las cuentas de invitado (Guest) a veces se suelen utilizar para comprobar
configuraciones SMTP y demas.

Estas cuentas, por defecto, suelen tener asociado un password JOE (un
password JOE es aquel que es igual que el login), por lo que si hemos de
habilitar estas cuentas lo mejor es cambiarles el password.
Si no utilizas estas cuentas lo mejor es ponerlas el asterisco (*) en el
/etc/passwd (un asterisco entre los dos primeros ":" inhabilita la cuenta,
y por tanto el usuario no puede entrar en el sistema).

Por si acaso se le puede poner como $HOME el /dev/null (el "aguejero
negro" de nuestro sistema).

Cuentas sin Passwords
Numerosos sistemas tienen instaladas cuentas con nombres como "who", "date",
"lpq", y demás con el objetivo de lanzar determinados comandos. Esto tiene la
finalidad de permitir a los usuarios lanzar sus procesos sin necesidad de
entrar en la maquina y ejecutarlos a mano. Estas cuentas NO suelen tener
password, y por tanto su potencial problema es que abren inmensos agujeros
de seguridad en la maquina; por lo general, ademas, estas cuentas suelen tener
permisos de root (super-usuario).

Que hacer, pues?

Simplemente, NO permitir estas cuentas!

Lista Extraída de :


Hack en accion ( basico ) Parte I By PLaXiuS

Cuentas por defetco mas comunes:

AIX
~~~
guest guest

AS/400
~~~~~~
qsecofr qsecofr
qsysopr qsysopr
qpgmr qpgmr
ibm password
ibm 2222
ibm service
qsecofr 1111111
qsecofr 2222222
qsvr qsvr
secofr secofr

DECserver
~~~~~~~~~
ACCESS
SYSTEM

HP-x000
~~~~~~~
Este sistema es elaborado por Hewlett-Packard. Se caracteriza por el prompt
":". La secuencia de entrada a este sistema es una de las más complicadas.
Debes escribir: "HELLO SESSION NOMBRE,USUARIO,NOMBRE-DE-CUENTA,GRUPO"
Afortunadamente algunos de esos campos pueden dejarse en blanco. En ocasiones
todos los campos están protegidos con passwords por lo que este sistema no es
uno de los mas fáciles de acceder.

Las cuentas defaults comunes son:

Login User
~~~~~ ~~~~
MGR.TELESUP,PUB MGR
Acct: HPONLYG rp: PUB
MGR.HPOFFICE,PUB
FIELD.SUPPORT,PUB FLD,
MAIL.TELESUP,PUB MAIL,
MGR.RJE
FIELD.HPP189 ,HPP187,HPP189,HPP196
MGR.TELESUP,PUB,HPONLY,HP3

Hewlett Packard MPE-XL
~~~~~~~~~~~~~~~~~~~~~~
HELLO MANAGER.SYS
HELLO MGR.SYS
HELLO FIELD.SUPPORT HPUNSUP or SUPPORT or HP
HELLO OP.OPERATOR
MGR CAROLIAN
MGR CCC
MGR CNAS
MGR CONV
MGR COGNOS
OPERATOR COGNOS
MANAGER COGNOS
OPERATOR DISC
MGR HPDESK
MGR HPWORD
FIELD HPWORD
MGR HPOFFICE
SPOOLMAN HPOFFICE
ADVMAIL HPOFFICE
MAIL HPOFFICE
WP HPOFFICE
MANAGER HPOFFICE
MGR HPONLY
FIELD HPP187
MGR HPP187
MGR HPP189
MGR HPP196
MGR INTX3
MGR ITF3000
MANAGER ITF3000
MAIL MAIL
MGR NETBASE
MGR REGO
MGR RJE
MGR ROBELLE
MANAGER SECURITY
MGR SECURITY
FIELD SERVICE
MANAGER SYS
MGR SYS
PCUSER SYS
RSBCMON SYS
OPERATOR SYS
OPERATOR SYSTEM
FIELD SUPPORT
OPERATOR SUPPORT
MANAGER TCH
MAIL TELESUP
MANAGER TELESUP
MGR TELESUP
SYS TELESUP
MGE VESOFT
MGE VESOFT
MGR WORD
MGR XLSERVER

Major BBS
~~~~~~~~~
Sysop Sysop

PICK O/S
~~~~~~~~
DSA
DS
DESQUETOP
PHANTOM

Prolog
~~~~~~
PBX PBX
NETWORK NETWORK
NETOP <null>

Rolm
~~~~
CBX Defaults
op op
op operator
su super
admin pwp
eng engineer

PhoneMail Defaults
~~~~~~~~~~~~~~~~~~
sysadmin sysadmin
tech tech
poll tech

RSX
~~~
SYSTEM/SYSTEM (Username SYSTEM, Password SYSTEM)
1,1/system (Directory [1,1] Password SYSTEM)
BATCH/BATCH
SYSTEM/MANAGER
USER/USER
MICRO/RSX

System 75
~~~~~~~~~
bcim bcimpw
bciim bciimpw
bcms bcmspw, bcms
bcnas bcnspw
blue bluepw
browse looker, browsepw
craft crftpw, craftpw, crack
cust custpw
enquiry enquirypw
field support
inads indspw, inadspw, inads
init initpw
kraft kraftpw
locate locatepw
maint maintpw, rwmaint
nms nmspw
rcust rcustpw
support supportpw
tech field

VMS
~~~
La computadora VAX es creada por Digital Equipment Corporation (DEC) y corre
el sistema operativo VMS (virtual memory system). VMS se caracteriza por su
prompt 'Username:'. Este sistema no te dire si has entrado un login correcto
o no y te desconectara despues de tres malos intentos. Tambien mantiene un
log de todos los logins que fallaron e informa al due¤o de la cuenta la
proxima vez que entre cuantos intentos fallados se hicieron.

Es uno de los sistemas más seguros desde fuera pero ya dentro tiene varios
errores en la seguridad. Las VAX ademas tienen unos de los mejores archivos
de ayuda de entre los demas sistemas, para acceder a esta ayuda solo escribe
HELP en el prompt. Las cuentas defaults comunes son: [ usuario: password
[,password] ]

Login Password
~~~~~ ~~~~~~~~
decnet decnet
demo demo
field field
field service
guest guest
operator operator
sysmaint digital
sysmaint service
sysmaint sysmaint
system manager
system operator
system syslib
system system
systest uetp

UNIX
~~~~
Las cuentas defaults comunes son:

Login Password
~~~~~ ~~~~~~~~
adm adm
adm admin
admin adm
admin admin
bin bin
daemon daemon
decnet ddennet
decnet nonpriv
default user
demo demo
field digital
field service
field test
games games
games player
guest friend
guest guest
guest welcome
host host
learn learn
netnonpriv nonpriv
nuucp nuucp
postmaster mail
rje rje
root root
root sysop
root system
sys sys
sys system
sysop sysop
sysman sys
sysman sysman
sysman system
sysadmin adm
sysadmin admin
sysadmin sys
sysadmin sysadmin
sysadmin system
sysbin sysbin
sysmaint digital
sysmaint service
system manager
system operator
system syslib
system uetp
systest_clig systest
test test
tty tty
unix test
unix unix
userp user
uucp uucp
uuhost uuhost
who who

PRIME
~~~~~
Esta computadora opera con el sistema operativo Primos. Son faciles de
detectar ya que reciben a uno con el mensaje "Primecon xx.xx.xx" o algo
parecido dependiendo de la version que te encuentres. Usualmente no ofrecen
ningún prompt asi que debes escribir "login <usuario>". Si la version es
anterior a la 18.00.00 puedes presionar un monton de caracteres de escape o
CTRL-C y entraras. Este sistema ofrece la capacidad de conectarte a los NUAS
de todo el mundo con el comando NETLINK...sintax: nc <nua>

Las cuentas defaults comunes son:

Login Password
~~~~~ ~~~~~~~~
guest guest
guest prime
guest1 guest
netlink netlin
prime prime
prime primos
primos prime
primos primos
primos_cs prime
primos_cs primos
primenet primenet
system prime
system primos
system system
test test
test prime
test primos

DEC-10
~~~~~~
Este es el equipo de computo más nuevo que existe dentro de la linea de DEC'
s.Operan el sistema operativo TOPS-10. Este tipo de maquinas se reconocen por
el prompt "." Las series DEC-10/20 son amables con los hackers permitiendo
varios intentos en el login prompt sin guardar un log de los intentos
fallados. Las cuentas están en forma [xxx,yyy].

Lo mejor de este sistema es la posibilidad de obtener informacion sobre las
personas en linea antes de entrar a el usando el comando systat.

Si ves una cuenta que lea [234,1001] BOB JONES, seria inteligente probar como
password BOB, JONES, BOBBY, etc. Para entrar al sistema se usa el comando:
login xxx,yyy [enter] password: Este sistema como antes habia dicho, permite
intentos sin limite y ademas te avisa si el login que est s usando existe.

Las cuentas defaults comunes son:

Login Password
~~~~~ ~~~~~~~~
1,2 manager
1,2 operator
1,2 syslib
2,7 maintain
5,30 games

IRIS
~~~~
Iris significa (interactive real time information system). Originalmente
corria en PDP-11's, pero ahora corre en otras minis. Para identificar uno de
estos sistemas busca el texto "Welcome to `IRIS' R9.1.4 Timesharing" y el
prompt ACCOUNT ID? (algunas veces es cambiado). IRIS no tiene limites a la
hora de hackear una cuenta y no guarda un log de los intentos fallados.

Login
~~~~~
accounting
boss
demo
manager
pdp8
pdp11
software

VM/CMS
~~~~~~
Este sistema es ejecutado en las super computadoras de IBM (International
Business Machines) llamadas mainframes. Una vez conectado a una de estas
computadoras te mostrara un mensaje asi "VM/370 ONLINE", y te dare un prompt
"." justo como la TOPS-10 lo hace. Para entrar debes ejecutar: LOGON <usuario>
Las cuentas defaults comunes son:

Login Password
~~~~~ ~~~~~~~~
autolog1 autolog
autolog1 autolog1
cms cms
cmsbatch cms
cmsbatch cmsbatch
erep erep
maint maint
maint maintain
operatns operatns
operatns operator
operator operator
rscs rscs
smart smart
sna sna
vmtest vmtest
vmutil vmutil
vtam vtam

NOS
~~~
NOS significa Networking Operating System y corre en la Cyber computadora
hecha por Control Data Corp. A este sistema lo puedes identificar facilmente
por la bienvenida "WELCOME TO THE NOS SOFTWARE SYSTEM...".
El primer prompt que recibir sera FAMILY: (presiona enter) depues llegar
a otro prompt USER NAME: donde cada uno es de 7 digitos alfanumericos y son
dependientes del sistema por lo que no son palabras o frases conocidas.

DECSERVER
~~~~~~~~~
Las DECs son una serie de computadoras conectadas entre si para formar una
sola unidad de procesamiento, la funcionalidad de estos sistemas es altamente
utilizado por los hackers para quebrar passwords de cuentas unix por la
rapidez del sistema. El prompt usualmente sera: "Enter Username>"
aunque yo he visto otros prompts en estos sistemas. El nombre de usuario
puede ser cualquier cosa, lo mejor ser presionar algo nada sospechoso como
`c' o algun numero.

De ah¡ te presentar con el prompt `local>'. De ahi debes ejecutar `c
<sistema>' para conectarte. Para obtener una lista de sistemas conectados
ejecuta `sh' `services' o `sh nodes'. En algunos sistemas DEC'S existen
comandos como MODEM o DIAL que permiten hacer uso de un modem para llamadas
externas que te permitir n marcar a BBS internacionales a expensas de la
compa¤ia que opera el DEC.

3. SiSTeMaS De FiCHeRoS

El sistema de ficheros de UNIX/LINUX tiene una estructura de arbol. Un arbol
esta constituido por directorios, que contiene a su vez subdirectorios, etc.
Todo parte de un directorio raiz.

En UNIX, todo esta representado mediante directorios o ficheros, como por
ejemplo las unidades, el CD-ROM etc..
Cada fichero contiene un nombre, es propiedad de un usuario, tiene unos
permisos etc.
Toda esta informacion esta almacenada en los inodo, los inodos guardan todo
lo asociado con el fichero excepto su nombre, los nombres son guardados en
sus directorios y son asociados con los inodos mediante punteros.

Los inodos no poseen nombre. En su defecto se distinguen por un numero o
indice, que indica su posicion en la tabla de inodos. Los inodos son las
entradas de una tabla de localizacion de ficheros, parecido a al FAT de dos,
pero en formato etx2.

Cada inodo contiene lo siguiente:

. La ubicacion del contenido del objeto referenciado al disco.
. El tipo de objeto (ficheros, directorios, enlace simbolico, etc).
. El tama¤o del objeto en bytes.
. La fecha en la que el inodo fue modificado por ultima vez.
. La fecha en la que el Objeto fue accedido por ultima vez.
. El Propietario del Objeto.
. El grupo propietario del Objeto.
. Los permisos del Objeto.

En UNIX / Linux varios ficheros pueden estar referenciados al mismo inodo ,
a esto de le llama link o enlace.

Cada directorio tiene como mínimo dos entradas. El punto (.), que referencia
el propio directorio y los dos puntos (..), que apuntan al directorio padre (
al que esta mas cerca del directorio raiz).

3.1 PeRMiSoS eN FiCHeRoS

Los permisos pueden ser:

r Permiso de lectura.
w Permiso de escritura.
x Permiso de Ejecución.
s Suid o Sgid.
t Stlicky bit.

LOS PERMISOS PUEDEN SER:

Para el propietario (owner).
Para el grupo (group).
Para todos los demas (other).
Para ver los permisos de un fichero basta con la orden ls -l.
Para cambiar los permisos de los ficheros o directorios se utiliza la orden

chmod , su sintaxis es:
chmod [-Rfh] [agou] [+-=] [rwxst] nombre

Donde:

-R Algunas versiones no soportan esta opcion, con -R estamos diciendo que
queremos cambiar los permisos recursivamente esto quiere decir que si
cambiamos los permisos de un directorio con esta opcion se cambiaran
los permisos de todos los archivos y subdirectorios del directorio.

-f Si sucede algun error con esta opcion no sera mostrado.

-h Se utiliza para los links con esta opcion se cambian los permisos
del link pero no el del fichero al que apunta el link.

Y donde:

a Modifica para todos los usuarios el privilegio especificado.
g Modifica los privilegios para el grupo.
o Modifica los privilegios para los demás usuarios.
u Modifica los privilegios para el propietario.

Y donde:

+ A¤ade un privilegio.

Quita un privilegio.

= Quita todos los privilegios.....

Y donde:

r Permiso de lectura.
w Permiso de escritura.
x Permiso de ejecución.
s SUID o SGID.
t Sticky bit.

Ejemplos:

ls -lfiche1

-rwx-r-r- pedro usuarios 505 FEB 9 13:19 fiche1

Donde el primer carácter puede ser:

- Fichero normal.
d Directorio.
c Dispositivo (tty o impresora etc..)
b Dispositivos como el CD-ROM etc..
l Link simbolico.

Etc...

Despues del primer caracter los tres siguientes son permisos para el
propietarios luego los tres que le siguen pal grupo y los otros para los
demas usuarios si aparece el caracter - en el campo de alguno de estos
significa que no existe dicho permisos.

En el ejemplo de fiche1 tiene permiso de lectura, escritura, ejecucion para
el propietario. Lectura para el grupo y lectura para todos los demas, y
donde pedro es el propietario del fichero y usuarios es el nombre del grupo
al cual pertenece el fichero.

Para añadir permisos de escritura al grupo:

Chmod g+w fiche1

Hacemos un ls -l fiche1

-rwx-rw-r-

Otro ejemp:

ls -l fiche2

-r-r-r-

chmod a+w fiche2

ls -l

-rw-rw-rw-

Otro ejemplo:

ls -l fich3

-rwxrwxrwx

chmod go= fiche3

Esto quita todos los permisos para el grupo y para los demas usuarios:

ls -l fiche3

-rwx------

Hay una manera numerica de poner permisos:

Chmod [-Rfh] modo fichero

Donde:

El modo es:

A chmod se le pueden especificar los permisos con un numero octal de 4
digitos, los numeros son:

Numero Octal Permiso

4000 Permisos de SUID.
2000 Permisos de SGID.
1000 "Sticky bit"
0400 Permiso de Lectura para el usuario.
0200 Permiso de Escritura para el usuario.
0100 Permiso de Ejecucion para el usuario.
0040 Permiso de Lectura para el grupo.
0020 Permiso de Escritura para el grupo.
0010 Permiso de Ejecucion para el grupo.
0004 Permiso de Lectura para todos.
0002 Permiso de Escritura para todos.
0001 Permiso de Ejecucion para todos.

La manera de calcular los permisos es ir sumandolos por ejemplo para poner
permiso de Lectura, Escritura, Ejecucion para el usuario del fichero.
Lectura y Ejecucion para el grupo..
Y ningún permiso para los demas. Se haria de la siguiente manera:

chmod 0750 fichero

Ya que:

0400 Lectura pal usuario.
+
0200 Escritura pal usuario.
+
0100 Ejecucion pal usuario.
+
0040 Ejecucion para el grupo.
+
0010 Ejecucion para el grupo.
---------
0750

Si hicieramos un ls -l fichero veriamos:

-rwxr-w---

Permisos a directorios:

Los permisos para los directorios son los mismos que para los ficheros de
Lectura, Escritura, Ejecución pero tienen un significado algo distinto.

Para un directorio el permiso de lectura indica que se pueden ver los nombres
de los archivos del directorio, si se los quitas y hacer un ls no veras nada.
Para ver los permisos de los directorios ejecuta ls -lF.

Los permiso se cambian de la misma manera que los ficheros.

Si no hay permisos de ejecucion no se podrá entrar en dicho directorio.

Permiso sobre ficheros y directorios habituales:

Número Octal Nombre Permiso

755 /bin/ls Todo el mundo puede copiar y ejecutar este programa.

0700 $HOME Nadie ha de poder entrar en
tu directorio home (excepto el root :)).

0600 /usr/mail/$USER Nadie debería poder escribir ni leer tu mail :).

3.2 La oRDeN uMask:

Cuando creamos un archivo o directorio este se crea con unos permisos
predeterminados, se puede cambiar el modo predeterminado para un directorio,
esto significara que todo lo que se cree dentro de este directorio lo hara
con los permisos que nosotros hemos predeterminado, la orden umask utiliza el
sistema de números para predeterminar permisos.

El valor que nosotros queramos predeterminar lo hemos de restar de 777, por
ejemplo queremos que para el directorio /root los valores predeterminados
sean, Lectura, Escritura, para el usuario. Pues lo que debemos hacer es
restar 177 de 777 y nos quedará 600 que es el valor que queremos.

Ejemplo:

umask 177 /root

Que es esto del Sticky bit ?

Cuando un ejecutable tiene este bit activado (Sticky bit) aparece con una t
situada al final del campo de permisos. Al activar este bit estamos indicando
al sistema que queremos que el programa permanezca en memoria al terminar su
ejecucion, seria parecido a los programas residentes del Dos.

Si se usa sobre un directorio este bit tiene un significado diferente, por
ejemplo:

chmod 1777 /tmp

Todo el mundo podra escribir, pero nadie podrá borrar los archivos creadores
por los demas usuarios.

3.3 eL SuiD y eL SGiD

El tener los permisos suid o sgid activados en algun programa puede resultar
bastante peligroso, muy peligroso :), ya que los exploits de buffer o Stack
Overflow se aprovechan de estos permisos, me explico:

Tener el permisos SUID activado en un programa significa que cuando un
usuario ejecute el programa lo hará como si lo hubiera ejecutado el
usuario del fichero o por el grupo si tiene el SGID activado.

Porque utilizar estos permisos ?

Hay programas que tienen que acceder a zonas donde solo tiene permiso el root
, un ejemplo es el programa passwd el cual sirve para cambiar el password de
un usuario, el propietarios de este programa es el root, si no tuviera
permisos de suid el programa no podria ( o no debería poder ) modificar el
fichero /etc/passwd ya que se hubiera ejecutado con la uid de usuario y por
tanto un usuario normal no puede modificar dicho fichero, para solucionar
esto se le dan permisos de suid, entonces el programa se ejecuta como si lo
hubiera hecho el root y puedes modificar tranquilamente el fichero.

SGID funciona igual que el SUID lo único que le programa se ejecutaria como
si lo hubiera hecho el grupo propietario de dicho programa.

EL peligro de estos permisos:

Si mientras el programa esta ejecucion pudieramos sobreescribir parte de la
pila, cambiar al direccion de retorno de alguna funcion etc... y
consiguieramos que este programa ejecutase codigo que no pertenece a este
programa, dicho codigo se ejecutaria con permisos del propietario del
programa que habitualmente es el root.

Para ver si un programa tiene activa el SUI o SGID basta con hacer un:

ls -l nombredelfichero

-rwsr-xr-x root root ....

La s significa que el programa tiene activado los permisos de suid, ya que s
esta en le campo del propietario, Asi que el programa tiene permisos de suid
el propietarios es el root y el grupo propietario del programa es el grupo
root. Dicho programa puede ser ejecutado por cualquiera y cuando se ejecute
lo hara con permisos de root.

NOTA: Para encontrar todos los archivos que tengan activado suid o el sgid :

find / (-perm -004000 -o perm -002000) -type f -print

Donde find empieza a buscar en el directorio raíz (/) y mira todos los
archivos que tienen modo 002000 (sgid) o modo 004000 (suid). Donde la opcion
-type f es para que solo busque ficheros normales y -printf para que lo que
encuentre lo saque por pantalla.

Si se esta usando NFS y solo se quieres buscar en el ordenador en el que
estas y que no mire en los archivos montados de otros ordenadores:

find / (-local -o -prune ) ( -perm -004000 -o -perm -002000 )
-typef -print

Se ha de tener cuidado a la hora de montar archivos remotos o el floppy o el
CD-ROM ya que en el caso de archivos remotos el usuario remoto simplemente
creando un suid programa en su ordenador y haciendolo correr en la maquina en
la que se montan estos archivos podria pillar permisos de root facilmente ,
por ejemplo el usuario copia en los archivos que se van a montar de un
ordenador en el que tiene permisos una shell con suid activado cuyo
propietario es root y lo ejecuta en el ordenador donde se montan estos
ficheros...

Tb pasaria con el floppy , puedes grabar una shell con suid activado en un
floppy y luego montarlo en el ordenador y ejecutarlo.
Para que no ocurra todo esto no ocurra se ha de impedir que se monten con el
suid y sgid o que el sistema pase de todo estos permisos cuando proviene de un
disquete, archivo remoto y tal..

En los archivos remotos (NSF) se ha de configurar el ficheros /etc/exports
con las restricciones:

nodev
nosuid

Y si se quiere tb

noexec

La opcion nodev hace que el sistema ignore los archivos montados,
Si tiene el suid activado lo ignora.

En el caso de disquetes y tal:

Para unidades, archivos, flopyes etc, que se han de montar el fichero de
configuracion es el /etc/fstab se pueden usar :

nodev
nosuid

3.4 La VaRiaBLe PaTH

En la variable PATH se indican los directorios donde deberan buscarse los
programas que se ejecuten, produciendose la busqueda en el orden en que
aparece en la variable. Si la variable PATH se asigna de la forma
PATH=.:/usr/bin:/usr/sbin primero se buscará en el directorio actual y luego
en el resto de los que aparecen en la variable. Esto puede ser peligroso,
por ejemplo:

Si alguien creamos en un directorio donde tengamos permisos de escritura un
fichero shell script llamado ls, si un usuario entra en ese directorio y
teclea ls al tener en la variable PATH los .: buscaria primero en ese
directorio el programa ls y ejecutaria nuestro shell script, este shell
script podía hacer cualquier cosa y luego llamar al verdadero ls (/bin/ls),
el usuario habria ejecutado un programa que no es el /bin/ls y no se habria
dado ni cuenta.

Par evitar esto, dicha variable debe de asignarse como:

PATH:/usr/bin/:/usr/sbin: es decir con los dos puntos al final en lugar del
principio, de esta forma se buscaría por último en el directorio actual.

NOTA: Existen unos comandos para ver tanto las variables locales como las de
entorno y sus valores asignados, estos comandos son:

env

Muestra por pantalla las variables de entorno y sus valores.

set

Muestra tanto las variables de entorno como las locales.

unset acompa¤ado del nombre de la variable asigna a esta un valor NUL
(nulo).

El comando env en realidad es un programa que se encuentra en /usr/bin/env,
mientras que set y unset son propios de la shell.

Algunas variables Importantes:

Variables Valor Descripcion

ENV $HOME/.profile Ejecuta el fichero indicado al arrancar el shell.

HOME /home/usuario Contiene la ruta del directorio principal
del usuario.

TERM vt100 Contiene el tipo de terminal utilizado en
la conexion.

TIMOUT 600 Determina el tiempo que debe de estar el
terminal inactivo para que finalice
automaticamente la conexion.

Importante: Se permite la reproducción de este documento siempre que se mencione la fuente, el autor y se incluya un hiperenlace hacia su ubicación original.

..sR. aDiKtO..

Muy bueno alex, esta de pm el doc