Создание домашнего каталога в Linux: команды, настройки, права | AdminWiki

Создание домашнего каталога для пользователя Linux: полное руководство

30 декабря 2025 7 мин. чтения #bash #devops #linux #useradd #usermod #администрирование #домашний каталог #права доступа

Введение: Что такое домашний каталог и зачем он нужен?

Представь, что ты заходишь в офис, и у тебя есть личный шкафчик для документов, фотографий семьи и любимой кружки. В мире Linux таким персональным пространством является домашний каталог (home directory). Это изолированная директория, где пользователь хранит свои файлы, настройки приложений (.bashrc, .vimrc) и личные данные. Система автоматически создаёт его при добавлении учётной записи, но бывают ситуации, когда нужно сделать это вручную: при миграции, восстановлении или использовании нестандартных путей. Давай разберём все способы.

Ключевой момент: По умолчанию домашние каталоги в большинстве дистрибутивов находятся в /home/имя_пользователя. Однако их можно разместить где угодно — на отдельном диске, в другом разделе или даже на сетевом ресурсе (NFS).

Базовые способы создания домашней директории

Самый простой и распространённый метод — использовать утилиту useradd. Но важно понимать разницу между её поведением в разных дистрибутивах.

Создание пользователя с домашним каталогом (стандартный способ)

Команда useradd с ключом -m (или --create-home) создаст учётную запись и соответствующую директорию в /home.

bash
# Создаём пользователя 'alex' с домашним каталогом и оболочкой bash
sudo useradd -m -s /bin/bash alex

# Устанавливаем пароль для нового пользователя
sudo passwd alex

# Проверяем, создался ли каталог
ls -la /home/alex/

Что произошло? Система:

  • Создала запись в /etc/passwd и /etc/shadow.
  • Создала директорию /home/alex.
  • Скопировала базовые конфигурационные файлы из /etc/skel (скeleton — «скелет»).
  • Установила владельца и группу для каталога на 'alex'.

Внимание на Debian/Ubuntu vs RHEL/CentOS: В Debian и производных утилита adduser — это интерактивный Perl-скрипт, который использует useradd внутри, но задаёт больше вопросов. В RHEL adduser — это просто симлинк на useradd.

Создание домашнего каталога вручную для существующего пользователя

Бывает, пользователь создан без каталога (ключ -M), или директория была удалена. Исправляем ситуацию.

bash
# 1. Создаём сам каталог с правильными правами
sudo mkdir /home/alex

# 2. Копируем файлы из /etc/skel (базовые настройки)
sudo cp -r /etc/skel/. /home/alex/

# 3. Меняем владельца и группу рекурсивно
sudo chown -R alex:alex /home/alex

# 4. Устанавливаем корректные права (755 для каталога, 644 для файлов)
sudo chmod 755 /home/alex
sudo find /home/alex -type f -exec chmod 644 {} \;
sudo find /home/alex -type d -exec chmod 755 {} \;

Продвинутые сценарии и настройки

Изменение расположения домашнего каталога

Иногда нужно разместить домашнюю директорию на отдельном разделе (например, /data/home/alex) для улучшения производительности или изоляции. Используем usermod.

bash
# 1. Останавливаем все процессы пользователя (важно!)
sudo pkill -u alex
sudo usermod -l alex -d /data/home/alex -m alex

Ключ -m в usermod перемещает содержимое старого каталога в новый. Без него изменится только запись в /etc/passwd, но файлы останутся на старом месте.

Альтернативный подход — оставить запись в /etc/passwd стандартной, но примонтировать или прилинковать реальное расположение.

bash
# Допустим, реальные данные на отдельном диске /mnt/big_disk/home/alex
# 1. Создаём стандартный каталог (пустой)
sudo mkdir /home/alex

# 2. Удаляем его и создаём символическую ссылку
sudo rmdir /home/alex
sudo ln -s /mnt/big_disk/home/alex /home/alex

# 3. Назначаем владельца на конечную директорию
sudo chown -R alex:alex /mnt/big_disk/home/alex

