Evitar superadministrador pueda eliminarse el mismo.

Events happening in the community are now at Drupal community events on www.drupal.org.
el1nic0's picture

Estoy trabajando en proyecto de tesis de un cliente. Hasta el momento todo va perfecto solo que ahora me piden como seguridad que evite que el usuario superadministrador (el 1ro que se crea al instalar drupal) eliminarse el mismo.

Si nos damos cuenta vamos a usuarios y lo editamos nos sale la opciones eliminar. Yo necesito quitar esa opción o por lo menos no dársela al administrador.

Espero que me puedan ayudar.
Mi correo personal es el1nic0@yahoo.es

Gracias de antemano.

Comments

a que los clientes jajaja

jackbravo's picture

oooooraes

no pues, por seguridad yo les diría que no le puedes dar acceso a esa cuenta a gente que se le puede ir el dedo y borrar la cuenta. Que barbaros jajaja que chistosos son los clientes.

Pues mira, si quisieras quitar ese botón, lo puedes hacer con un js que elimine el botón en esa forma, o usando un hook_form_alter (http://api.drupal.org/api/drupal/modules--system--system.api.php/functio...). Sabes usar los hooks de drupal? A que le hayas más a PHP o a js?

por CSS

martin gersbach's picture

Ese tipo de "tonterias" las resuelvo (el mejor metodo que conozco) ocultandolo por CSS y asi evito meter mano en el module o con un hook.
suertes,

Martin Gersbach
Directeur Technique
www.troisfourmis.com

Resolver estas cosas por CSS

carlescliment's picture

Resolver estas cosas por CSS no es una buena opción, ya que un usuario malintencionado bien puede cambiar el css con firebug o enviar un formulario hecho en casa.

  • Jamás daría el user 1 a un cliente. Para ello puedes crear un rol admin y dar los permisos que quieras.
  • Para operaciones de este tipo, lo que te recomiendo es que además de modificar el form para que desaparezca el botón, le añadas una función validate().

Javascript tampoco es

carlescliment's picture

Javascript tampoco es recomendable por las mismas razones.

la mejor opcion

martin gersbach's picture

resolverlo por CSS considero que es la mejor opcion (y la mas economica) para el problema reportado.
ps : un error comun en este tipo de misiones es, precisamente, saber leer lo que el cliente quiere.

Martin Gersbach
Directeur Technique
www.troisfourmis.com

estoy de acuerdo. CSS es lo

jackbravo's picture

estoy de acuerdo. CSS es lo más sencillo. Claro que por seguridad si el cliente mismo quisiera de todas formas borrar el usuario, o le diera la cuenta de root del sitio a alguien que puede hacer eso, pues ya no puedes hacer mucho más por él.

whitch theme

martin gersbach's picture

pues que cambie el theme a garland y encontrara el boton este ;)

Martin Gersbach
Directeur Technique
www.troisfourmis.com

mal formulado

martin gersbach's picture

Todo parte que el problema esta mal formulado por lo que la solucion es y sera consecuente.
es como impedir que root se borre a si mismo.
Aparte... si el superadmin esta tan encaprichado en borrar su cuenta pues puede hacerlo de muchas otras maneras.

Martin Gersbach
Directeur Technique
www.troisfourmis.com

Es posible que en este caso

carlescliment's picture

Es posible que en este caso CSS sea suficiente, no conozco las necesidades del cliente.

Lo cierto es que, por norma general, no es una buena práctica utilizar CSS o JS para ocultar campos de formularios si no hay una validación posterior de los datos.

no se cuan cierto

martin gersbach's picture

No se cuanto de cierto hay detras de una "buena o mala practica".
A mi ver diria que hay adecuadas o inadecuadas, economicas y caras.

En este caso concretamente el error parte del principio = "Esa persona no deberia ser user/1 y ya".
Que se cree un grupo pseudo-admin y que admin administre los permisos.
Asi es que Drupal esta diseñado.

