You are on page 1of 24

COMANDOS FTP (File Transfer Protocol) segun RFC 959

Fuente: RFC 959 original :: castellano

ORDENES DE CONTROL DE ACCESO

USER (nombre de usuario)


El argumento es una cadena de caracteres que identifica al usuario. Esta
identificación es la que requiere el servidor para acceder a su sistema de
ficheros. Normalmente esta será la primera orden a transmitir una vez
establecida la conexión. El servidor puede requerir información adicional como
una contraseña o cuenta. Los servidores pueden permitir una nueva orden
USER durante la conexión para cambiar el control de acceso o la información de
la cuenta. Esto permite continuar una misma sesion con otra identidad.
PASS (contraseña)
El argumento es una cadena de caracteres contraseña del usuario. Esta orden
debe seguir inmediatamente a la orden USER y, completa la identificación del
usuario para el control de acceso
ACCT (account, cuenta)
El argumento es una cadena Telnet identificando la cuenta del usuario. Esta
orden no está necesariamente relacionada con la orden USER, ya que algunos
ordenadores pueden requerir una cuenta para acceder y otros sólo para cierto
tipo de acceso, como almacenar ficheros. En este último caso, la orden se
puede enviar en cualquier momento.
Hay códigos de respuesta para diferenciar automáticamente estos casos:
cuando se requiere información de la cuenta, la respuesta a una orden PASS
correcta es el código 332. Por Otra parte, si NO se requiere esta información, la
respuesta a una orden PASS correcta es 230
CWD (Cambio de directorio de trabajo)
Esta orden permite al usuario trabajar en un directorio o conjunto de datos
diferente
CDUP (Cambio al directorio padre)
Version simplificada de CWD, para subir de directorio.
SMNT (Montar directorio)
permite al usuario montar un sistema de ficheros diferente sin alterar la
información de entrada o de cuenta. Los parámetros de transferencia
permanecen sin cambios. El argumento es un nombre de ruta especificando un
directorio o alguna otra agrupación de ficheros dependiente del sistema
REIN (Reinicializar)
Termina una sesion de USER, descargando todos los datos del entrada/salida y
la información de cuenta, excepto que si hay alguna transferencia en proceso
permite que termine. Todos los parámetros se inician con sus valores por
defecto y la conexión de control se deja abierta. El estado alcanzado es idéntico
al que se tiene inmediatamente después de abrir la conexión de control.
QUIT (Salir)
Termina una sesión de USER y si no hay en proceso ninguna transferencia,
cierra la conexión de control. Si hay una transferencia de fichero en proceso, la
conexión permanecerá abierta hasta que el servidor envíe una respuesta con el
resultado de la transferencia y luego se cierra.

PARAMETROS DE TRANSFERENCIA (no usuales)


PORT (Puerto de datos)
especificación del ordenador-puerto, para el puerto que será usado en la
conexión de datos. Hay valores por defecto, y bajo circunstancias normales,
esta orden y su respuesta no son necesarias. Si se usa esta orden, el
argumento es la union de una dirección IP (32 bits) y un puerto TCP (16 bits).
PASV (Pasivo)
Solicita al servidor que escuche en un puerto de datos distinto del puerto por
defecto, y espere a recibir una conexión en lugar de iniciar una al recibir una
orden de transferencia. La respuesta a este comando incluye la dirección IP y el
puerto donde este servidor está esperando a recibir la conexión.
TYPE (tipo de representación)
Especifica un tipo de representación: A - ASCII E - EBCDIC I - Imagen L
-tamaño de byte-
STRU (Estructura de fichero)
Un único carácter Telnet especificando una estructura de fichero de las descritas
en la sección Representación de Datos y Almacenamiento: F - Fichero (sin
estructurar en registros) R - Estructurado en registros P - Estruturado en
páginas. La estructura por defecto es Fichero.
MODE (Modo de transferencia)
un único carácter Telnet especificando un modo de transferencia: S - Flujo B -
Bloque C - Comprimido

COMANDOS DE SERVICIO

