Puertos en linux

Josef Meile jmeile en hotmail.com
Jue Jul 21 12:32:45 CEST 2005


Hola Joe,

JoePC wrote:
> Y no hay forma de poder hacerlo, añadiendole en algun grupo o
> marcandolo en algun archivo?
Si, podrías hacer un pequeño programa en C que llame a tu script
python. Al binario generado por el compilador de C, le puedes
asignar un user set-id:

chown root binario
chmod go-rwx binario
chmod g+x binario
chmod u+rwx binario
chmod u+s binario

Sin embargo, cabe aclarar que es un poco arriesgado, pues si tu
script python puede ser modificado por alguien más, este podría
reemplazarlo por algo como "rm -Rf *". Por lo tanto, tienes dos
alternativas:

1) Cambiar el dueño del script a root y quitar los permisos para
    grupo y otros usuarios

2) Hacer que el programa en C haga todo lo referente al puerto 20.
    De esta forma, podrías llamar el programa en C desde python sin
    tener que cambiar los permisos del script y no se corre el
    riesgo de que alguien vea y/o cambie el programa en C, ya que
    es un binario protegido con permiso de sólo ejecución.

Yo se que el set-id no es posible asignarlo a archivos que no sean
binarios. Por eso es necesario la rutina en C, pues un script en
python es tan sólo un archivo de texto y el código de objecto de
python ".pyc" tampoco sirve con el set-id. Hay un programa que hace
que puedas también asignar set-id a scripts, pero no recuerdo su
nombre.

Creo que tu alternativa del grupo, también serviría sólo si el
usuario pertenece al mismo grupo que root (sys). Por lo tanto aquí
podrías crear un usuario que pertenezca al grupo sys, cambiar los
permisos del script en python por:

chown root:sys archivo_python
chmod og-rwx archivo_python
chmod g+x archivo_python

De nuevo, es riesgoso asignarle a un usuario el mismo grupo de
root. Yo creo que lo más viable es hacer que la rutina en C haga
todo lo referente al puerto y el script en python la llame.

Saludos,
Josef

> 
> El 20/07/05, David Villa<dvilla en gmx.net> escribió:
> 
>>Hola:
>>
>>El mar, 19-07-2005 a las 23:01 +0200, JoePC escribió:
>>
>>>Tengo un problema, estoy haciendo pruebas para implementar un servidor
>>>de smtp, pero en linux no me deja capturar el puerto 20 salvo que sea
>>>el root.
>>>¿como debo hacerlo?
>>
>>Pues así debe ser. Todos los puertos por debajo del 1024 están
>>reservados para aplicaciones bien conocidas y un usuario normal no puede
>>poner servidores ahí.
>>
>>Saludos
>>
>>
>>_______________________________________________
>>Python-es mailing list
>>Python-es en aditel.org
>>http://listas.aditel.org/listinfo/python-es
>>




Más información sobre la lista de distribución Python-es