Unix: ¿Cómo puedo permitir que solo una persona vea mi carpeta en el mismo fs?

9

Quiero dar acceso a un directorio para un amigo. Tiene acceso al sistema de archivos, donde se encuentra el directorio. No quiero establecer los permisos para todos los usuarios. ¿Cómo puedo permitir que solo una persona vea el directorio? Ninguno de nosotros es un superusuario.

[DESAFÍO BOUNTY] Ninguna de las respuestas funciona, usando Ubuntu:

1. El enfoque de jamuraa no funciona

$ setfacl -m user:friend:rwx classroom.xml 
setfacl: classroom.xml: Operation not supported

2. El enfoque de nik no funciona: no se puede acceder a un archivo inexistente

3. El enfoque de ba no funciona: no puedo crear grupos, no una raíz.

4. El enfoque de ToK no funciona, los usuarios están en dos grupos: "usuarios" y "campo"

chown -R myFriend:users ~/TEST
chown: changing ownership of `/u/myFriend/TEST/you_see_it': Operation not permitted
chown: changing ownership of `/u/myFriend/TEST': Operation not permitted

fuente
1
Sería útil si le diera una respuesta sobre cómo estas respuestas plantean un problema para usted, le daría una mejor definición del problema para formar otras opciones.
Nik
nik: se agregaron perfiles de error.

Respuestas:

12

Con los permisos normales de UNIX (usuario, grupo, todos), no puede hacerlo fácilmente. Si ya no necesita acceder al directorio, puede cambiar el propietario del directorio a su amigo, que es válido en algunos Unices, pero la mayoría de ellos no lo es.

Sin embargo, si tiene ACL habilitadas en Linux, puede hacerlo si es el propietario del archivo. Simplemente ejecute el comando setfacl -m user:friend:rwx filenamedonde amigo es el nombre de la cuenta de su amigo y el nombre de archivo es el archivo. Puede verificar que entró en vigencia ejecutando getfacl filename, debería ver la tríada user:friend:rwxen la lista. Sin embargo, no he visto muchos sistemas Linux que tengan habilitadas las ACL.

jamuraa
fuente
Las ACL son la solución estándar a este problema, suponiendo que su sistema de archivos las tenga habilitadas.
Ryan C. Thompson el
HHH parece decir que esto no funcionará. Creo que lo haría, a menos que por alguna extraña razón, las ACL no estén habilitadas. HHH, ¿qué da?
pboin
pboin: este método no funciona, por lo que aparentemente la razón puede ser que las ACL no están habilitadas o no, no estoy seguro.
11

Esto es algo que habíamos discutido en la escuela.
Va más o menos así,

  1. Cree un directorio (nombrado data, para referencia aquí)
    • cambiar los permisos como " chmod 711 data"
    • grupo y otros solo tienen xacceso para ingresar al directorio
    • no pueden enumerar el directorio
    • Ahora, cree un directorio difficult-name-here(esto podría ser una cadena hash)
    • cambiar los permisos como " chmod a+rx difficult-name-here"
    • el contenido de este directorio es seguro mientras que el directorio externo no se puede enumerar
    • las personas que conocen el "nombre difícil" pueden saltar a este segundo directorio
      • " cd path/to/data/difficult-name-here"
      • otros no pueden ver el nombre y no pueden acceder al contenido del directorio
      • Sin embargo, rootsiempre se puede acceder a todo (lo cual no es un problema aquí)
    • compartir el difficult-name-herecon las personas que desea dar estos datos
    • Mantener archivos compartidos en este segundo directorio

Bastante crudo, pero si esto se puede romper sin la rotura del control de acceso de Unix, me gustaría saberlo.


Actualización sobre el comentario de dmckee, ¡
Esta es exactamente la conclusión a la que llegamos!
"seguridad por oscuridad" tiene seguridad limitada .

Dicho esto, al diseñar la protección de datos,
es importante identificar su valor.

Debes apuntar a,

  • Un costo de romper la seguridad que es más alto que,
  • El costo del contenido seguro,
  • Por un factor proporcional a tu paranoia

En este caso, si rootdecide enumerar el árbol de directorios en algún lugar de acceso público, ¡
su secreto está fuera! Pero, ¿estás protegiendo desde la raíz o su potencial irresponsabilidad?
Si ese es el caso, tiene mucho más de qué preocuparse que los archivos compartidos.


Actualización sobre la nota que no funciona en la pregunta .
He usado esto en los primeros días de Linux para saber que funciona.
Si obtiene ' cannot access non-existant file' en lugar de 'permissions denied'' es muy probable que haya cometido un error en la secuencia. Lo que quieres debería verse así,

 755 711 755 lo que sea - === Permisos de acceso

 BasePath / CoverDir / Obscure / protectedFile.txt
          El | El | ^^^^^^^^^^^^^^^^^ No se puede ver sin
          El | ^^^^^^^ Nombre del directorio acceso de lectura a
          ^^^^^ Público compartido con amigo. Directorio oscuro.
                accesible 
                directorio.
  1. Si configura " CoverDiracceder como 'rwx--x--x",
    group y otros solo pueden ingresar al directorio pero no pueden leer su contenido.
  2. Ahora, si usa un nombre de directorio oscuro
    ' Obscure', dentro de él y le da acceso de lectura completo con ' rwxr-xr-x',
    cualquiera que conozca este nombre puede enumerar su contenido.
  3. Este acceso tendrá que ser hecho desde el exterior con un ' ls BasePath/CoverDir/Obscure'
    porque la gente en su grupo y otros no serán capaces de ' ls BasePath/CoverDir'.