RETR (Recuperar)
Hace que el server-DTP transfiera una copia del fichero especificado en el
nombre de ruta
STOR (Almacenar)
Hace que el servidor lea los datos transferidos por la conexión de datos y los
guarde en un fichero en el servidor. Si el fichero especificado en el nombre de
ruta existe en el servidor, su contenido se debe reemplazar con los datos
recibidos. Se crea un fichero nuevo en el servidor si el indicado no existía ya.
STOU (Almacenamiento Unico
Igual que STOR sólo que el fichero resultante se crea en el directorio actual con
un nombre único para ese directorio
APPE (Añadir)
Si el fichero especificado en el nombre de ruta existe, los datos se añaden a ese
fichero; si no, se crea un fichero nuevo en el servidor
ALLO (Solicitar espacio)
Reserva suficiente espacio de almacenamiento en el servidor para recibir el
nuevo fichero. A continueción de esta orden se deberá indicar una orden STOR
o APPE
REST (Recomenzar)
El argumento representa un marcador del servidor a partir del cual debe
recomenzar la transferencia. La orden no realiza la transferencia del fichero,
pero hace que el puntero de lectura o escritura del fichero se sitúe a
continuación del punto indicado. A continuación de esta orden se debe enviar la
orden de servicio FTP apropiada que hará que continúe la transferencia del
fichero
RNFR (Renombrar de)
indica el fichero que queremos cambiar de nombre en el servidor
RNTO (Renombrar a)
especifica el nuevo nombre para el fichero indicado mediante el comando RNFR.
Las dos órdenes seguidas hacen que el fichero cambie de nombre
ABOR (abortar)
pide al servidor que interrumpa la orden de servicio FTP previa y cualquier
transferencia de datos asociada. Hay dos posibles casos para el servidor al
recibir esta orden: (1) la orden de servicio FTP está ya terminada, o (2) aún
está en ejecución. En el primer caso, el servidor cierra la conexión de datos (si
está abierta) y devuelve una respuesta 226 indicando que la orden de
interrumpir se ha procesado correctamente. En el segundo caso, el servidor
interrumpe el servicio FTP en proceso y cierra la conexión de datos, devolviendo
una respuesta 426 para indicar que la solicitud de servicio terminó
anormalmente. Luego, el servidor envía una respuesta 226 para indicar que la
orden de interrumpir se ha procesado correctamente.
DELE (Borrar)
borra en el servidor el fichero indicado en el nombre de ruta
RMD (Borrar directorio)
borra en el servidor el directorio indicado
MKD
Borra el directorio del servidor especificado
PWD
Muestra el directorio de trabajo del servidor
LIST
envia una listado de los ficheros a través del proceso de transferencia de datos
pasivo. Si el nombre de ruta u otra agrupación de ficheros, el servidor debe
transferir una lista de los ficheros en el directorio indicado. Si el nombre de ruta
especifica un fichero, el servidor debería enviar información sobre el fichero. Si
no se indica argumento alguno, implica que se quiere listar el directorio de
trabajo actual o directorio por defecto
NLST (Listar nombres)
Envia listado de directorio desde el servidor. El nombre de ruta indica un
directorio u otra agrupación de ficheros específica del sistema; si no hay
argumento, se asume el directorio actual
SITE (Parametros del sistema)
Proporciona servicios específicos propios del sistema del servidor que son
fundamentales para transferir ficheros pero no lo suficientemente universales
como para ser incluídos como órdenes en el protocolo
SYST
devuelve el tipo de sistema operativo del servidor
STAT
el servidor devolverá información general del estado del proceso servidor FTP
HELP
el servidor envia información sobre la implementación del FTP
NOOP (No operacion)
No hace nada más que provocar que el servidor envíe una respuesta OK

Introducción al ftp

El protocolo ftp es el que utilizamos para descargar archivos de la red, o subirlos desde
nuestro ordenador.

Hoy en dia todos hemos descargado algun archivo usando las utilidades incorporadas
al propio navegador. Basta sustituir la url http:// ... por el protocolo correcto:
ftp:// .... Puedes incluso acceder a sitios de ftp no anónimo escribiendo en tu
navegador ftp://nombreusuario:contraseña@direccionftp.

En este manual, sin embargo, vamos a echar un vistazo a la forma de trabajar con ftp
en modo consola, con comandos de texto.
¿que para qué? pues para saber como funciona, claro. Y porque necesitaremos
probablemente este conocimiento si algun dia necesitamos 'ftpear' en serio.

¿que necesito?

Para esta primera toma de contacto con el ftp, usaremos lo que la mayoria tenemos a
mano: el programa ftp que viene incluido en las distribuciones de windows. Ya sabes.
Inicias una sesión DOS (inicio, programas, MS-DOS) y a teclear ...

primeros pasos

Para iniciar una sesión ftp necesitamos establecer una conexión con el ordenador
servidor, que es el que maneja el espacio donde estan los archivos que queremos
bajar (o a donde queremos subir los nuestros).
Esta conexión tendrá lugar a través del puerto 21 de nuestro ordenador. Tenemos dos
formas de iniciar la conexión:

a) escribimos en nuestra ventana de DOS ftp nombredelservidor, por ejemplo, por


que no, ftp ftp.microsoft.com.
Observa que no es que escribamos ftp dos veces, sino que los servidores dedicados a
transmisión de ficheros se suelen identificar con ftp.nombreservidor.extensión, al
igual que por ejemplo los que albergan paginas webs se identifican como
www.loquesea.com.

b) Entramos primero en el programa ftp escribiendo ftp y pulsando ENTER. El


prompt del sistema cambia a ftp >. A continuación escribimos: open
ftp.microsoft.com.

En cualquiera de los dos casos Sabremos que hemos conectado porque vemos un
mensaje de bienvenida. En el ejemplo anterior:

C:WINDOWS>ftp ftp.microsoft.com
Conectado a ftp.microsoft.com.
220 cpmsftftpa03 Microsoft FTP Service (Version 5.0).
Usuario (ftp.microsoft.com:(none)): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Contraseña:******
230-This is FTP.MICROSOFT.COM. Please see the
230-dirmap.txt for more information.
230 Anonymous user logged in.
ftp> _
Vamos a ver que es todo esto. Lo que esta escrito en negrita corresponde a lo que
hemos escrito nosotros. El resto es la respuesta del servidor:

Iniciamos la conexión escribiendo ftp ftp.microsoft.com. El servidor nos informa que


estamos conectados, y su nombre y versión. A continuación nos da el nombre de
usuario. Como aun no estamos identificados aparecemos como 'none'.
Tenemos que identificarnos para entrar, pero ¿como lo hacemos?. Afortunadamente
aun perviven las buenas viejas costumbres, y internet esta lleno de servidores
'publicos' que permiten la conexión de usuarios anonimos. Típicamente usaremos el
nombre de usuario anonymous y como contraseña es cortesía introducir nuestro email
(en este caso solo el identificativo, es decir lo que va antes de la @). Y no, no es
necesario usar tu email real. Pero no olvides que te conectas con tu IP, que se trata de
un servicio gratuito que hay que defender, y por tanto, procura no abusar.

Bien, ya hemos entrado. En este caso el servidor nos informa donde podemos
encontrar un archivo con instrucciones (los tipicos leeme o README), y de nuestro
nombre de usuario (anonymous)

¿que comandos podemos usar?

Para saber que comandos tenemos a nuestra disposición, simplemente escribimos help
o abreviado, la interrogación ?.
Esta es la respuesta a nuestra petición de ayuda:

ftp> ?
Los comandos se pueden abreviar. Comandos:

! delete literal prompt send


? debug ls put status
append dir mdelete pwd trace
ascii disconnect mdir quit type
bell get mget quote user
binary glob mkdir recv verbose
bye hash mls remotehelp
cd help mput rename
close lcd open rmdir
ftp>_

Ten en cuenta que estos son los comandos que en principio nos ofrece nuestro
programa. Dependiendo de los privilegios con los que hayamos entrado,
podremos hacer mas o menos cosas, es decir, tendremos mas o menos
comandos a nuestra disposición, pues es logico, no podemos hacer lo mismo en
un servidor público que, por ejemplo, en un servidor ftp de nuestra web. Y lo
normal es que el servidor disponga de otros comandos adicionales

listando directorios

El comando ls (LS) nos sirve para obtener un listado de los archivos del servidor, en
formato legible, con una serie de información accesoria.

La información que el servidor debe devolver al recibir un comando ls no está descrita


en el estandard RFC-959, por lo que pueden existir problemas en algunos casos
puntuales. Lo normal es que un servidor windows muestre una salida semejante a la
del comando dir, y un servidor unix, semejante al comando unix /bin/ls -l.

Sintaxis:

