Un archivo creado en el lugar equivocado o con permisos demasiado amplios a menudo termina causando problemas más tarde. El comando mkdir es suficiente para comenzar, pero no reemplaza el control del propietario, del grupo y de los permisos.
Para un directorio personal, créelo en su carpeta de usuario. Para un directorio compartido o utilizado por un servicio, primero identifique la cuenta que necesita escribir en él. Un chmod 777 a veces oculta un verdadero problema de propietario y permite que todas las cuentas locales modifiquen el contenido.
Cree el directorio en la ubicación correcta
Desde el directorio actual, el siguiente comando crea un único directorio:
mkdir respaldos
Con una ruta absoluta, sabe exactamente dónde se creará el directorio. Agregue -p si los directorios padres pueden faltar:
mkdir -p ~/proyectos/sitio-test/logs
Sin -p, mkdir se detiene si ~/proyectos/sitio-test no existe. La opción también evita un error cuando el último directorio ya está presente. No convierte una ruta incorrecta en una ruta correcta: verifíquela con pwd antes de ejecutar el comando.
Para preparar un espacio que debe pertenecer a su cuenta, permanezca en su directorio personal. Evitará sudo, por lo tanto, un directorio creado por root que su usuario no podrá llenar:
mkdir -p ~/archivos/2026
stat -c '%A %U:%G %n' ~/archivos ~/archivos/2026
Elija permisos adecuados para el uso
Un directorio requiere el permiso x para ser atravesado. En un directorio, r permite listar los nombres y w permite agregar, renombrar o eliminar entradas. Los permisos realmente aplicados también dependen de su umask.
Para un directorio privado, créelo con un modo explícito:
mkdir -m 700 ~/archivos-privados
stat -c '%A %a %U:%G %n' ~/archivos-privados
El modo 700 permite el acceso al propietario y cierra el directorio a otros usuarios. Para un directorio donde un grupo de trabajo debe leer y escribir, elija un grupo conocido y el modo 2770:
sudo install -d -o alice -g equipo-web -m 2770 /srv/equipo-web
stat -c '%A %a %U:%G %n' /srv/equipo-web
El 2 al principio activa el bit setgid del directorio. Los nuevos archivos y subdirectorios heredan entonces el grupo equipo-web. Esta solución evita abrir la escritura a todas las cuentas del servidor. Verifique que los miembros esperados están en este grupo con id nombre_usuario.
mkdir -m 777 crea un directorio modificable por todos, y luego el umask puede reducir aún más este modo. No lo use para corregir un Permission denied. En su lugar, lea la ruta completa, su propietario y los permisos de cada directorio padre:
namei -l /srv/equipo-web
ls -ld /srv /srv/equipo-web
id
Controle antes de confiar el directorio a un servicio
Un servicio que se ejecuta bajo www-data, postgres o una cuenta dedicada no siempre ve los mismos permisos que su sesión. Consulte su usuario antes de cambiar nada. Para systemd, este comando muestra las cuentas configuradas por la unidad:
systemctl show mi-servicio
-p User -p Group -p DynamicUser
Luego cree el directorio con el propietario esperado y pruebe un archivo desde esta cuenta. En una máquina de prueba:
sudo install -d -o www-data -g www-data -m 750 /var/lib/mi-servicio
sudo -u www-data touch /var/lib/mi-servicio/prueba-escritura
ls -l /var/lib/mi-servicio/prueba-escritura
sudo rm /var/lib/mi-servicio/prueba-escritura
Esta verificación le dice si la cuenta del servicio puede realmente escribir. Si falla, no añada permisos al azar. Primero controle el propietario, el grupo, las ACL posibles con getfacl y los derechos de los directorios padres.
- Utilice
mkdir -ppara una ruta de la que los padres puedan faltar. - Utilice
statols -ldjusto después de la creación. - Para un directorio compartido, defina propietario, grupo y modo antes de iniciar el servicio.
- Reserve
chmodpara una corrección específica, después de haber identificado la cuenta bloqueada.
La guía sobre setfacl en Linux ayuda cuando un solo usuario necesita acceso adicional. Si necesita modificar permisos en una estructura existente, utilice en su lugar el procedimiento dedicado a chmod recursivo: cambiar todos los archivos y directorios con el mismo modo rompe fácilmente los derechos de ejecución de los directorios.
La página de manual mkdir(1) detalla las opciones, y mkdir(2) explica el efecto del umask y la herencia del grupo. Tenga en cuenta estos dos puntos antes de crear un directorio utilizado por un servicio.