Si un cliente que te tira una issue semejante es porque no comprende integralmente el sistema, por lo tanto yo no lo modificaria. Un cambio en el theme seria entonces un simple cambio de interfaz de usuario (ese que esta encaprichado en eliminar el user/1 ;)

Martin Gersbach
Directeur Technique
www.troisfourmis.com

Lo barato o caro en

carlescliment's picture

Lo barato o caro en cuestiones de seguridad es difícil de evaluar. En la web no es extraño recibir ataques de inyección de sql o cross site scripting. Obviar las medidas de seguridad más fundamentales (como validación de los datos de entrada de un usuario) por ahorrarse unos minutos de trabajo puede resultar muy caro a largo plazo. No soy experto en seguridad, pero creo que el mejor consejo que puede darse en cuanto a seguridad web es pensar en todo momento que el usuario va a intentar perjudicarte. Una vez adoptas los fundamentos y prácticas mínimas, aplicarlas en el día a día se convierte en algo automático.

Para no desvirtuar el hilo, creo que en este caso al menos se debería advertir al cliente de los riesgos en el caso de optar por la solución rápida. Si el cliente piensa que los riesgos son asumibles porque nunca un usuario malintencionado va a tener permisos de administración, adelante. Nos hemos cubierto las espaldas.

Pero deberíamos ser prudentes a la hora de aconsejar excepciones a la norma, y es por ello que quise dejar claros los riesgos de ocultar componentes de formularios.

Un saludo!

creo que te estas "haciendo

martin gersbach's picture

creo que te estas "haciendo la cabeza" con este tema.
lo que la issue pide es impedir que el user/1 se elimine y eso se puede hacer simplemente por CSS.

ahora, si queres enroscarte con la seguridad (y/o porque metiste un hook) pues recomendaria entonces refundar las bases de Drupal y/o sugerir al grupo de core o security que repiense el problema dado que lo que estamos haciendo es solo "un parche".

entonces... sigue siendo valida la opcion del CSS ya que no modifica en nada el sistema.

salut

Martin Gersbach
Directeur Technique
www.troisfourmis.com

Si es contra un ataque ex-profeso, esconderlo no te ayudará

gwolf's picture

En este hilo, pedían esconder la opción de eliminar al usuario ante la incompetencia de un cliente administrador — Soy también de la opinión que no tiene sentido, que más bien no debemos dar el usuario #1 a un cliente que no entiende lo que hace.

En el caso que mencionas, esconder la posibilidad de borrar al usuario #1 de un atacante malicioso... No va a servir de mucho. Puede dejarte fuera o causarte daños desde cambiando la contraseña, deshabilitando módulos, jugando con varias opciones de configuración, eliminando la información, etc.

Como sea: No es tan terrible que un usuario elimine al usuario #1. Claro, se va a meter un problema que no podrá resolver desde Web. Pero podrá llamar a su Experto Favorito, quien básicamente tendrá que decirle a la base de datos un "INSERT INTO users (uid, ...) VALUES (1, ...)" y darle un manazo para que aprenda a no tocar lo que no entiende ;-)

esto me da una idea... pasale

martin gersbach's picture

esto me da una idea...
pasale a tu cliente mi tarjeta !
cosa que me llame cuando todo se rompa
;)

Martin Gersbach
Directeur Technique
www.troisfourmis.com

Utiliza un hook

eduardo.flores's picture

Para hacer que no aparezca el botón de borrar lo más recomendable es hacer un Hook, ya que con CSS o JS puede seguir habiendo problemas si el usuario utiliza firebug o una aplicación similar.

Para evitar modificar el módulo directamente yo te recomendaría hacer uno personalizado especialmente para esto. Se debe sobreescribir la función user_profile_form, existen dos funciones que puedes utilizar para esto: hook_form_alter o hook_form_FORM_ID_alter. Y el módulo debería tener lo siguiente:

<?php
function mymodule_form_alter(&$form, $form_state, $form_id) {
if (
$form_id == 'user_profile_form') {
global
$user;
// Revisar el id del usuario
// El administrador tiene el UID=1
if ($user->uid == 1) {
// Remover el boton de borrar
unset($form['delete']);
}
}
}
?>

Espero te sirva esto.

No es una buena práctica usar

anieves's picture

No es una buena práctica usar unset() en los formularios así como así (te lo digo por experiencia)

Puedes evitar problemas usando

<?php
$form
['lo_que_quieres_ocultar']['#access'] = false;
?>

Recuerda que drupal se puede volver tonto cuando espera campos que después no llegan (aunque en este caso en concreto dudo que haya algún problema) pero aun así no soy partidario de meter unset() por la cantidad de ostias que me dado con los formularios X-D

También habría que analizar detenidamente que casos pero por norma general (bajo mi punto de vista y batallitas) es mejor meter un #access = false;

<?php
echo $signature
?>

Remover eliminar mediante función preprocess

luis_san's picture

Nico, mediante una función preprocess puedes capturar el contenido justo antes de ser enviado al cliente.
En tu caso puedes utilizar la función preprocess: template_preprocess_user_profile
Aqui tienes un listado de algunas de ellas con su explicación:
http://api.drupal.org/api/search/6/preprocess

Por otro lado no recomiendo remover esto por ningún medio desde el cliente (js, css)

Espero que te sirva.

saludos!

luis-san

good

luis_san's picture

Es mejor como dice edufk88.

:-)

insisto

martin gersbach's picture

Leyendo bien el pedido {que el user/1 no pueda eliminarse a si mismo} podemos sacar la siguiente conclusion :

Que el superadmin no esta capacitado para comprender lo que sucede y/o sus implicancias por lo que no deberia ponerse a su alcance dicha opcion. Lo que hace evidente que darle esa capacidad (el user/1) a este individuo es, literalmente, una falla de seguridad.
Es decir, solucionariamos solo el problema que el cliente vio y reporto.

Entonces... si esta persona es capaz de hacer semejante desastre es muy probable que pueda hacer muchisimos otros de gravedad similar, por lo que deberiamos crear una coleccion de hooks APB (a prueba de boludos ;).

A mi juicio yo no meteria hooks (mejor dicho : yo no gastaria mi tiempo) para impedir solo una de las cagadas que pueda hacer este user porque, de todos modos, podria hacer otras.

En cuanto a la solucion del hook, convengamos que es la mas "elegante", pero insuficiente.
Es como matar una mosca (de cientos) con un martillo.

salut

Martin Gersbach
Directeur Technique
www.troisfourmis.com

De acuerdo

eduardo.flores's picture

Concuerdo con que el problema principal que se debe corregir es saber quien debe tener el usuario administrador. Si debes pensar en quitar este botón o hacer algunos otros cambios para evitar problemas es porque el usuario administrador no conoce bien Drupal.

Pero yo creo que no es difícil usar el hook que puse anteriormente y funciona bien; si hay riesgos de seguridad (aunque sea por error de darle el ususario administrador a alguien no capacitado) se deben prevenir.

Pero si opino que este tipo de problemas de seguridad no deberían suceder.

ok por el hook

martin gersbach's picture

edufk88 = que el hook funcione correctamente ya no es mas la cuestion pues estamos de acuerdo que es correcta y elegante.
mi base para esta discusion es que si un cliente puede pedirte una cosa semejante, mañana te pedira que le impidas al user/1 desinstalar modulos, borrar nodes, etc.
por eso mejor no gastar calorias ni modificar el sistema porque un dia te encontraras que lo has modificado tanto que ya ni sabras como funciona.
y te lo digo por experiencia ;)

Martin Gersbach
Directeur Technique
www.troisfourmis.com

De acuerdo.

luis_san's picture

100% de acuerdo con Martín.

Ocultar el botón en el formulario no es suficiente.

jonhattan's picture