ls [Directorio_remoto] [Archivo_local]
Donde directorio remoto es aquel del que deseamos obtener el listado de archivos. Si
no se especifica, se usa el directorio actual. Archivo_local especifica un archivo donde
debe guardarse el resultado de la consulta. Si no se indica archivo local, se muestra en
pantalla.

Opciones principales

Listado extenso

Para obtener mas información usa el comando ls con el parámetro -l [directorio]

ls -l

Una salida típica te mostrará los permisos de acceso al fichero, número de links hacia
el mismo, usuario propietario, tamaño, ultima modificación y nombre

Archivos ocultos

Para mostrar tambien archivos ocultos (cuyo nombre empieza típicamente con un
punto) usa el parámetro -a

Mas opciones (flags)

Parámetro Acción
-a lista también archivos ocultos
-A lista archivos ocultos (excluyendo . y .. implicitos)
-d lista el nombre del actual directorio
-F muestra directorios con una '/' final
ejecutables con un '*'
-g muestra el propietario
-i muestra el numero inode de cada archivo
-l listado con detalles
-R lista subdirectorios y su contenido
-t muestra ordenado por fecha de modificación en lugar
de por nombre
-r orden inverso
-C ordena por columnas (solo nombre)

Comandos básicos

En la página anterior vimos los comandos para conectar con un servidor ftp (c:/ftp
ftp.nombredeservidor.* o bien desde dentro del programa, ftp> open
ftp.elservidor.*), y la necesidad de introducir nombre de usuario y contraseña;
también vimos como ver los comandos de ayuda disponibles en nuestro sistema (? o
bien help, pudiendo pedir ayuda sobre comandos específicos: ? comando, o help
comando)

Bien, ya estamos conectados, vamos a movernos por el servidor. En este caso,


ponemos como ejemplo el servidor ftp de un hosting de páginas web:

C:>ftp ftp.nexen.net
Conectado a sauterne.nexen.net.
220 ProFTPD 1.2.0pre10 Server (Sauterne) [sauterne.nexen.net]
Usuario (sauterne.nexen.net:(none)): minombre
331 Password required for minombre.
Contraseña:************
230 User minombre logged in.
ftp>

Lo primero que hacemos es ver donde estamos. Para eso usamos el comando pwd:

ftp> pwd
257 '/' is current directory.
ftp>

vemos que estamos en el directorio raiz (no es el verdadero directorio raiz de la


máquina remota, pero si desde nuestro punto de vista de usuarios)

A continuación, lo lógico es que queramos ver que tenemos a nuestro alrededor. Para
obtener la lista de archivos y directorios, usamos el comando ls:

utilidades
varios
xhtml
blank.html
canciones.js
entrada.html
entradanoframes.htm
estilo.css
estilo2.css
favicon.ico
nu43
innet
phpinfo.php
online.htm
preload.html
scriptind.js
cal
phorum-3.2.1
xml
extensions.php
404.html
226-Transfer complete.
226 Quotas off
ftp: 361 bytes received in 0.06Segundos 6.02KB/s.
ftp>

¿que ha pasado? hay tantos directorios y archivos que ocupan toda la pantalla. Ya
sabemos que aqui no hay scroll. Para ver todos los archivos y directorios
cómodamente, usamos la misma orden, con un modificador:

ls -C:
ftp> ls -C
200 PORT command successful.
150 Opening ASCII mode data connection for file list.
404.html favicon.ico preload.html
blank.html html scriptind.js
cal images servidor
cal.htm index.php smil
canciones innet trucos
canciones.js manualcss tutoriales
dump-mysql musica utilidades
entrada.html mysql varios
entradanoframes.htm nu43 xhtml
estilo.css online.htm xml
estilo2.css phorum-3.2.1
extensions.php phpinfo.php
226-Transfer complete.
226 Quotas off
ftp: 368 bytes received in 0.06Segundos 6.13KB/s.
ftp>

He ahi la lista completa de directorios y archivos. Estamos en disposición de bajar y


subir archivos. Pero antes de bajar nada, debemos tener en cuenta que no hemos
especificado en que directorio de nuestro disco duro deben almacenarse las descargas.
Por defecto, se almacenan en el directorio desde el que estemos trabajando (por
ejemplo, si hemos lanzado el ftp desde una sesión típica de DOS, estaremos en
c:/windows, y no nos interesa que las descargas se almacenen ahi).
Necesitamos cambiar el directorio de trabajo local, con el comando lcd:

ftp> lcd ..
Directorio local ahora C:.
ftp> lcd temp
Directorio local ahora C:temp.
ftp>

Vemos como con lcd.. (local change directory) subimos en el arbol de directorios de
nuestra máquina (de c:/windows a c:) y luego con lcd temp pasamos al directorio
c:temp.
Bueno, bajamos nuestro primer archivo con la orden get:

ftp> get favicon.ico


200 PORT command successful.
150 Opening ASCII mode data connection for favicon.ico (942 bytes).
226 Transfer complete.
ftp: 942 bytes received in 0.06Segundos 15.70KB/s.
ftp>

Acabamos de descargar de nuestro servidor el archivo favicon.ico. El programa nos


informa de la velocidad de descarga, tamaño del archivo y tiempo transcurrido (he
escogido un archivo enano). Tambien nos dice el modo en el que hemos realizado la
transferencia: ASCII. Hay dos modos de transferencia. De momento basta saber que
ASCII es apropiado para textos, datos, mientras que BINARY es el adecuado para
programas e imágenes. Para pasar de un modo a otro sencillamente tecleamos ascii,
o asc (pasamos a modo ascii) o binary, o bin, pasamos a modo binario. Por ejemplo:

ftp> binary
200 Type set to I.
ftp> asc
200 Type set to A.
ftp> bin
200 Type set to I.

Donde vemos que pasamos a modo binario (modo I) luego a ASCII (modo A) y
nuevamente a binario.
ftp> put README-faq
200 PORT command successful.
150 Opening ASCII mode data connection for README-faq.
226 Transfer complete.
ftp: 2339 bytes sent in 0.05Segundos 46.78KB/s.
ftp>

Ahora hemos subido al servidor (comando put) el archivo README-faq. comprobamos


que está:

ftp> ls -C
200 PORT command successful.
150 Opening ASCII mode data connection for file list.
404.html extensions.php phpinfo.php
README-faq favicon.ico preload.html
blank.html html scriptind.js
...

