Введение: Что такое домашний каталог и зачем он нужен?
Представь, что ты заходишь в офис, и у тебя есть личный шкафчик для документов, фотографий семьи и любимой кружки. В мире Linux таким персональным пространством является домашний каталог (home directory). Это изолированная директория, где пользователь хранит свои файлы, настройки приложений (.bashrc, .vimrc) и личные данные. Система автоматически создаёт его при добавлении учётной записи, но бывают ситуации, когда нужно сделать это вручную: при миграции, восстановлении или использовании нестандартных путей. Давай разберём все способы.
/home/имя_пользователя. Однако их можно разместить где угодно — на отдельном диске, в другом разделе или даже на сетевом ресурсе (NFS).
Базовые способы создания домашней директории
Самый простой и распространённый метод — использовать утилиту useradd. Но важно понимать разницу между её поведением в разных дистрибутивах.
Создание пользователя с домашним каталогом (стандартный способ)
Команда useradd с ключом -m (или --create-home) создаст учётную запись и соответствующую директорию в /home.
# Создаём пользователя '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'.
adduser — это интерактивный Perl-скрипт, который использует useradd внутри, но задаёт больше вопросов. В RHEL adduser — это просто симлинк на useradd.
Создание домашнего каталога вручную для существующего пользователя
Бывает, пользователь создан без каталога (ключ -M), или директория была удалена. Исправляем ситуацию.
# 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.
# 1. Останавливаем все процессы пользователя (важно!)
sudo pkill -u alex
sudo usermod -l alex -d /data/home/alex -m alex
Ключ -m в usermod перемещает содержимое старого каталога в новый. Без него изменится только запись в /etc/passwd, но файлы останутся на старом месте.
Использование символических ссылок (symlink)
Альтернативный подход — оставить запись в /etc/passwd стандартной, но примонтировать или прилинковать реальное расположение.
# Допустим, реальные данные на отдельном диске /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) и включённые квоты.
# Включаем квоты для раздела /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. Она может быть пустой. Скопируй нужные файлы вручную или настрой свой «скелет» для будущих пользователей.
# Добавляем свой .bashrc в скелет
sudo cp ~/.bashrc_custom /etc/skel/.bashrc
Как удалить домашний каталог при удалении пользователя?
Используй userdel -r (ключ -r удаляет home и почтовый spool).
sudo userdel -r alex
Автоматизация: скрипт для массового создания
Если нужно создать много пользователей (например, для учебного класса или сервера разработки), ручной ввод команд неэффективен. Напишем простой 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) и владельца после любых манипуляций. Это избавит от большинства проблем с доступом. Теперь твои пользователи будут иметь надёжное и правильно настроенное личное пространство в системе.