nik
fuente
77
"si esto se puede romper [...], me gusta saber" Bueno, es el ejemplo de seguridad por oscuridad, y por lo tanto frágil. No cuentes con ello a largo plazo. Aseado, sin embargo.
dmckee --- ex-gatito moderador
Si su control de acceso de Unix se implementa de manera segura, esto es casi tan seguro como una base de datos de contraseñas oculta (o sshclave privada).
nik
5

Ryan estaba en realidad 100% correcto, solo al revés. Dado que su amigo (probablemente) tiene un grupo único asociado con su nombre de usuario, cambie la propiedad del grupo del directorio en cuestión a ese grupo, muy probablemente el nombre de usuario del amigo. Para poder compartir el contenido entre ustedes dos, debe conservar la propiedad como usuario:

chown -R youruser:friendgroup ~/foo/bar

Luego asigne los permisos apropiados al directorio, dependiendo del acceso que desee que tenga el otro usuario:

chmod -R 770 ~/foo/bar

les otorgaría a ambos acceso completo de rwx al directorio y todo su contenido.

Tenga en cuenta que esto supone que no se ha agregado ningún otro usuario al grupo de su amigo. Es probable que el sistema no haya realizado esta asignación, sin embargo, como se mencionó anteriormente, el usuario root puede hacer lo que elija. Puede usar el comando grupos para ver cada grupo al que pertenece su amigo o usuario arbitrario. Además, a menos que los permisos hayan cambiado por algún motivo, debería poder ver el archivo / etc / group que contiene las asignaciones de grupo para cada grupo en el sistema.

Tok
fuente
4

Haría un nuevo grupo para usted y su amigo y establecería los permisos de la carpeta en su totalidad para el propietario y el grupo junto con el bit setgid para el directorio.

Pero dependiendo de sus necesidades, es posible que también tenga que buscar cambiar su máscara de usuario y la de sus amigos para que configure automáticamente el grupo para que pueda cambiar los archivos nuevos.

# groupadd bestfriends
# chmod 2770 dir
# chgrp bestfriends dir
# usermod -G bestfriends FRIENDLOGIN
gaqzi
fuente
3
Esto puede requerir privilegios de superusuario que no tiene.
Keck
1
Oh, perdí por completo esa línea: x Entonces estoy perdido. Supongo que simplemente enviaría por correo localmente, no es la mejor solución, pero al menos el archivo se transmite al otro tipo.
gaqzi
2

Las listas de control de acceso son la manera perfecta de hacer esto.

Sin embargo (si no recuerdo mal), el sistema de archivos debe inicializarse con ACL (por ejemplo, "/ dev / sda6 / home ext3 defaults, acl "), a través de / etc / fstab, y esto es algo que solo el superusuario puede hacer. ..


fuente
2

Se requiere RBACS como grsec / selinux.

kagali-san
fuente
No estoy seguro de si este es el problema, ¿puede agregar alguna cita?
2

Por defecto, cada usuario en un sistema Ubuntu también tiene un grupo asociado con el mismo nombre. Entonces, si puede agregar a su amigo a su grupo y luego marcar la carpeta en cuestión como g+rwx, estará listo. Recuerdo vagamente que este caso de uso se cita como la razón para crear un grupo para cada usuario.

Ryan C. Thompson
fuente
Agregar usuarios a grupos requiere acceso de root, que OP dijo que no tiene.
Dave Sherohman
2

No lo he intentado, pero ¿qué tal un directorio público legible con un FS de espacio de usuario encriptado dentro (por ejemplo, encfs). Luego puede compartir esa contraseña con su amigo y nadie más puede hacer uso de esos datos (bueno, supongo que podrían obtener los datos y ejecutar un descifrador de contraseñas sin conexión).

Arun
fuente
2

Para dar a Linux el mismo Finesse que las ventanas en los privilegios de archivo, debe anidar grupos. Crea un grupo que tenga acceso a tu carpeta como te gustaría que tu amigo tuviera. Agréguelo a ese grupo o al grupo en el que reside en ese grupo. Por ejemplo

/ foo es la carpeta que quieres compartir. Cree un grupo FooGroup que tenga el acceso deseado a la carpeta. Agregue grupos y usuarios a este grupo al que desea tener dicho acceso a esta carpeta.

Es un gran problema tener un grupo para cada carpeta o archivo, pero es la mejor manera de restringir el acceso al mismo nivel que Windows.

Ge3ng
fuente
1

Puede encriptar el directorio con gpg. Y luego trate de ofuscar la ubicación como sugirió Nik.

kzh
fuente