Y ahi lo tenemos.
Recordamos que comandos hemos visto:

• pwd para saber enque parte del servidor estamos


• ls para listar directorios y archivos del servidor. ls -C nos presenta la información en
una sola pantalla. ls -la ofrece los atributos de los archivos
• lcd para movernos entre directorios locales. cd (change directory) para movernos por el
servidor
• get para desgargar un archivo
• put para subir un archivo

Y terminamos estos primeros movimientos borrando un archivo:


ftp> delete README-faq
250 DELE command successful.

Como verás, el programa presume que sabemos lo que estamos haciendo, y no nos
pregunta confirmación. Asi que mas vale andar con cuidado !

CHMOD files, asignando permisos

Una de las dudas mas habituales cuando nos enfrentamos a la instalación de scripts
(perl, php) es la asignación de los permisos correspondientes. Las preguntas sobre
CHMOD suelen ser las mas habituales en todos los foros que se dedican a estos temas.
En este artículo abordaremos que son los permisos, para que sirven, y como
asignarlos.

Los script y los permisos

CHMOD ("Change mode") es un comando UNIX que permite cambiar los permisos de
acceso de un archivo. Cada archivo tiene nueve clases de acceso, que pueden ser
permitidas o denegadas. Se pueden aplicar diferentes permisos al dueño del fichero,
al grupo al que el fichero pertenece y al resto de usuarios. Cada una de estas tres
clases de usuarios (dueño, grupo, resto de usuarios) puede tener permisos de lectura,
escritura y ejecución

Al instalar cualquier archivo en una página web, podemos definir sus propiedades, para
determinar en que forma será accesible para los visitantes de la página.
Estas propiedades son lo que llamamos permisos y segun cuales asignemos a cada
archivo este será solo de lectura, de escritura o ejecutable, o cualquier combinación de
los tres.

Piensa por ejemplo en una página de html sencilla, respecto de la cual solo nos
interesa garantizar que todo el mundo pueda verla pero no modificarla; el archivo que
contiene esa página necesita unicamente permisos de lectura, pero no de ejecución ni
de escritura. Por contra, si se trata de un script, necesitará probablemente permisos de
lectura y de ejecución, etc.

La orden CHMOD

En este documento nos referimos a la asignación de permisos en servidores unix (unix,


linux, freebsd, todos ellos pertenecientes a la familia unix, y con diferencia los mas
difundidos en la red). La asignación de permisos se hace mediante el comando
CHMOD. Por eso, cuando al leer las instrucciones de instalación de cualquier aplicación
web te encuentres con la misteriosa frase "haz chmod 666 tal_archivo.htm" ten en
consideración que nos estan diciendo los permisos que ese archivo necesita.

Los servidores Windows tienen su propio sistema de permisos, en los que no vamos a
entrar aqui.

El concepto de usuario en UNIX

El sistema operativo UNIX esta diseñado para ser multiusuario. Por ello UNIX permite
tres niveles de acceso a los archivos, para tres categorias diferentes de usuarios:

owner (propietario) La persona que el sistema reconoce como dueño del archivo.

Group (grupo): Conjunto de usuarios con permisos similares. Muy usado en entornos
de trabajo, es de escasa aplicación en páginas web.

Other (otros): Cualquier otra persona.

Es un error asociar el concepto de usuario a una persona real. Se trata de una


abstracción, que se refiere no a personas sino a categorias. Por ejemplo, si nosotros
creamos un script, somos efectivamente sus autores y propietarios; pero ese script
esta destinado a la red. Nosotros, y el resto de personas, accederan al archivo no a
traves de nuestra maquina local sino por internet. Es frecuente en los servidores la
creación de usuarios genéricos (root, www, www-user etc). En definitiva no olvides que
cuando asignas permisos a un script, el owner puede ser cualquiera que visite la
página, lo cual será necesario si como es normal se trata de scripts que se administran
via web.

Tipos de permiso de acceso:


Read (lectura): Permiso para ver el archivo o directorio, sin hacer cambios.

Write (escritura): Permiso de escritura: puede escribir el archivo, y por tanto,


cambiarlo.

Execute (ejecución): El archivo o directorio puede ser ejecutado. Se usa para


directorios con scripts, formularios, etc ...

Y tratándose de directorios:

read listar los archivos de un directorio

write añadir nuevos archivos al directorio

execute acceder a los archivos del directorio

Como conozco los permisos de un archivo ?

Si tenemos acceso ftp al servidor, tecleamos el comando ls -l y vemos algo asi:

-rw-r--r-- 1 irvnet irvnet 1272 Sep 28 07:31 index.php


| // / | | | |
| | | | | | tamaño nombre del archivo
| | | | | |_ nombre grupo
| | | | |
| | | | |_ nombre usuario
| | | |
| | | |_ Permisos genericos
| | |
| | |_ Los siguientes tres digitos los permisos del Group
| |
| |___ los siguientes tres caracteres determinan los permisos del owner:
| r de real, lectura; w, write, escritura y x de
| execute, ejecución
|
|
|___ El primer carácter indica si nos encontramos ante un directorio o un
fichero: d significa directorio, - significa fichero,
l significa link

Advierte que tenemos TRES categorias de usuarios ("user," "group," y "other") y para
categoria pueden asignarse TRES tipos de permisos: "r," "w," y "x".

Fijando permisos

La orden chmod puede usarse con letras o numeros. La forma mas corriente es
expresar los permisos numericamente. Seguro que lo has visto por ahi, chmod 777 etc
...
Para comprender el significado tienes que tener en cuenta que convencionalmente 4
significa permiso de lectura. 2 permiso de escritura y 1 permiso de ejecución.
Sumando estos valores vemos que un archivo puede tener los siguientes permisos (por
cada tipo de usuario):
4= lectura
2= escritura
1= ejecución

6 (4+2)= lectura y escritura


5 (4+1)= lectura y ejecución
3 (2+1)= escritura y ejecución
7 (4+2+1)= lectura, escritura y ejecución

Todo ello para los tres tipos de usuario.

Asi, un chmod file 777 significa que owner, group y others tienen permiso de lectura,
escritura y ejecución. chmod 766 significa que el owner tiene permiso de lectura,
escritura y ejecución, y el group y others permiso de lectura y escritura. Chmod 744
significa que el owner tiene permisos de lectura, escritura y ejecución, y group y
others unicamente permisos de lectura.