Настройка квот дискового пространства

Чтобы пользователь не заполнил весь диск, можно установить лимиты. Для этого нужна поддержка файловой системы (ext4, XFS) и включённые квоты.

bash
# Включаем квоты для раздела /home в /etc/fstab
# UUID=... /home ext4 defaults,usrquota,grpquota 0 2

# Перемонтируем
sudo mount -o remount /home

# Инициализируем квоты
sudo quotacheck -cug /home
sudo quotaon /home

# Устанавливаем лимит для пользователя alex: 1Гб мягкий, 1.1Гб жесткий
sudo setquota -u alex 1G 1.1G 0 0 /home

# Проверяем
sudo quota -u alex

Таблица сравнения методов создания

Метод / Утилита Создаёт каталог? Копирует /etc/skel? Использование
useradd -m Да Да Основной метод, стандарт
useradd -M Нет Нет Создание системных пользователей без home
adduser (Debian) Да Да Интерактивный, дружелюбный
Ручное создание + chown Да Нет (если не скопировать) Восстановление, кастомные сценарии
usermod -d -m Перемещает - Изменение расположения существующего home

Частые проблемы и их решение (FAQ)

Пользователь не может зайти в свой домашний каталог: «Permission denied»

Самая частая причина — неправильные права доступа. Убедись, что:

  • Владелец каталога — сам пользователь: chown alex:alex /home/alex
  • Права на каталог — 755 (drwxr-xr-x): chmod 755 /home/alex
  • Все вышележащие каталоги (например, /home) имеют право на исполнение (x) для всех.

Файлы из /etc/skel не скопировались

Проверь содержимое директории /etc/skel. Она может быть пустой. Скопируй нужные файлы вручную или настрой свой «скелет» для будущих пользователей.

bash
# Добавляем свой .bashrc в скелет
sudo cp ~/.bashrc_custom /etc/skel/.bashrc

Как удалить домашний каталог при удалении пользователя?

Используй userdel -r (ключ -r удаляет home и почтовый spool).

bash
sudo userdel -r alex
Осторожно с удалением! Эта операция необратима. Все данные пользователя будут стёрты. Перед удалением сделай резервную копию, если данные ценны.

Автоматизация: скрипт для массового создания

Если нужно создать много пользователей (например, для учебного класса или сервера разработки), ручной ввод команд неэффективен. Напишем простой bash-скрипт.

bash
#!/bin/bash
# Скрипт create_users.sh
# Принимает файл со списком логинов (по одному в строке)

if [ $# -ne 1 ]; then
    echo "Использование: $0 файл_со_списком_пользователей"
    exit 1
fi

while read username; do
    # Пропускаем пустые строки и комментарии
    [[ -z "$username" || "$username" == \#* ]] && continue

    echo "Создаю пользователя: $username"
    
    # Создаём пользователя с домашним каталогом
    sudo useradd -m -s /bin/bash "$username"
    
    # Генерируем случайный пароль
    password=$(openssl rand -base64 12)
    echo "$username:$password" | sudo chpasswd
    
    # Записываем логин и пароль в файл (обезопась его!) 
    echo "$username : $password" >> created_users.txt
    
    # Можно добавить пользователя в дополнительные группы
    # sudo usermod -aG developers,sudo "$username"

done < "$1"

echo "Готово. Пароли сохранены в created_users.txt"

Запуск: sudo bash create_users.txt

Заключение

Создание домашнего каталога для пользователя Linux — фундаментальная операция системного администрирования. Ты теперь знаешь не только базовую команду useradd -m, но и как:

  • Вручную настроить права и владельца.
  • Изменить расположение home-директории.
  • Работать с символическими ссылками.
  • Устанавливать дисковые квоты.
  • Автоматизировать процесс с помощью скриптов.
Помни главное правило: всегда проверяй права доступа (ls -la) и владельца после любых манипуляций. Это избавит от большинства проблем с доступом. Теперь твои пользователи будут иметь надёжное и правильно настроенное личное пространство в системе.

Поделиться:
Сохранить гайд? В закладки браузера