¿Cómo evitar que un nuevo usuario haga algo peligroso?

31

Recientemente instalé el servidor Ubuntu en mi servidor para probar Linux como nuevo usuario. Seguí un tutorial sobre cómo configurar el servidor web que decía que necesitaba chmod 777el directorio del servidor web para poder escribirlo.

De todos modos, creé una nueva cuenta para un tipo para permitirle ver algunos archivos en el servidor que coloqué en su directorio de inicio:

adduser francis

Después de crear la cuenta, verifiqué qué acceso tiene con

groups francis

Decía "francis: francis", así que no fue un problema, pensé, ubuntu no lo ha incluido en ningún grupo por defecto, lo cual tiene sentido, lo creó sin permisos adicionales en cuanto a seguridad, por lo que todo está bien y elegante. Una semana después, con absoluto horror, descubrí que aunque no podía hacer cosas como SUDO o perder el tiempo en los directorios del sistema, tenía acceso completo a casi todo lo demás en el servidor. Por ejemplo, tenía acceso completo de lectura / escritura a los archivos de mi servidor web en / var / www (y, por lo tanto, las contraseñas almacenadas en los archivos de configuración de php, etc.) a pesar de que ese directorio NO está en su directorio de inicio y nunca lo agregué a ningún grupo que pudiera acceder a ese directorio, ni le otorgué ningún acceso especial a nada después de hacer el adduser.

De todos modos, ¿qué está pasando aquí? ¿Cómo elimino su acceso a algo importante? No debería poder acceder a cosas como / media o / var / www. Pensé que, por defecto, a los nuevos usuarios se les impedía hacer algo peligroso o husmear donde no deberían estar.

En resumen, solo necesito permitirle el acceso a directorios que especifique manualmente + a directorios que necesita para funcionar correctamente (su directorio de inicio, vim, nano, etc.)

Gracias

Askerman
fuente
30
Estás haciendo chmod 777 y te preguntas por qué todos pueden leer y escribir allí. lea la página de manual de chmod
Anwar
16
Sí, 777 es tu problema, por múltiples razones.
Android Dev
21
@Askerman - No, cuando le das 777, todos pueden acceder a todo , por favor lee esto: linux.com/learn/understanding-linux-file-permissions
Android Dev
11
Todos cometemos errores, especialmente cuando estamos aprendiendo en un entorno completamente nuevo. Esta es una buena idea para aprender, definitivamente es aconsejable arrojar sus nociones de cómo funcionan las cosas en Windows cuando se utiliza un sistema operativo basado en Linux. Después de revertir sus permisos, debe notar que el usuario no puede cambiar nada de lo que no debería. Sin embargo, si usó en chmodotro lugar, puede tener otros problemas.
Arronical
8
FYI- Estoy votando esta pregunta porque en realidad es buena para que la encuentren nuevas personas. Y esta idea errónea es probablemente más común de lo que pensamos. Este también es un buen ejemplo de por qué no debería simplemente copiar los comandos que encuentra en Internet (incluso aquí) sin saber lo que hacen.
Aaron

Respuestas:

40

Esto es como fue diseñado. Y peor chmod 777 significa ... "Me gustaría que el propietario, cualquier persona de su grupo y cualquier persona tenga permisos de lectura, escritura y ejecución"

Lo cual es bastante terrible.

Y para un servidor web, 777 no es óptimo. 755 (el propietario tiene un grupo de permisos completo y otros tienen lectura + ejecución) es un valor predeterminado común, pero por lo que ha dicho que quiere al menos lectura-escritura, o lectura-escritura ejecutar para el propietario (el usuario del servidor web), y tal vez el grupo, y sin permisos para el usuario. Hay preguntas más completas sobre los niveles de permisos apropiados en el servidor predeterminado, pero considere algo como 640 o 740.

Dicho esto, también podría poner al usuario en su propio pequeño mundo: configurar chroot para mantener al usuario en su propio espacio en el sistema. Hay guías que flotan para hacer esto, por ejemplo, la excelente respuesta de oli aquí, que puede ser una opción según sus necesidades.

Journeyman Geek
fuente
44
Punto menor: "el propietario, cualquier persona en su grupo ..." - el propietario del archivo no necesariamente tiene que pertenecer al grupo de archivos.
alex_d
2
Agradable. Me gusta que te hayas referido a la respuesta canónica en servfault.
Élder Geek
3
La jerga histórica para esta situación es " legible / escribible en el mundo ".
Kaz
19

Esencialmente, se descompone así:

R = 4 (read)
W = 2 (write)
X = 1 (execute)

Entonces, los permisos de lectura solo serían 4, leer y escribir sería 6, leer y ejecutar sería 5, y todo (leer, escribir, ejecutar) es 7. Así es como se calcula un valor de octeto de permiso para un propietario, grupo de propietarios o a todos.

Al aplicar esos permisos chmoda una ubicación de archivo o directorio, los números calculados anteriormente se aplican de esta manera, con un octeto para cada propietario, grupo y todos:

     $ chmod _ _ _ <file or directory>
             | | |