Como ves, son tres digitos, de izquierda a derecha designan los permisos del owner,
group y others.

Vemos a continuación su equivalente en letras:

0 = --- = sin acceso


1 = --x = ejecución
2 = -w- = escritura
3 = -wx = escritura y ejecución
4 = r-- = lectura
5 = r-x = lectura y ejecución
6 = rw- = lectura y escritura
7 = rwx = lectura, escritura y ejecución

Asi, en el ejemplo de antes:

rw-r--r--

significa que el owner tiene permisos de lectura y escritura (rw-); el group permisos de
lectura unicamente (r--) y other, permiso de lectura (r--). ¿como seria el equivamente
numerico? sería chmod 644.

La sintaxis para usar chmod con texto:

chmod [ugo][+-][rwx] [nombre_archivo]

Donde [u=user, g=group y o=other]; [+/- activa o desactiva los atributos siguientes]
[r=read, w=write, x=execute]

Por ejemplo, chmod go+r index.php significa que asignamos permisos de lectura para
group y others en index.php

De esta forma solo cambiamos los atributos que especificamos, pero no alteramos
otros compatibles que pudieran estar asignados anteriormente) por ejemplo, no
modifica la atribucion anterior a group de un permiso de ejecución).

Si queremos fijar de nuevo todos los permisos, la sintaxis sería:


chmod go=r index.php donde asignamos a group y other permiso de lectura sobre
index.php y eliminamos cualquier otro permiso para ambos.

Ten encuenta asimismo que puedes usar comodines:

chmod 644 *.html etc ...

Calculando valores chmod

Chmod
Permission Owner Group Other

Read

Write

Execute

This free script provided by JavaScript Kit

caso práctico, phpnuke:

Este apartado se mantiene como simple ejemplo. Las ultimas versiones de php-nuke
NO precisan permisos de archivo especiales.

Si leemos el install de phpnuke (versiones antiguas anteriores a la 6.0), por ejemplo,


el de la versión 4.4, encontramos:

"... In order to use the File Manager, please be sure to chmod 666 ALL files and 777
ALL directories.
4) Also, to activate Headlines you "need" to chmod 777 the "cache" directory,
otherwise headlines won't work.
....
NOTE: If you want to edit config.php file from web browser remember to chmod 666
the file config.php or your changes will not be saved! If can't execute chmod just edit
the file by hand and re-upload it to your server".

Bueno, aqui nos están diciendo que si queremos utilizar el "administrador de archivos"
hay que asignar permisos 666 a todos los archivos, es decir, ya sabemos, permisos de
lectura y escritura para TODOS los usuarios (owner, group, other) y 777 a todos los
directorios (permiso para listar archivos, subir archivos, acceder archivos en el
directorio, a los tres grupos de usuarios).

Para activar las headlines chmod 777 el directorio cache: listar archivos, subir
archivos, acceder archivos en el directorio, a los tres grupos de usuarios.
Para modificar las preferencias de nuestra página via web (a traves de admin.php)
debemos asignar a config.php permiso 666, es decir, permisos de lectura y escritura.
De otra forma, si no tiene permisos de escritura, no se guardaran los cambios.

Materialmente, como se hace?

WS_FTP: click derecho sobre el archivo o directorio, y elegir "chmod" en el menu


emergente. O tambien, click derecho y elegir del menu "SITE", y en la barra que sale
escribir el comando UNIX, por ejemplo, "chmod 666 config.php".

CuteFTP: click derecho sobre el archivo o carpeta y elegir "Change file attributes" del
menu emergente. Para ver los permisos en la ventana, click derecho sobre la ventana
y elegir "Long listing".

Telnet: Conectados al servidor, simplemente tecleamos chmod 666 config.php

HTML-kit Selecciona el archivo en el worksplace; click en el botón secundario del


ratón y selecciona Set permissions. Obtendras una ventana donde podrás fijar el valor
CHMOD chequeando casillas con los permisos, o bien introduciendo directamente su
traducción numérica

COMANDOS FTP (File Transfer Protocol) segun RFC 959

Fuente: RFC 959 original :: castellano

ORDENES DE CONTROL DE ACCESO

USER (nombre de usuario)


El argumento es una cadena de caracteres que identifica al usuario. Esta
identificación es la que requiere el servidor para acceder a su sistema de
ficheros. Normalmente esta será la primera orden a transmitir una vez
establecida la conexión. El servidor puede requerir información adicional como
una contraseña o cuenta. Los servidores pueden permitir una nueva orden
USER durante la conexión para cambiar el control de acceso o la información de
la cuenta. Esto permite continuar una misma sesion con otra identidad.
PASS (contraseña)
El argumento es una cadena de caracteres contraseña del usuario. Esta orden
debe seguir inmediatamente a la orden USER y, completa la identificación del
usuario para el control de acceso
ACCT (account, cuenta)
El argumento es una cadena Telnet identificando la cuenta del usuario. Esta
orden no está necesariamente relacionada con la orden USER, ya que algunos
ordenadores pueden requerir una cuenta para acceder y otros sólo para cierto
tipo de acceso, como almacenar ficheros. En este último caso, la orden se
puede enviar en cualquier momento.
Hay códigos de respuesta para diferenciar automáticamente estos casos:
cuando se requiere información de la cuenta, la respuesta a una orden PASS
correcta es el código 332. Por Otra parte, si NO se requiere esta información, la
respuesta a una orden PASS correcta es 230
CWD (Cambio de directorio de trabajo)
Esta orden permite al usuario trabajar en un directorio o conjunto de datos
diferente
CDUP (Cambio al directorio padre)
Version simplificada de CWD, para subir de directorio.
SMNT (Montar directorio)
permite al usuario montar un sistema de ficheros diferente sin alterar la
información de entrada o de cuenta. Los parámetros de transferencia
permanecen sin cambios. El argumento es un nombre de ruta especificando un
directorio o alguna otra agrupación de ficheros dependiente del sistema
REIN (Reinicializar)
Termina una sesion de USER, descargando todos los datos del entrada/salida y
la información de cuenta, excepto que si hay alguna transferencia en proceso
permite que termine. Todos los parámetros se inician con sus valores por
defecto y la conexión de control se deja abierta. El estado alcanzado es idéntico
al que se tiene inmediatamente después de abrir la conexión de control.
QUIT (Salir)
Termina una sesión de USER y si no hay en proceso ninguna transferencia,
cierra la conexión de control. Si hay una transferencia de fichero en proceso, la
conexión permanecerá abierta hasta que el servidor envíe una respuesta con el
resultado de la transferencia y luego se cierra.

