¿Quiénes son "otros" en los permisos de Linux y qué significa "ejecutar"?

13

No pude encontrar las respuestas a estas tres preguntas:

  • ¿Quién es "otros", si le damos un usuario a todos los servicios en nuestro servidor, "otros" no existen? Por ejemplo, si ponemos Apache a un usuario, y lo configuramos como /var/wwwpropiedad apachee ingresamos chmod 700, debería funcionar, ¿verdad?

  • ¿Cuál es la diferencia entre "ejecutar" y "leer"?

  • ¿Cuáles son los permisos de archivo predeterminados para todo el sistema después de una instalación limpia (por ejemplo, en Ubuntu)?

randomKek
fuente

Respuestas:

16

¿Quién es "otros", si le damos un usuario a todos los servicios en nuestro servidor, "otros" no existen? Por ejemplo, si ponemos Apache a un usuario, y lo configuramos como /var/wwwpropiedad apachee ingresamos chmod 700, debería funcionar, ¿verdad?

Así es como funcionan los permisos, explicados de manera muy breve:

  • El primer dígito es para el propietario real de un archivo (verifique quién posee un archivo ls -ly modifíquelo chown)

  • El segundo dígito es para el grupo del archivo (aunque el propietario de un archivo no necesariamente debe estar en el mismo grupo que posee el archivo)

  • El tercer dígito es cualquier otra persona, es decir, no el propietario del archivo y todos los que no están en el grupo.

Entonces, si tiene chmodun archivo de 700 y es propiedad de él apache, incluso su usuario "normal" no podrá leerlo, escribirlo ni ejecutarlo. Esto es muy restrictivo y solo se necesita en raras ocasiones; por ejemplo, cuando desea proteger su clave privada SSH, obtiene 600permisos. Para Apache, esto podría incluso ocasionar otros problemas, además del hecho de que con su cuenta de usuario normal, ya no podrá editar ningún archivo /var/www.

Por lo tanto, en general, no debería necesitar eliminar los permisos de lectura ( x00) para otros.

Podrías dejar que apacheel /var/wwwdirectorio sea ​​el propietario , pero 644quizás con (solo lectura para otros). Otro enfoque que utilizo a menudo es la adición de su propio usuario y el usuario de Apache a un nuevo www-usersgrupo y, a continuación, en archivos chmodding /var/wwwa 775. De esta manera, tanto usted como Apache pueden escribir en los archivos. Consulte aquí para obtener más información: permisos de grupo para apache


¿Cuál es la diferencia entre "ejecutar" y "leer"?

Los archivos ejecutables pueden ser ejecutados directamente por un usuario, directamente desde el shell. Para demostrar esto, vamos a escribir un archivo corto y llamarlo "prueba". Agregue el siguiente contenido:

echo "I am executable"

Guarda el archivo. Ahora, en su caparazón, intente ingresar ./test. Obtendrá el error " -bash: ./test: Permiso denegado ". Esto se debe a que, de manera predeterminada, los archivos recién creados no tienen permisos de ejecución. Si agrega el permiso de ejecución, funcionará.

$ chmod +x test
$ ./test
I am executable

Ahora, esto era solo un script de prueba, pero generalmente, todos los archivos binarios (como los programas compilados) también necesitan el conjunto de permisos de ejecución, por lo que puede ejecutar y hacer algo con ellos, y no solo leer.

Estos son, por ejemplo, los programas del sistema que se encuentran principalmente en /bin. Corre ls -l /binpara inspeccionar sus permisos. Como puede ver, son propiedad de ellos rooty no puede cambiarlos, pero siempre puede ejecutarlos.

Por lo tanto, esta también es una característica de seguridad, ya que puede restringir la ejecución de ciertos scripts y binarios para algunos usuarios.

Para obtener más información sobre los permisos de Unix, lea el artículo de Wikipedia . Los permisos básicos que conoce como "lectura-escritura-ejecución" han existido durante mucho tiempo, pero son solo parte de lo que llama Listas de control de acceso, que ofrecen mucha más funcionalidad que esta.


¿Cuáles son los permisos de archivo predeterminados para todo el sistema después de una instalación limpia (por ejemplo, en Ubuntu)?

Varían según el directorio y el propietario. Algunos archivos y directorios están reservados por el sistema y son propiedad de root. En la mayoría de los casos, podrá leerlos con su cuenta de usuario normal.

Otros directorios como su carpeta de inicio obviamente pertenecen a su usuario. Podría tener sentido denegar permisos de lectura a otros usuarios en una máquina si se comparte entre varias personas; después de todo, no desea que sus cosas privadas sean expuestas.

Finalmente, algunos archivos son ejecutables por defecto (por ejemplo, en /bin), pero otros no (por ejemplo, archivos de configuración en /etc).