owner--------  | |
owner's group--  |
everyone---------

Entonces, si quisiera darle a mí y a mi grupo permisos de lectura, escritura y ejecución para una carpeta que poseía, pero no quería que todos pudieran leerlo, usaría:

$ chmod 770 myDirectory

Para obtener más información, consulte la página de manual de chmod :

$ man chmod
Aaron
fuente
Si no puede recordar los bits que se deben sumar para hacer los permisos correctos en el orden correcto, también puede usar los posiblemente más fáciles de leer chmod ugo+rwx <...>. Los caracteres representan u ser, g roup, o other; r ead, w rite, e x ecute. Puede usar '-' para eliminar (por ejemplo:) chmod go-wx <...>. Solo tenga en cuenta que esto solo agrega o elimina exactamente lo que escribe. chmod ugo+rwx <file>; chmod u+rwx <file> no elimina el acceso para grupo / otro.
ReactiveRaven
@ReactiveRaven Ese es un gran punto. Pero el OP obviamente estaba confundido sobre lo que chmod 777hizo, así que ahí fue donde dirigí mi explicación.
Aaron
@Zanna ¡Buena llamada!
Aaron
6

Como otros han mencionado, no debe tener permisos establecidos en 777

Aquí hay una hoja de referencia útil que uso.

+-----+---+--------------------------+
| rwx | 7 | Read, write and execute  |
| rw- | 6 | Read, write              |
| r-x | 5 | Read, and execute        |
| r-- | 4 | Read,                    |
| -wx | 3 | Write and execute        |
| -w- | 2 | Write                    |
| --x | 1 | Execute                  |
| --- | 0 | no permissions           |
+------------------------------------+
You can use the octal notation, where the three digits correspond to the user, then group, then other. 
Perhaps this might help 
+------------+------+-------+
| Permission | Octal| Field |
+------------+------+-------+
| rwx------  | 700  | User  |
| ---rwx---  | 070  | Group |
| ------rwx  | 007  | Other |
+------------+------+-------+
¿Por qué Ayyala?
fuente
1
¡Agradable! Esto es de gran ayuda para las personas (como yo) que son aprendices visuales.
Aaron
3

Para compartir archivos con una persona a la que le ha dado inicio de sesión, no necesita hacer nada en particular. En una instalación predeterminada de Debian, los usuarios tienen acceso a los directorios principales de los demás.

Por ejemplo,

$ ls -ld ~
drwxr-xr-x 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

Los permisos en mi directorio personal son de lectura (r) y acceso (x) para cualquier usuario en mi sistema. Solo yo adicionalmente tengo acceso de escritura (w) .

Además, el valor predeterminado umasken Ubuntu es tal que los archivos y directorios que crean los usuarios son legibles en todo el mundo de forma predeterminada . Se podría establecer el umaskque 077si no quieres eso.

Lo que esto significa es que en una configuración predeterminada, si el usuario youquiere compartir documentos ~/README.txtconmigo, entonces no hay nada youque hacer. Simplemente puedo verlo:

$ who am i
zwets    pts/26       2016-09-29 08:05 (:pts/19:S.6)
$ ls -l ~you/README.txt
-rw-r--r-- 1 you you 24 Sep  8 11:23 /home/you/README.txt
$ cat ~you/README.txt
You's shared thoughts.

No puedo editar o eliminar el archivo, pero puedo copiarlo en una ubicación donde tenga permiso de escritura. Entonces soy dueño de la copia:

$ echo "Adding my thoughts." >> ~you/README.txt
bash: /home/you/README.txt: Permission denied
$ rm ~you/README.txt
rm: remove write-protected regular file '/home/you/README.txt'? yeah!
rm: cannot remove '/home/you/README.txt': Permission denied
$ cp ~you/README.txt ~zwets
$ ls -l ~/README.txt
-rw-r--r-- 1 zwets zwets 24 Sep  29 14:09 /home/zwets/README.txt

Hay buenas razones por las cuales la mayoría del sistema es legible por mundo de manera predeterminada, como lo he explicado en otra respuesta en AskUbuntu . Sin embargo, en un sistema compartido puede tener sentido hacer que los directorios principales sean inaccesibles para los no propietarios:

$ chmod o-rwx ~
$ ls -l ~
drwxr-x--- 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

... ya que muchos usuarios aparentemente no conocen el valor predeterminado: QED ;-). Sin embargo, sería más sabio hacer que los usuarios sean conscientes de que los permisos de archivo no protegen los secretos.

zwets
fuente
1

En Ubuntu, cualquier usuario tiene privilegios de superusuario que se agregan en el grupo 'sudo'. Verifíquelo para asegurarse de que no se agregue ningún otro usuario en este grupo.

Para proteger sus archivos y directorio de otros usuarios, puede configurar el permiso según lo sugerido por el Sr. Journeyman Geek en la respuesta anterior.

También puede usar permisos especiales para proteger sus archivos y directorios de otros.

Puneet Dixit
fuente