PARAMETROS DE TRANSFERENCIA (no usuales)

PORT (Puerto de datos)


especificación del ordenador-puerto, para el puerto que será usado en la
conexión de datos. Hay valores por defecto, y bajo circunstancias normales,
esta orden y su respuesta no son necesarias. Si se usa esta orden, el
argumento es la union de una dirección IP (32 bits) y un puerto TCP (16 bits).
PASV (Pasivo)
Solicita al servidor que escuche en un puerto de datos distinto del puerto por
defecto, y espere a recibir una conexión en lugar de iniciar una al recibir una
orden de transferencia. La respuesta a este comando incluye la dirección IP y el
puerto donde este servidor está esperando a recibir la conexión.
TYPE (tipo de representación)
Especifica un tipo de representación: A - ASCII E - EBCDIC I - Imagen L
-tamaño de byte-
STRU (Estructura de fichero)
Un único carácter Telnet especificando una estructura de fichero de las descritas
en la sección Representación de Datos y Almacenamiento: F - Fichero (sin
estructurar en registros) R - Estructurado en registros P - Estruturado en
páginas. La estructura por defecto es Fichero.
MODE (Modo de transferencia)
un único carácter Telnet especificando un modo de transferencia: S - Flujo B -
Bloque C - Comprimido

COMANDOS DE SERVICIO

