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


Я создал некоторых пользователей:

$ useradd john

и я забыл указать параметр -m для создания домашнего каталога и для копирования файлов скелета каждому пользователю. теперь я хочу это сделать, и я не хочу воссоздавать всех пользователей (должен быть более простой способ). так, есть ли способ создать пользовательские каталоги и скопировать файлы скелета?

Я подумал о создании каталогов, отнесении их к соответствующему пользователю, копированию всех файлов скелета и передаче их соответствующему пользователю. но если есть команда вроде useradd -m который не создает пользователя снова, но создает каталоги, было бы лучше.


50
2017-09-09 14:33


Источник


Это произошло с большим списком пользователей? - David Rickman
У меня было около 10 пользователей с этой проблемой. - cd1
Я не могу не чувствовать, что у Рахула есть лучший ответ на ваш вопрос. Может быть, вам стоит пересмотреть принятый вами ответ? - jww


Ответы:


Это может показаться глупой идеей, но если пользователи на самом деле ничего не делают, вы можете сделать:

cat /etc/passwd | cut -f 1 -d : >/tmp/users.list

Затем отредактируйте /tmp/users.list, чтобы содержать только тех пользователей, которых вы хотите. Затем выполните:


for i in `cat /tmp/users.list`
do
    userdel $i
    useradd -m $i
done

Тем не менее, многие дистрибутивы Redhat создадут новый домашний каталог при первом входе в систему, если он указан в / etc / passwd, где должна быть директория.

Чтобы проверить это, сделайте «su -» и посмотрите, действительно ли это «правильная вещь». Если это не так, то, по-моему, этот сценарий будет работать очень красиво.


14
2017-09-09 15:02



да, это сработало, хотя оно создало новые UID и GID (но это не проблема). но я забыл сделать резервную копию паролей из / etc / shadow, теперь пользователям придется снова устанавливать свои пароли = / - cd1
Если он создал их недавно, он мог бы сделать: cat / etc / passwd | egrep '^ \: [0-9] {4} \:' | cut -f 1 -d:> /tmp/users.list Это должно только захватить UID действительных пользователей, а не пользователей системы. - David Rickman
Как насчет паролей, они остаются прежними? Я не боюсь! - math
for i in $(awk -F: '{print $1 }' /etc/passwd) - Rahul Patil
зачем использовать grep или разрезать с кошкой и с трубой, почему бы не так прямо? cut -f 1 -d: </ etc / passwd> passwtmp - c4f4t0r


Также вы можете использовать mkhomedir_helper

Usage: /sbin/mkhomedir_helper <username> [<umask> [<skeldir>]]

83
2018-05-17 03:59



Это единственный ответ, который фактически отвечает на вопрос без 10-строчного скрипта. - Brendan Byrd
Просто. Благодаря! - mawaldne
Это и ответ на пей лучше всего здесь, спасибо. Никогда не связывайтесь с этими файлами вручную, если вы можете избежать этого. - h4unt3r
dka @ dev-04: / $ / sbin / mkhomedir_helper dka dka @ dev-04: / $ cd bash: cd: / home / dka: нет такого файла или каталога - BigDong


Вам нужно будет создать каталог пользователей вручную. Это требует трех шагов:

  1. Создать каталог в соответствии с /etc/passwd, обычно будет уже вход / home / login.
  2. Скопируйте исходные файлы из / etc / skel
  3. И, наконец, установите права доступа:

    • mkdir /home/YOU
    • cd /home/YOU
    • cp -r /etc/skel/. .
    • chown -R YOU.YOURGROUP .
    • chmod -R go=u,go-w .
    • chmod go= .

BTW: Я всегда скучаю по -m вариант для useradd тоже. По крайней мере, системы на базе Debian должны иметь adduser команда, которую я рекомендую по сравнению с useradd. Если вы пропустили -m вариант, он также может быть deluser а затем воссоздайте пользователя с правильными параметрами.

Изменить: Добавлено -r для копирования также каталогов.


15
2018-05-12 16:14



