Comprobar si un usuario es root con Python

Python root

Cuando realizamos algún programa en Python a veces es necesario conocer si el usuario que lo ejecuta tiene privilegios de administrador o superusuario, también conocido como usuario root.

Con Python este asunto es una tarea bastante sencilla, simplemente debemos importar la biblioteca “os” (Operating System, del inglés Sistema Operativo) y llamar a la función geteuid() que nos devuelve el id del usuario efectivo (euid=efective user identification). Si esta función nos devuelve el valor de 0 entonces es el usuario root.

Si guardamos el siguiente código (por ejemplo con el nombre check_root.py) y le damos permisos de ejecución, podremos comprobar fácilmente esta tarea:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Comprobar si el usuario es root
"""

import os
import sys

if os.geteuid() != 0:
    print 'Debes tener privilegios root para este script.'
    sys.exit(1)
else:
    print 'Bienvenido usuario root'

Para darle permisos de ejecución a nuestro script check_root.py:

$ sudo chmod +x check_root.py

Fundamentos de la lógica difusa (fuzzy logic)

La lógica difusa o borrosa, también conocida como lógica fuzzy, es una lógica que nos permite procesar datos inciertos. Al contrario que la lógica booleana que sigue el principio bivalente o binario en el que la lógica solo permite dos estados posibles (verdadero y falso), la lógica difusa consigue tener infinitas degradaciones entre el valor verdadero y falso. Por tanto, deberíamos hablar de lógicas difusas en plural, ya que estas son esencialmente lógicas multivaluadas (admiten varios valores de verdad) que extienden a las lógicas clásicas.

Esta peculiaridad hace que en un instante dado, no sea posible precisar el valor de una variable X, sino tan solo conocer el grado de pertenencia a cada uno de los conjuntos en los que ha participado del rango de variación de la variable.

Por ejemplo, si intentamos calificar el color del cielo, podemos tomar el valor de “el cielo es azul“, pero al intentar graduar las distintas tonalidades de azul vemos la necesidad de aplicar varios valores de tonalidades como “muy azul” o “poco azul” De igual modo podemos hacer otro símil con la velocidad con la que se mueve un vehículo aunque este no implique cuantificar la velocidad de un vehículo con toda precisión.

En estos casos el adjetivo difuso adquiere una gran aplicación a estas lógicas donde los valores de verdad no-deterministas, por lo general, tienen una gran connotación de incertidumbre. Ahora bien, los valores de verdad asumidos por enunciados aunque no son deterministas, no necesariamente son desconocidos.

De este modo, la lógica difusa tiene una mayor aplicación a los hechos del mundo en que vivimos ya que el razonamiento humano, tiende a producirse de esta forma, obteniendo conclusiones a partir de múltiples hechos que observa en su entorno.

Por ejemplo en un sistema refrigerador una orden de lógica difusa sería:

Si la temperatura esta alta y creciendo ENTONCES debe aumentarse bastante el agua enfriante.

Se ha considerado de manera general que la lógica difusa se inició en 1965, en la Universidad de California en Berkeley por Lotfi A. Zadeh [1].

Nociones básicas de lógica difusa

La lógica difusa se basa en conjuntos para hacer operaciones usuales, dichos conjuntos son los llamados conjuntos difusos.

En un conjunto encontramos una colección de objetos en el que es posible decidir cuando un objeto de nuestro universo de discurso esta o no en esa colección. Es decir, abtrayendonos podemos asumir que un conjunto es exactamente una función en el que se asocia al conjunto de valores 0,1 el valor 1 a los objetos que estén dentro del conjunto y 0 a los que no.

En un conjunto difuso, también observamos una función que asocia a cada objeto del universo un valor, pero esta vez comprendido entre el intervalo [0,1] según el grado de pertenencia del objeto al conjunto difuso.

Por lo tanto todo conjunto en el sentido usual es también un conjunto difuso. Los conjuntos usuales (en ingles crips sets, en similitud por conjunto enrevesado) son un tipo de conjuntos en los cuales los elementos pertenecen a un subconjunto, en cierto grado. Por ejemplo una velocidad podría ser lenta con 0.75 y 0.25 media.

Las principales operaciones realizadas son:

Fuzzyficación (Fuzzyfication): Traducción de los valores del mundo real a valores difusos.

Evaluación de reglas (Rule Evaluation): Determinación de la fuerza de las reglas basado en los valores de entrada y las reglas.

Defuzzyficación (Defuzzyfication): Traducir de vuelta los resultados difusos a valores del mundo real.

Por otro lado el concepto de difusifividad, es la incertidumbre determinística que esta relacionada con el grado en el cual los eventos ocurren sin importar la probabilidad de su ocurrencia. Por ejemplo el grado de juventud de una persona es un evento difuso sin importar que sea un elemento aleatorio

Salta a la vista la semejanza con la teoría de la probabilidad, aunque la lógica difusa y esta última teoría persiguen fines distintos.

Usos y aplicaciones de la lógica difusa

Principalmente la lógica difusa esta enfocada a la toma de decisiones cuando existen datos o conocimientos inciertos. Por otro lado, también es usada en el reconocimiento de patrones ambiguos o como un componente de sistemas expertos difusos.

Los sistemas expertos difusos se usan para el control y modelado de sistemas lineales y no lineales, el diagnóstico y aislamiento de fallas en sistemas de tiempo real y análisis de datos fuera de línea o cuando es necesario obtener una decisión completa..

Asimismo la lógica difusa actualmente es ampliamente utilizada en los componentes electrónicos donde se encuentran bastantes aplicaciones para la vida real y donde se reemplaza al operador humano por un sistema difuso basado en reglas. Ejemplos: lavadoras, hornos microondas, procesadores de arroz, limpiadores al vacío, cámaras de vídeo, televisores, sistemas térmicos, traductores, etc.

Desventajas de los sistemas expertos difusos

Actualmente no se ha desarrollado un análisis matemático riguroso que posibilite y garantice que el uso de un sistema experto difuso pueda controlar un sistema y se obtenga como resultado un sistema estable.

Por otro lado, es difícil definir una función difusa y una regla confiable sin la participación y modificaciones previas de un experto humano.

Casos reales de sistemas difusos

Sistema Metro de Sendai

Fue propuesto en 1978 y consiguió el permiso para operar en 1986 después de 300,000 simulaciones y 3,000 viajes en vacío.

Algunos de sus logros fueron la mejora de la posición de paro en 3x, reducir el ajuste de potencia en 2x y la potencia total reducida en un 10%. Hitachi ganó el concurso para el Metro de Tokyo en 1991.

Aire acondicionado

Inicio del diseño en abril de 1988 y simulación en verano de 1988. Producción en Octubre de 1989. Las principales mejoras fueron en tiempos de calentamiento y enfriamiento reducidos en 5x, la estabilidad de la temperatura incrementada en 2x, el ahorro en el consumo total de potencia del 24% y reducir el número de sensores.

Bibliografía y referencias

[1] Zadeh, L. Fuzzy logic, IEEE Computer, 1:83, 1988.

[2] Morillas Raya, A. (2006): Introducción al análisis de datos difusos.

Texto completo en PDF: http://www.eumed.net/libros/2006b/amr/

[3] Introducción a la lógica difusa y su relación con el control de procesos.

[4] Anwser Math: cálculos de lógica difusa.

[5] Universidad de las Américas-Puebla: Fundamentos de lógica difusa.

[6] LóGICA DIFUSA. ¿Una concepción infinitesimal de la verdad?

[7] HAACK, SUSAN, “Filosofía de las lógicas”, Capítulo 6 página 95 y ss., Ediciones Cátedra, Madrid, 1991.

[8] Kantrowitz, M. et al, FAQ: Fuzzy Logic and Fuzzy Expert Systems

[9] 1989 Life (Laboratory for Internacional Fuzzy Engineering)