RETR (Recuperar)
Hace que el server-DTP transfiera una copia del fichero especificado en el
nombre de ruta
STOR (Almacenar)
Hace que el servidor lea los datos transferidos por la conexión de datos y los
guarde en un fichero en el servidor. Si el fichero especificado en el nombre de
ruta existe en el servidor, su contenido se debe reemplazar con los datos
recibidos. Se crea un fichero nuevo en el servidor si el indicado no existía ya.
STOU (Almacenamiento Unico
Igual que STOR sólo que el fichero resultante se crea en el directorio actual con
un nombre único para ese directorio
APPE (Añadir)
Si el fichero especificado en el nombre de ruta existe, los datos se añaden a ese
fichero; si no, se crea un fichero nuevo en el servidor
ALLO (Solicitar espacio)
Reserva suficiente espacio de almacenamiento en el servidor para recibir el
nuevo fichero. A continueción de esta orden se deberá indicar una orden STOR
o APPE
REST (Recomenzar)
El argumento representa un marcador del servidor a partir del cual debe
recomenzar la transferencia. La orden no realiza la transferencia del fichero,
pero hace que el puntero de lectura o escritura del fichero se sitúe a
continuación del punto indicado. A continuación de esta orden se debe enviar la
orden de servicio FTP apropiada que hará que continúe la transferencia del
fichero
RNFR (Renombrar de)
indica el fichero que queremos cambiar de nombre en el servidor
RNTO (Renombrar a)
especifica el nuevo nombre para el fichero indicado mediante el comando RNFR.
Las dos órdenes seguidas hacen que el fichero cambie de nombre
ABOR (abortar)
pide al servidor que interrumpa la orden de servicio FTP previa y cualquier
transferencia de datos asociada. Hay dos posibles casos para el servidor al
recibir esta orden: (1) la orden de servicio FTP está ya terminada, o (2) aún
está en ejecución. En el primer caso, el servidor cierra la conexión de datos (si
está abierta) y devuelve una respuesta 226 indicando que la orden de
interrumpir se ha procesado correctamente. En el segundo caso, el servidor
interrumpe el servicio FTP en proceso y cierra la conexión de datos, devolviendo
una respuesta 426 para indicar que la solicitud de servicio terminó
anormalmente. Luego, el servidor envía una respuesta 226 para indicar que la
orden de interrumpir se ha procesado correctamente.
DELE (Borrar)
borra en el servidor el fichero indicado en el nombre de ruta
RMD (Borrar directorio)
borra en el servidor el directorio indicado
MKD
Borra el directorio del servidor especificado
PWD
Muestra el directorio de trabajo del servidor
LIST
envia una listado de los ficheros a través del proceso de transferencia de datos
pasivo. Si el nombre de ruta u otra agrupación de ficheros, el servidor debe
transferir una lista de los ficheros en el directorio indicado. Si el nombre de ruta
especifica un fichero, el servidor debería enviar información sobre el fichero. Si
no se indica argumento alguno, implica que se quiere listar el directorio de
trabajo actual o directorio por defecto
NLST (Listar nombres)
Envia listado de directorio desde el servidor. El nombre de ruta indica un
directorio u otra agrupación de ficheros específica del sistema; si no hay
argumento, se asume el directorio actual
SITE (Parametros del sistema)
Proporciona servicios específicos propios del sistema del servidor que son
fundamentales para transferir ficheros pero no lo suficientemente universales
como para ser incluídos como órdenes en el protocolo
SYST
devuelve el tipo de sistema operativo del servidor
STAT
el servidor devolverá información general del estado del proceso servidor FTP
HELP
el servidor envia información sobre la implementación del FTP
NOOP (No operacion)
No hace nada más que provocar que el servidor envíe una respuesta OK

PASSIVE MODE

Uno de los términos que se suelen oir cuando se habla de problemas con el ftp es el de
passive mode. Aqui vamos a ver de que se trata, y por que es la solución a muchos
problemas de conectividad

Como sabemos en toda transferencia ftp interviene un programa servidor y un


programa cliente. El programa servidor se ejecuta donde estan almacenados los
ficheros que se quieren bajar (o donde se almacenarán los que deseamos subir) y el
programa cliente es el programa ftp que usamos desde la maquina local, para subir o
bajar los ficheros.

En este proceso de comunicación entre cliente y servidor, el cliente puede actuar en


modo activo o en modo pasivo.

Una conexión ftp usa dos puertos, abre dos canales: Uno será el puerto de comandos,
command port o control port (normalmente puerto 21) por donde se transfieren las
órdenes. El otro es el puerto de datos (data port) que es por donde circulan los datos
que integran los ficheros (normalmente el puerto 20, pero puede ser cualquiera por
debajo del 1024)

modo activo

Cuando usamos ftp en modo activo (tambien considerado modo normal) se establecen
dos conexiones distintas. El primer lugar se establece una conexión para la transmisión
de comandos (desde cualquier puerto de nuestro ordenador inferior a 1024 hacia el
puerto 21 del server) y por esa misma conexion, mediante un comando PORT se indica
al server cual es el puerto (distinto) de nuestro ordenador que está a la escucha de los
datos.

Entonces, si bajamos algun archivo, es el servidor el que inicia la transmisión de datos,


desde su puerto 20 al puerto que le hemos indicado. Se llama modo activo porque la
transmisión de datos es iniciada como proceso distinto desde el servidor, hacia el
puerto que le hemos indicado.
modo pasivo

En modo pasivo es siempre el programa cliente el que inicia la conexion con el


servidor. Al abrir una conexión ftp se abre primero una conexión de control (desde un
puerto inferior a 1024 de la maquina local al puerto 21 del server). Al pasar a modo
pasivo (comando PASV), el cliente pide un puerto abierto al servidor (será otro puerto
inferior al 1024 del server) y recibida la contestacion, será el cliente el que establezca
la conexión de datos al server a traves de ese puerto.

A modo de resumen podemos decir que en modo pasivo las conexiones son siempre
abiertas por el pc cliente, mientras que en modo pasivo se abren por el que envia los
datos (el server si se trata de bajar archivos al pc local, el cliente si se trata de subir
archivos al server).

Y por qué supone un problema el modo activo ?

Como hemos visto, en el modo activo se abre una conexión para datos desde el server
a la maquina cliente, esto es, una conexión de fuera a dentro.

Entonces, si la maquina cliente está protegida por un firewall, este filtra o bloquea la
conexión entrante, al serle un proceso desconocido.

En modo pasivo es el cliente el que inicia ambas conexiones, de control y de datos, con
lo cual el firewall no tiene ninguna conexion entrante que filtrar

Pasive mode y la linea de comandos

Lamentablemente la utilidad de ftp que viene por defecto con windows 95/98 y que
puedes usar en línea de comandos, no dispone de modo pasivo.

Por ello si tienes problemas de conexion y sospechas que es por un firewall, deberás
buscar un programa cliente ftp que disponga de esta posibilidad (la inmensa mayoria).

Para terminar con el modo pasivo, parte de un log de conexión:

FTP > PASV


FTP < 227 Entering Passive Mode (222,222,222,22,196,39).
FTP > LIST

Como ves el server reacciona al comando PASV entrando en modo pasivo e indicando
una serie de numeros (entre parentesis la segunda linea). Los cuatro primeros bloques
de números se corresponden con la IP del servidor. Los dos números restantes son el
puerto que el server abre a la escucha para el canal de datos
El puerto esta indicado mediante dos numeros de 8 bits; traducido a número de 16 bits
obtenemos el numero "real"

Las respuestas del servidor

Las respuestas de un servidor ftp vienen identificadas por un código de tres números.
Este código está pensado para asegurar la sincronización entre peticiones y acciones
en el proceso de transferencia de ficheros y para garantizar que el proceso de usuario
siempre conoce el estado del servidor. Cada orden debe generar por lo menos una
respuesta, aunque puede haber más de una.

Una respuesta FTP consiste en un número de tres cifras seguidos de texto explicativo.
El número contiene suficiente información como para que el programa del usuario no
necesite examinar el texto, y puede o bien descartarlo o bien mostrarlo.El texto puede
depender del servidor y, por tanto, puede variar en cada código de respuesta.

Cada uno de los tres números de la respuesta tienen un significado especial. Se


pretende permitir un rango de respuestas desde muy simple a muy detallado. El
primer dígito denota si la respuesta es buena, mala o incompleta. Un proceso de
usuario poco sofisticado podrá determinar su próxima acción simplemente examinando
el primer dígito. Un proceso de usuario que quiera conocer aproximadamente el tipo de
error ocurrido (por ejemplo, error del sistema de ficheros o error de sintaxis) puede
examinar el segundo dígito, reservando el tercero para una mayor precisión en la
información

primer dígito, cinco opciones

1** Respuesta preliminar positiva. Se ha iniciado la acción requerida; se espera otra


respuesta del server antes de seguir con una nueva orden.

2** Respuesta de finalización positiva. La acción requerida se ha completado


satisfactoriamente. Se puede iniciar una nueva orden.

3** Respuesta intermedia positiva. La orden se ha aceptado, pero se está pendiente de


recibir más información para completarla. El usuario debería enviar otra orden
indicando esta información. Esta respuesta se utiliza en órdenes que deben ir en
secuencia.

4** Respuesta de finalización negativa transitoria. La orden no se ha aceptado y la acción


requerida no se ha llevado a cabo, pero la condición de error es temporal y se puede
solicitar la acción de nuevo.

5** Respuesta de finalización negativa permanente. La orden no se ha aceptado y la


acción requerida no ha tenido lugar.

Segundo dígito, seis opciones

*0* Sintaxis. Estas respuestas se refieren a errores de sintaxis, órdenes correctas


sintácticamente pero que no encajan en ninguna otra categoría, órdenes no
implementadas o superfluas.

*1* Información. Estas son respuestas a solicitudes de información como STATUS o


HELP.

*2* Conexiones. Respuestas referidas a las conexiones de control y de datos.


*3* Autenticación y cuenta. Respuestas para el proceso de entrada al sistema y
procedimientos de cuenta.

*4* Sin especificar aún.

*5* Sistema de ficheros. Estas respuestas indican el estado del sistema de ficheros en el
servidor según se realizan transferencias u otras acciones sobre el sistema de
ficheros.

Códigos de respuesta por número.

110
Respuesta al marcador de reinicio. En este caso, el texto debe ser: MARK yyyy =
mmmm Donde yyyy es el marcador del flujo de datos en el proceso de usuario y
mmmm es el equivalente en el servidor.
120
El servicio estará en funcionamiento en nnn minutos.
125
La conexión de datos ya está abierta; comenzando transferencia.
150
Conexion abierta.
200
OK (Orden correcta).
202
Orden no implementada, no necesaria en este sistema.
211
Estado del sistema o respuesta de ayuda del sistema.
212
Estado del directorio.
213
Estado del fichero.
214
Mensaje de ayuda. Sobre como usar el servidor o el significado de una orden
particular no estándar.
215
identificación del tipo de sistema.
220
Servicio preparado para nuevo usuario.
221
Cerrando la conexión de control. Desconectado si procede.
225
Conexión de datos abierta; no hay transferencia en proceso.
226
Cerrando la conexión de datos. La acción sobre fichero requerida ha sido correcta
(por ejemplo, una transferencia o interrupción).
227
Iniciando modo pasivo.
230
Usuario conectado, continúe.
250
La acción sobre fichero solicitado finalizó correctamente.
257
"path" creado.
331
Usuario OK, necesita contraseña.
332
Necesita nombre de cuenta.
350
La acción requiere más información. Pendiente
421
Servicio no disponible, cerrando la conexión de control. Esta puede ser la respuesta
a cualquier comando si el servidor sabe que debe finalizar.
425
No se puede abrir la conexión de datos.
426
Conexión cerrada; transferencia interrumpida.
450
Acción no realizada. Fichero no disponible (por ejemplo, fichero bloqueado).
451
Acción interrumpida. Error local.
452
Acción no realizada. Falta de espacio en el sistema de ficheros.
500
Error de sintaxis, comando no reconocido. Esto puede incluir errores como línea de
orden demasiado larga.
501
Error de sintaxis en parámetros o argumentos.
502
Orden no implementada.
503
Secuencia de órdenes incorrecta.
504
Parámetro incorrecto para esa orden.
530
No está conectado.
532
Necesita una cuenta para almacenar ficheros.
550
Acción no realizada, Fichero no disponible (por ejemplo, fichero no existe, no se
tiene acceso al mismo).
551
Acción interrumpida. Tipo de página desconocido.
552
Acción interrumpida. Se ha sobrepasado el espacio disponible de almacenamiento
(para el directorio actual).
553
Acción no realizada. Nombre de fichero no permitido.

FTP switches

La utilidad ftp de linea de comandos que traen los sistemas operativos de microsoft
permite una serie de switches o modificadores. Esta es su sintaxis completa:

Modificadores FTP. Sintaxis:


FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-A] [-w:windowsize] [host]