Сделал это: usernameh = myusername; mkdir / home / $ usernameh; cp / etc / skel / * /etc/skel/.* / home / $ usernameh; chown -R $ usernameh: $ usernameh / home / $ usernameh; chmod -R 755 / home / $ usernameh; - Aki
Лично мне не нравится 755 chmod, так как он позволяет пользователям заглядывать в домашних пользователей других пользователей. Я думаю, каждый пользователь должен явно предоставить доступ другим. В виде public_html нуждается по крайней мере x бит, я бы порекомендовал chmod 0711 на каждом доме, public_html и аналогичные каталоги по умолчанию. - math
Кроме того, используйте cp -r для skel, иначе он не будет копировать каталоги (.ssh). - Aki
В моей системе (Arch Linux on ARM) cp -r /etc/skel/.* возвратитесь обратно в / etc / и скопируйте все данные отсюда (/etc/skel/.* соответствует / etc / skel / .. Я ожидаю). Решение из superuser.com/a/61619/22153 похоже, работают: cp -r / etc / skel / home / user (/ home / user не должен существовать до запуска команды) - zpon
Я предполагаю, что расширение оболочки расширяется * с . (Точка). Так .. соответствует. Я прав? Из-за такого поведения многие оболочки отключают это по умолчанию. Какую оболочку вы используете? - math


mkdir -p /home/john
chown john:john /home/john
usermod -d /home/john john

Это должно сделать трюк, который я считаю


11
2017-09-09 14:49



он говорит: usermod: no changes, и каталог не создается. он не работает ни с -m вариант. - cd1
Хорошо. Я понял, почему это не сработало, useradd использовал только для посылки $ HOME_DIR в / home, если вы не указали иначе. Кажется, теперь это автоматически помещается в / home / $ USER. Дешевым способом может быть usermod -d / home / john2 -m john, затем запустить usermod -d / home / john -m. - David Rickman
Nevermind, который тоже не работает. - David Rickman
Ну, по крайней мере, вы узнали что-то новое. - David Rickman
Вы забыли скопировать содержимое / etc / skel / + chown recursive для этих новых файлов. usermod не будет работать, так как здесь каталог был зарегистрирован, но не создан, usermod ничего не сделает. - Aki


Вы можете использовать что-то вроде pam_mkhomedir чтобы это не стало проблемой для всех пользователей в будущем. pam_mkhomedir - это модуль PAM, который автоматически создает домашний каталог пользователя при входе в систему, если он не существует, и заполняет его файлами из / etc / skel (или любым другим каталогом skel, указанным вами).

Это также хорошо масштабируемый подход, поскольку он будет продолжать решать эту проблему, если вы когда-нибудь переключите свой репозиторий пользователя на службу каталогов, такую ​​как LDAP, в будущем.


9
2018-05-12 16:29





В моем случае домашний том был поврежден, и я решил просто перестроить его с нуля, так как не так много данных, но я хочу сохранить регистрационную информацию пользователей, поэтому я вручную восстановил исходные каталоги с помощью этого скрипта:

#!/bin/bash
cat /etc/passwd | while IFS=: read n x i g c d r
do
  # my system has uid started at 1000, but has nfsnobody at 65534:
  if [[ "$i" -ge 1000 && "$i" -le 65000 && ! -x "$d" ]]
  then
    cp -av /etc/skel "$d"
    chown -R "$i:$g" "$d"
    # may needed in SELinux system:
    restorecon -R "$d"
    # add your chmod as your need:
    chmod -R o-rw "$d"
  fi
done

4
2017-10-08 16:45





Если вы редактируете /etc/login.defs содержать

CREATE_HOME yes

то домашние каталоги будут автоматически созданы для любых будущих пользователей, если вы не сообщите системе не для этого.

Другой вариант - использовать PAM для входа в систему и использовать модуль pam_mkhomedir для автоматического создания homedir при первом входе в систему.


2
2017-12-12 08:28





Войдите в систему с пользователем john и напишите из оболочки:

xdg-user-dirs-update

Это оно! Не используйте sudo или su, вам не нужен root-доступ для создания некоторых каталоги. Из учетной записи root вы можете использовать:

sudo -u john xdg-user-dirs-update

Таким образом, вы выполните команду john, которая может быть полезна, если вы допустили ошибку с несколькими пользователями.


0
2018-02-07 19:44