Me parece un asunto delirante... ni por error podría alguien borrar el usuario 1 por esta vía. En cualquier caso, ocultar el botón en el formulario no es suficiente. La url user/1/delete sigue funcionando. Claro, tampoco es de esperar que tal superadmin sea capaz de obtener esa url por sus propios medios.

Para bloquear la url user/1/delete se puede definir un elemento de menu (hook_menu) más o menos así:

<?php
$items
['user/1/delete'] = array(
 
'access callback' => FALSE,
);
?>

por supuesto que no lo he testeado XD.

Bien visto

carlescliment's picture

Bien visto, no había caído en esa ruta. Claro que otros te dirán que ese botón también se puede ocultar por CSS :P

Desde admin/user/user/list

carlescliment's picture

Desde admin/user/user/list también se puede borrar el user superadmin!

Edito: se me coló mi user superadmin :/

En la página de

oskar_calvo's picture

En la página de admin/user

Ves el listado de usuarios, incluido el root y la opción de borrar.

Resolver esto son 3 pasos.

Hook form alter para evitar que en el formulario haga nada.
Hook menu alter para evitar acceder a la ruta.
Hook form alter en el formulario que pinta el listado de usuarios en admin/user

Y si la web es de mi cliente, y me ha pagado por ella como le voy a negar el root en la documentación del producto.

O es que acaso te niegan poder abrir la tapa de la batería del coche porque contiene ácido?

Oskar

era evidente

martin gersbach's picture

Era evidente.
Si queres hacer cagadas tenes otros metodos (y sin contar que un superadmin tiene acceso a la SQL y al sistema).

Esto valida todos los conceptos que ya mencione anteriormente:

A. perdida de tiempo inutil (el cliente no te lo va a pagar)
B. Drupal esta diseñado tal como viene.
C. hay otros metodos para hacer cagadas en Drupal (y no solo borrarse a si mismo)
D. ese usuario no puede ser user/1

Por lo que la mejor solucion sigue siendo la de ocultarle el puto boton por CSS (suponiendo que borraria su cuenta por error, claro esta).

salud

Martin Gersbach
Directeur Technique
www.troisfourmis.com

A. perdida de tiempo inutil

oskar_calvo's picture

A. perdida de tiempo inutil (el cliente no te lo va a pagar)

Yo no trabajo gratis, y lo que pide pasa por caja

B. Drupal esta diseñado tal como viene.

Pero al ser un framework se puede personaizar, sino vaya mierda sería,no?

C. hay otros metodos para hacer cagadas en Drupal (y no solo borrarse a si mismo)

Eso nadie lo ha negado

D. ese usuario no puede ser user/1

En mi caso, yo entrego las llaves, si joden ya cobro yo por arreglar. Mis clientes están bien educados en ese aspecto :D

Oskar

ja

martin gersbach's picture

ya comienza a dar risa esta cadena...
y lo peor de todo es que el interesado esta esperando que le respondamos por mail !

mucho me temo que el error comienza por ahi :
un tio que escribe en el grupo para pedir ayuda basandose en un pedido semejante y que no consulta el grupo de drupal porque espera que le escribamos a su casilla pues...
creo que deberiamos comenzar por enviarle la factura (del amplio analisis que le hemos ofrecido) a el !
;)

oye oskar...
tu le avisarias al cliente que tambien el user/1 puede hacer otras cagadas graves como desinstalar modules y borrar sus tablas? que piensas que te diria cuando se entere?

bref, creo que ya hemos agotado este tema tan apasionante ;)

salutes

Martin Gersbach
Directeur Technique
www.troisfourmis.com

oye oskar...tu le avisarias

oskar_calvo's picture

oye oskar...
tu le avisarias al cliente que tambien el user/1 puede hacer otras cagadas graves como desinstalar modules y borrar sus tablas? que piensas que te diria cuando se entere?

En la naturaleza del cliente esta joderla, y nuestro trabajo es cobrar por arreglar las jodiendas.

:)

Oskar

Hombre, nuestro trabajo es

