Control de acceso

Hola a todos,
Tengo problemillas con el control de acceso en LDAP. No termino de hacerle funcionar correctamente. Pero ahora me surge otra duda. Como se puede hacer para que unos usuarios, o un grupo en especial, puedan conectarse a una serie de laboratorios??
Para que me entendaís pongo un ejemplo. Tengo 3 laboratorios, lab1,lab2 y lab3(son laboratorios fisicos, con sus propias ips, que se autentifican con ldap).Quiero que un usuario pueda conectarse a los ordenadores del lab1 y lab2, pero no del lab3. Esto se podría hacer??
Puede alguien orientarme algo??

Un saludo y gracias

Your rating: None

especificando algo mas

Especificando un poco lo que dije anteriormente, que a lo mejor me expliqué algo mal. Quiero, por ejemplo, que un grupo de usuarios pueda conectarse desde una maquina1 y no desde una maquina2, y otro grupo de usuarios no pueda conectarse desde la maquina1, pero si desde la maquina2.
Lo máximo que he conseguido es que todos se autentifiquen desde una maquina1, pero no desde la maquina 2( con peername.ip), pero o todos o ninguno.
Alguien sabe que puedo hacer para restringir accesos a un grupo??

un saludo y gracias

Ramas

Hola, no se exactamente cual es el problema que tienes. Pero habitualmente lo que haces es separar a los usuarios en distintas ramas del LDAP (o grupos) por ejemplo:

Si en una rama tienes a usuarios "alumnos" y en otra "profesores" podrías decirle al sistema que en la maquina1 solo puedan acceder los "alumnos" y en la máquina2 los "profesores" especificando en el cliente LDAP la "rama base" y el método de búsqueda.

Ej: ou=profesores,ou=usuarios,o=ejemplo.net
ou=alumnos,ou=usuarios,o=ejemplo.net

Con estas dos ramas, puedes tener una maquina en la que entren todos, configurando el cliente para "usuarios" y buscando en el resto de ramas (o un nivel mas) o podrías poner por ejemplo "alumnos" y que la busqueda fuera exclusivamente en esa rama.

Un saludo,
Iago

aclaracion

Iago, voy a intentar especificarte mejor mi caso. A ver, mi árbol es así:

dn: dc=tel,dc=uva,dc=es
objectClass: dcObject
objectClass: organization
o:: dGVsIA==
dc: tel
structuralObjectClass: organization
creatorsName: cn=root,dc=tel,dc=uva,dc=es

dn: cn=root,dc=tel,dc=uva,dc=es
objectClass: organizationalRole
objectClass: bootableDevice
cn: root
structuralObjectClass: organizationalRole
creatorsName: cn=root,dc=tel,dc=uva,dc=es

dn: ou=users,dc=tel,dc=uva,dc=es
ou: users
objectClass: top
objectClass: organizationalUnit
structuralObjectClass: organizationalUnit
creatorsName: cn=root,dc=tel,dc=uva,dc=es

dn: ou=groups,dc=tel,dc=uva,dc=es
ou: groups
objectClass: top
objectClass: organizationalUnit
structuralObjectClass: organizationalUnit
creatorsName: cn=root,dc=tel,dc=uva,dc=es

dn: cn=profesores,ou=groups,dc=tel,dc=uva,dc=es
cn: profesores
gidNumber: 1001
memberUid: caralo
objectClass: top
objectClass: posixGroup
structuralObjectClass: posixGroup
creatorsName: cn=root,dc=tel,dc=uva,dc=es

dn: cn=alumnos,ou=groups,dc=tel,dc=uva,dc=es
cn: alumnos
gidNumber: 1002
memberUid: dpercam
objectClass: top
objectClass: posixGroup
structuralObjectClass: posixGroup
creatorsName: cn=root,dc=tel,dc=uva,dc=es
modifiersName: cn=root,dc=tel,dc=uva,dc=es