–v No mostrar las respuestas del servidor FTP


–n Suprime el diálogo de login al conectar.
–i Desactiva el prompt interactivo en transferencias multiples.
Activa el modo debug, mostrando todos los comandos pasados
–d
entre cliente y servidor.
–g impide el uso de caracteres comodin en los nombres de archivo
–s: especifica un archivo que contiene los comandos FTP a ejecutar.
[filename] Preferible a la redirección (<).
Uso de cualquier interfaz local cuando vincule una conexión de
–a
datos.
–A Log en el servidor FTP como anónimo
Sobrescribe el tamaño de 4096 del búfer de transferencia
–w:wsize
predeterminado.
El nombre o dirección IP del servidor FTP. Debe ir en último
Hostname
lugar.

FTP automático

Podemos hacer uso del switch -s y de un archivo bat para automatizar las tareas ftp
mas repetitivas. Vamos a ver un ejemplo muy sencillo. Supongamos que necesitamos
descargar frecuentemente de nuestro servidor un archivo (miarchivo.txt) y guardarlo
en c: Mis Documentos. Necesitaremos dos archivos:

1.- Archivo bat. Escribimos:

ftp -s:C:\batch\inst.txt ftp.server.com

Al ejecutar este archivo bat, automáticamente se lanza la utilidad ftp del sistema; el
switch -s indica que ejecute los comandos que encontrará en el fichero
C:\batch\inst.txt y que conecte con el servidor ftp ftp.server.com.

Este archivo lo guardamos con la extensión bat en un directorio que esté en el path de
windows.

2.- El archivo .txt será el que contenga las instrucciones o comandos FTP. En este
caso lo llamamos inst.txt, aunque puede tener cualquier nombre o extensión:

nombre_usuario
contraseña
lcd ..
lcd "Mis Documentos"
cd /www/main/include
pwd
ascii
get miarchivo.txt
quit
Las dos primeras lineas son nuestro nombre de usuario en el server ftp y nuestra
contraseña.

Las instrucciones lcd las usamos para especificar que la descarga de archivos será al
directorio local c:\mis documentos. Con cd /directorio/subdirectorio/ navegamos
al directorio del server donde queremos trabajar. Mediante ascii especificamos el
modo de transferencia, y con get ordenamos la descarga. Quit para cerrar la conexión.

Al ejecutar nuestro archivo bat, se abrirá una ventana DOS con este resultado:

C:\batch>ftp -s:C:\batch\inst.txt ftp.server.com


Conectado a ftp.server.com.
220 Welcome to server.com
User:
331 Password required for nombreusuario.

230 User nombreusuario logged in.


ftp>
ftp> lcd ..
Directorio local ahora C:\.
ftp> lcd c:\"mis documentos"
Directorio local ahora C:\Mis documentos.
ftp> cd /www/main/include
250 CWD command successful.
ftp> pwd
257 "/www/main/include" is current directory.
ftp> ascii
200 Type set to A.
ftp> get miarchivo.txt
200 PORT command successful.
150 Opening ASCII mode data connection for miarchivo.txt (2410343 bytes).
226 Transfer complete.
ftp: 2424638 bytes received in 89.31Segundos 27.15KB/s.
ftp> quit
221 Goodbye.

Este procedimiento tiene el inconveniente de que almacenamos la contraseña y


nombre de usuario en un archivo formato txt, accesible a todo el mundo (que tenga
acceso a nuestro PC).

Si necesitamos seguridad adicional, podemos complicar un poco mas nuestro archivo


bat, de forma que podamos prescindir del segundo fichero de texto que almacena los
comandos (y entre ellos la contraseña):

@ECHO OFF
:: Comprobar si hay contraseña
IF "%1"=="" GOTO Ayuda
:: crear un archivo temporal llamado script.ftp
:: el signo > y >> es para canalizar el texto.
> script.ftp ECHO nombreusuario
>>script.ftp ECHO %1
>>script.ftp ECHO lcd ..
>>script.ftp ECHO lcd c:\"mis documentos"
>>script.ftp ECHO cd /www/main/include
>>script.ftp ECHO pwd
>>script.ftp ECHO ascii
>>script.ftp ECHO get miarchivo.txt
>>script.ftp ECHO quit
:: Usamos el archivo recien creado:
FTP -s:script.ftp ftp.server.com
:: sobreescribimos el fichero temporal y lo borramos
TYPE NUL >script.ftp
DEL script.ftp
GOTO End

:Ayuda
ECHO Uso: %0 password

:End

Y la forma de uso sería abrir una sesion DOS y escribir en ella

You might also like