carlescliment's picture

Hombre, nuestro trabajo es arreglarlas, lo de cobrar es una consecuencia (y a veces una casualidad) ;)

milagro

martin gersbach's picture

o un milagro...
Precisamente ahora estoy comenzando una demanda (administrativa y penal) a un cliente y al cliente final por toda una cadena de supuestos dichos e incomprendidos.
Va a ser la primera vez que me apoye en los derechos patrimoniales (autor) para intimar el cese de uso y pago.

Bref, mi experiencia (y metodo) es no aceptar las issues tal como las postea el cliente sino reescritas, analizadas y validadas en conjunto, por lo que esta issue del boton diria que no hubiese existido o hubiese sido un buen tema de discusion.

No se uds. pero el proyecto mas chico que hago tiene no menos de 200 issues. Si a cada una le aplicamos la complejidad de esta pues se hace ingobernable el asunto.
Y no es menor el hecho de que estamos modificando el sistema ya que nos hariamos responsables de dichos cambios mientras que si usas Drupal y tal como viene te evitas responsabilidades.
y es el caso de este cliente del que les hablo... al cual le hemos hecho unos modules custom cien veces modificados.

psss, esto ya paso a ser una conversacion filosofica aunque no por ello menos seria e interesante.
Hace años que tengo la idea de crear un site/wiki con el fin de crear un metodo agil/comercial/latino para llevar amigablemente el desarrollo de un site.
No son pocas las veces que las cosas terminan a los tiros.

à bientôt

Martin Gersbach
Directeur Technique
www.troisfourmis.com

Consenso

carlescliment's picture

Mi experiencia en este mundillo va en camino contrario, y es que los costes pueden dispararse por pensar que "lo que quiere en realidad el cliente es..." sin consultarle. Esto ocurre porque tendemos a ponernos por encima de los clientes.

En mi opinión, lo mejor ante casos como este donde existen varias alternativas es consensuar con el cliente y dejarles claras las consecuencias y los costes de cada una de ellas. No sé si es eso lo que quieres decir con "validadas en conjunto". Es fundamental establecer una relación de confianza con él y esto significa información y colaboración. Actuando de espaldas a los clientes y reinterpretando sus necesidades podemos terminar con problemas como el que describes. No creo que sea buen camino.

¡Espero nunca terminar a tiros!

No sé si es eso lo que

martin gersbach's picture

No sé si es eso lo que quieres decir con "validadas en conjunto"

En nuestro grupo de desarrollo usamos un método agil hibrido (adaptado de XP y Crystal Clear) a nuestra estructura y misiones. Obviamente conservamos lo esencial y modificamos lo necesario.

En dos palabras : El cliente (owner) es parte del equipo y participa a las reuniones semanales de seguimiento de iteraciones.
Es ahi donde con el owner discutimos el alcance (objetivos, problemas, soluciones, etc.) de las issues.
A cada una les ponemos una estimacion en horas (o pomodoros) y asi vamos...

Mismo que ponemos nuestra mejor buena volutad y metodo no es raro encontrarse con un cliente que, presionado por su comercial, "se le pelan los cables".

En bref, esto ya es tema para otro post, con otro titulo.

tchuss,

Martin Gersbach
Directeur Technique
www.troisfourmis.com

Es un tema interesante pero

rodrigoaguilera's picture

Es un tema interesante pero creo que ya poco tiene que ver con "Evitar superadministrador pueda eliminarse el mismo." seria interesante abrir otro hilo

ya...

martin gersbach's picture

pos que nos hemos ido por la ramas ;)
pero resulta interesante tomar este caso del boton como ejemplo.

yo conservo todos los mails e issues en mi redmine y si me pusiese a narrarlas tendria como para aburrir a unos cuantos.
en fin...
el tema es interesante (gestion de proyectos) y daria hasta para hacer un congreso a parte entera.

salutes

Martin Gersbach
Directeur Technique
www.troisfourmis.com