El estándar de jerarquía del sistema de archivos especifica el uso previsto para los directorios que se encuentran en los sistemas Linux. Casi puede "adivinar" cuáles deberían ser los permisos en función de lo que desea hacer con un directorio.

slhck
fuente
¡Gracias realmente me ayudaste mucho! No puedo agradecerles lo suficiente, una pregunta más, ¿dónde está la línea entre "archivo" y "ejecutable", por ejemplo, los archivos PHP son ejecutados o leídos por Apache? De nuevo muchas gracias!
randomKek
.phplos archivos normalmente no son ejecutables. Son, simplemente hablando, solo leídos por Apache cuando apunta su navegador, por ejemplo, http://example.com/file.phpantes de que Apache pueda mostrar la salida, deben ser interpretados por su instalación de PHP, pero Apache se encarga de eso. Teóricamente, puede hacer que un archivo PHP sea ejecutable y ejecutarlo como un script, en la misma línea que lo hicimos con nuestro testarchivo, pero esto rara vez se usa.
slhck
5

Solo quiero agregar que el permiso de ejecución tiene diferentes significados efectivos para los directorios:

Para archivos :

  • Leer: si el contenido del archivo se puede leer
  • Escribir: si el usuario o el proceso pueden escribir en el archivo (cambiar su contenido)
  • Ejecutar: si el archivo se puede ejecutar

Para carpetas :

  • Leer: si se puede obtener el listado del directorio
  • Escribir: si el usuario o el proceso pueden cambiar el contenido del directorio de alguna manera: cree archivos nuevos o elimínelos existentes en el directorio o cambie el nombre de los archivos.
  • Ejecutar: si el usuario o el proceso pueden acceder al directorio, es decir, vaya a él (haga que sea el directorio de trabajo actual)

No, no hay un permiso de eliminación por separado para los directorios.

(Obtuve esta información aquí .)

LawrenceC
fuente
0

No soy un experto en Linux, pero intento responder.

Cada entrada del sistema de archivos tiene un usuario y grupo asociado. Los permisos del usuario son manejados por las banderas de "usuario". Los permisos de usuario de los usuarios que forman parte del mismo grupo son manejados por las banderas de "grupo". Todos los demás usuarios son manejados por las banderas "otros".

"leer" significa lo que dice. "ejecutar" significa que puede iniciar el archivo (por ejemplo, un comando) o que puede enumerar el directorio.

Con respecto al permiso predeterminado, no estoy seguro. Supongo que se puede configurar de alguna manera y, por lo tanto, puede ser diferente para cada usuario.

Mike L.
fuente
0

Para darle una respuesta decente a la pregunta 2, al menos, aquí hay una tabla resumen que muestra lo que puede / no puede hacer:

+--------------------------------------------------+
| Execute Yes (./file.sh) | Read Yes (vim file.sh) |
|--------------------------------------------------|
| Execute Yes (./file.sh) | Read No (ERROR)        |
|--------------------------------------------------|
| Execute No (ERROR)      | Read Yes (vim file.sh) |
|--------------------------------------------------|
| Execute No (ERROR)      | Read No (ERROR)        |
+--------------------------------------------------+

Lo que es importante recordar es que no es el USUARIO que lee el archivo de archivo en la memoria para ejecutarlo, es el KERNEL que lo hace en nombre del USUARIO.

nuevo123456
fuente
0

Puede ser complicado si desea excluir a todos los demás. Mire esta lista de mi archivo / etc / passwd (los permisos y lo que se eliminó para mayor claridad):

root daemon bin sys sync games man lp mail news uucp proxy www-data backup list irc gnats libuuid syslog messagebus usbmux haldaemon nobody

a {este soy yo, y aquí debajo están las cosas que instalé, sobre todo vinieron con el sistema}

avahi mysql pulse rtkit saned timidity didiwiki

Entonces, por ejemplo, elimine los permisos de lp o uucp y romperá la impresión. elimine el permiso de bin, sys o daemon y probablemente se romperán muchas cosas. irc, juegos, correo, noticias y copias de seguridad probablemente podrían eliminarse de forma segura (a menos que los esté utilizando a través del sistema, no un navegador). el resto lo dejo a tus habilidades de motor de búsqueda.

Sin embargo, esto es ubuntu / bodhi linux, y otros sistemas pueden tener menos extras. Sin embargo, todos estos otros son para evitar tener que ejecutar todo como root. Me imagino que es posible crear un sistema donde cada archivo pueda ser leído / escrito / ejecutado por solo uno de los usuarios del sistema (barra raíz) pero no estoy seguro de que haya sido probado.

Ejecutar es permiso para ejecutar código. Leer es permiso para mirar (¿y copiar?) Solamente.

conspiritech
fuente