dn: uid=caralo,ou=users,dc=tel,dc=uva,dc=es
uid: caralo
givenName: Carlos
sn: Alonso
cn: Carlos Alonso
loginShell: /bin/bash
uidNumber: 2001
gidNumber: 1001
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
structuralObjectClass: inetOrgPerson
creatorsName: cn=root,dc=tel,dc=uva,dc=es

dn: uid=dpercam,ou=users,dc=tel,dc=uva,dc=es
uid: dpercam
uidNumber: 2002
gidNumber: 1002
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
structuralObjectClass: inetOrgPerson
creatorsName: cn=root,dc=tel,dc=uva,dc=es

Hay una base tel.uva.es , y se divide en users y groups. Y luego ya tengo todos los usuarios en users, y pertenecen a ciertos grupos que están dentro de groups.

Lo que yo quiero es que ,por ejemplo, los usuarios pertenecientes al grupo profesores puedan autentificarse en cierta ip1, pero los demas no.A otra ip2 solo pueden autentificarse los pertenecientes a alumnos y a las demas todos. O algo así.

Solo consigo que se autentifiquen todos o ninguna desde cierta ip, con peername.ip.

Como podría ser??Podría alguien ponerme un ejemplillo práctico? LO he intentado casi todo.

Un saludo y muchas gracias

Perdona que no me acuerde exa

Perdona que no me acuerde exactamente del uso de filtros, pero puedes utilizarlos Ej: (objectClass=*) me imagino que podras indicar algio así como (group=profesores) o algo así...
Siento no ser muy especifico, pero ahora me pillas con prisa.

Un saludo,
Iago

gracias

No pasa nada, seguire intentandolo a ver si hay suerte. Si alguien sabe como acerlo se lo agradecería.

Un saludo y gracias, Iago

A ver, ahora ya tengo algo mas de tiempo :p

Sería algo así. En el caso de Linux:

En ldap.conf hay una lineta tal como esta:

# Filter to AND with uid=%s
#pam_filter objectclass=account

Pues utilizas el
pam_filter gidNumber=1002
para los alumnos y el gidNumber=1001 para los profesores.

Si lo haces para windows y usas pGina, el plugin de ldap tiene una sección solo para restringir a grupos.

Espero que te sirva de algo.

Un saludazo,
Iago

Si, pero necesito restringir

Si, pero necesito restringir el acceso a un grupo si y a otro no desde cierta ip. Y con lo que me pones no permitiría el acceso a un grupo, pero sin especificar desde donde accediesen.
Yo quiero algo así como: "alumnos pueden acceder desde la ip XX.XX.XX.XX pero profesores no" y "profesores pueden acceder a desde la ip YY.YY.YY.YY, pero alumnos no".

Si alguien me puede ayudar, que no lo consigo.

Un saludo y gracias

Aqui mismo respondi una

Aqui mismo respondi una pregunta el otro día con algo referente a esto, te voy a ser franco no se si trabajen los ejemplos que le puese porque no me he visto en la necesidad de llegar a este punto pero quizas te sirva..

Intenta expecificar el grupo justo
access to attrs=userPassword
by (aqui) peername.ip=192.168.70.134 write
by * none

o intenta de esta manera

access to dn.children="dc=example,dc=com"
by domain.regex=example.com anonymous read
by peername.ip=127.0.0.1 anonymous read

esta es otra forma posible
access to *
by dn="cn=admin,ou=prueba,dc=example,dc=com" write
by peername.ip=127.0.0.1 read
by peername.ip=192.168.77.0%255.255.255.0 read
by peername.ip=192.168.50.0%255.255.255.0 read
by * none
y este se asocia más a lo que necesitas
access to dn.subtree="dc=example,dc=com" attr=prueba
by self write
by dn.children=dc=example,dc=com" search
by peername=IP:10\..+ read

Le agregas a los usuarios que le desees permitir modificar, buscar, etc, el attr prueba.
"Para ser exitoso no tienes que hacer cosas extraordinarias. Haz cosas ordinarias, extraordinariamente bien."