Bueno viejo... yo me dedico a eso!!!

isaac.el.cec@gmail.com's picture

Hola de nuevo...

Bueno viejo... yo me dedico a eso!!! A las metodologías de Gestión de Proyectos (incluso con Drupal como herramienta de gestión de proyectos de ingeniería, por ejemplo ;-)...
Así es que si quieres montar un congreso del tema, cuanta con migo.

Saludos desde Barcelona
Jaime

(¿Ya en Argentina?)

Saludos
Isaac.el.Cec
- Temas DRUPAL: http://drupal6.propium.org
- Güep profesional: http://www.jramonet.org

cangrejo

martin gersbach's picture

Que pasa Jaume!
como va la cosa por ahi?

Del congreso que decirte... me pone nervioso que tanta gente me mire en silencio ;-)
Por eso prefiero hablar en privado y frente a una sabrosa caña

Llego a BUE a fin de diciembre pero igualmente mantendre clientes y empresa en Paris, no vaya a ser cosa que me de abstinencia al queso y vino frances ;)

asi que nos veremos en otra de los vueltas

abrazo desde la ciudad luz,

Martin Gersbach
Directeur Technique
www.troisfourmis.com

Duda similar

cmeraz's picture

En un tutorial que estaba viendo http://www.drupalescuela.com/node/21, la parte de escolaradmin, se estaba trabajando con un sitio web para la educacion, algo que he tenido mucha inquietud de saber como hacerlo y estos tutoriales me dieron mucha pista de ello, pero el punto que quiero poner aqui es el siguiente:

Segun el sitio, se tenia que contar con ciertos roles un site admin, secretario, profesor, alumno y padre, para no hacer el cuento mas largo el secretario debia de tener privilegios para crear cuentas y asignarlas a alumno, profesor o padre, para que posteriormente el usuario pueda acceder al sitio e interactuar con sus funciones especificas, el problema que yo le vi o la duda que me surgio y que quiero compartir con ustedes por si se ha dado el caso es:

Como evitar que un rol, pueda crear una cuenta super admin para si mismo, yo le doy privilegios a 1 personas de crear cuentas, llamese clientes, proveedores, alumnos, profesores, maestros, etc, pero evitar que pueda darles privilegios de super admin o admin.

Alguien ha tenido este problema?

Role Delegation

niteman's picture

Te recomiendo que mires: http://drupal.org/project/role_delegation

(Personalmente so partidario de restringir el uso del usuario 1 para las actualizaciones)

Salu2

Gracias por el tip

cmeraz's picture

este modulo es una verdadera joya, hasta ahora no he necesitado de el, los sitios web drupal que he desarrollado afortunadamente solo tienen acceso de 2 o 3 usuarios y son usuarios establecidos por mi como admin para que el cliente interacture con el sitio y los tipos de contenido, esta duda surgio pensando en que en un futuro pudiera llegar a tener este problema y me gusta prepararme antes de enfrentarme a los desafios para agarrarlos con mayor entendimiento.

Gracias

no quiero generar más ruido

trigop's picture

no quiero generar más ruido del necesario pero buscando otra cosa me he encontrado esto: http://drupal.org/project/protect_critical_users

Saludos digitales

buenisimo...

martin gersbach's picture

era lo que estabamos buscando hace semanas
;)
y el marciano de "el1nic0" ni enterado esta

Martin Gersbach
Directeur Technique
www.troisfourmis.com

isaac.el.cec@gmail.com's picture

Hola...

Solo reseñaros que Marcus_Petrux es uno de los miembros históricos de DRUPAL.CAT (http://drupal.cat)...

Saludos

Saludos
Isaac.el.Cec
- Temas DRUPAL: http://drupal6.propium.org
- Güep profesional: http://www.jramonet.org

Eso es de Locos

M@dara's picture

Señores como el mismo Administrador se va a borrar su cuanta,un usuario si no debería tener esos privilegios pero eso es otra cosa.

Spanish

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: