Пользователь Clone Linux (копирование пользователя на основе другого)
13
Как я могу создать нового системного пользователя, точную копию другого (с такими же группами, разрешениями, привилегиями и настройками), но с другим именем пользователя, паролем и домашним каталогом?
Он получает группы исходного пользователя (не включая группу, совпадающую с его именем входа) и оболочку, а затем создает нового пользователя с такой же оболочкой и дополнительными группами.
Usage: clone-user src_user_name new_user_name
Там нет проверки ошибок, это просто быстрый и грязный скрипт-клон.
Да, интересно, но быстро и грязно: произойдет сбой, если имя для входа является префиксом или суффиксом какого-либо имени группы. Например, логин есть john, одна из групп есть johnny. Вот что происходит: SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"Вывод:john,group1ny,group3
Стефан Гурихон
Спасибо за создание этого скрипта. Я предлагаю изменить SRC_GROUPS как таковой, SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g') что позволит правильно удалить точное имя группы пользователей, а не частичное совпадение строк. Ex. Если идентификатор пользователя равен «pi», а у пользователя есть группы, включающие «pi, gpio, spi и т. Д.», Он удалит только «pi», а не совпадет с другой частичной строкой.
Фил
5
Отредактируйте / etc / passwd и продублируйте строку пользователя, точную копию которого вы хотите. Измените имя входа, настоящее имя и домашний каталог.
Отредактируйте / etc / shadow и снова продублируйте строку исходного пользователя. Измените имя входа.
Наконец, выполните, passwd newuserчтобы изменить пароль.
Помните, что в системе оба пользователя одинаковы (один и тот же UID), поэтому один сможет войти в домашний каталог другого и изменить его по своему усмотрению.
Это почти наверняка самый простой способ. Однако было бы неплохо изменить и UID, если вы не собираетесь, чтобы они фактически были одним и тем же пользователем ...
Wildcard
1
@Wildcard, но тогда это не был бы клон, это был бы новый пользователь, и эту задачу можно решить с помощью простого useradd. Теперь, когда я думаю об этом, вы можете сделать это наоборот, создать нового пользователя useraddи затем изменить UID и GID для клонирования первого.
YoMismo
3
Для Linux Mint 18 Mate
Основываясь на сценарии Майка Андерсона, я создал такой, который задает вопросы о новом пользователе, старом пользователе, новом пароле, а затем копирует домашний каталог старого пользователя и заменяет все экземпляры имени старого пользователя в новом домашнем каталоге новым имя пользователя
Основное различие в моем сценарии относительно строки useradd заключается в том, что passwd завершается с ошибкой в Linux Mint 18, заменяется на chpasswd. Чтобы заставить пароль работать, я создал новую строку: echo $ newuser: $ newpassword | chpasswd.
Другое отличие в том, что я не смог заставить работать --create-home, поэтому вместо этого я использовал mkdir в новой строке.
Остерегайтесь, если у вас есть огромный домашний каталог старого пользователя.
Возьми то, что тебе нужно, и оставь остальные Вы несете ответственность за любой код, который вы копируете - делайте резервные копии!
#!/bin/bash
# clone a user
# usage:
# if you named this as below then
# change to the directory and run this command
# sudo bash clone-user.sh
echo "============="
echo "this script will create a new user"
echo "based on an existing user's data"
echo
echo "You will be shown a list of users who can currently log on"
echo "Remember which user you would like to clone."
echo "You will be asked for the new user's name, their password"
echo "and the old user to clone".
echo "============="
echo
echo -n "New user's name: "
read newuser
echo -n "New user's password: "
read newpassword
echo
echo "Current users you can clone:"
echo "----"
awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd
echo
echo -n "Old user to clone: "
read olduser
echo
echo "You have selected: "
echo "----"
echo "new user: $newuser"
echo "new user password: $newpassword"
echo "old user: $olduser"
echo
olduser_GROUPS=$(id -Gn ${olduser} | sed "s/${olduser} //g" | sed "s/ ${olduser}//g" | sed "s/ /,/g")
olduser_SHELL=$(awk -F : -v name=${olduser} '(name == $1) { print $7 }' /etc/passwd)
echo "old user groups: "
echo "----"
echo $olduser_GROUPS
echo "olduser shell: "
echo $olduser_SHELL
read -rsp $'Press any key to continue or ctrl-c to exit...\n' -n1 key
useradd --groups $olduser_GROUPS --shell $olduser_SHELL $newuser
echo $newuser:$newpassword | chpasswd
read -rsp $'ready to make home direcoty -- ctrl-c to exit...\n' -n1 key
mkdir /home/$newuser
chown -R $newuser:$newuser /home/$newuser
echo
echo "Script should be done now."
echo
echo "Do you see your new users name below?"
echo
awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd
echo
echo "We are now going to copy the old user's home folder to the new user"
echo "then change ownership to the new user"
echo
read -rsp $'Ready to copy home folder --- or ctrl-c to exit...\n' -n1 key
rsync -aPv /home/$olduser/. /home/$newuser/
chown -R --from=$olduser $newuser:$newuser /home/$newuser
echo
echo "Now we are going to change the names of files and folders to the new user"
echo
grep -rlI $olduser /home/$newuser/ . | sudo xargs sed -i 's/$olduser/$newuser/g'
echo
echo "Done now."
echo
read -rsp $'Press any key to exit...\n' -n1 key
echo
echo
Спасибо всем в мире, кто помог мне с этим сценарием. Джон в Орегоне
Предложения: проверьте правильность разрешений, я попытался запустить без sudo в первый раз, сценарий довольно далеко. Allso было бы полезно grep .bashrc / .zshrc и т. Д. Для "/ home / $ olduser" и предупредить или предложить заменить на $ HOME, если он найден, это очень сбивает с толку, когда остаются ссылки на домашний каталог старого пользователя
Mike
Спасибо за создание этого. Я предлагаю изменить olduser_GROUPS как таковое, olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')которое будет правильно удалять точное имя группы пользователей, а не частичное совпадение строк. Ex. Если идентификатор пользователя равен «pi», а у пользователя есть группы, включающие «pi, gpio, spi и т. Д.», Он удалит только «pi», а не совпадет с другой частичной строкой.
Фил
1
Как вы знаете, пользователи Unix в качестве идентификаторов UID не называются. Например: mohsen, известный как 1001, или группа mohsen, известная как 1001.
Вам необходимо написать скрипт и выполнить следующие шаги:
Найти uid и gid данного пользователя
Найдите его домашний каталог.
Найдите группы, в которые входит пользователь.
Читайте /etc/suduersи состояние вашего пользователя.
Для вас очень важно различать скрытые файлы, файлы ссылок, файлы мусора и файлы, связанные с вашим собственным компьютером.
По предыдущему номеру сжимаем его домашний реж.
Создать мета-каталог в соответствии с другими спецификациями, такими как конфигурации и так далее.
scp на вашей цели.
Конечно, распаковка и использование домашнего каталога сама по себе имеет большую концепцию.
ПРИМЕЧАНИЕ: не используйте скрипт и используйте вышеприведенные заметки шаг за шагом. Даже вы можете вставить выше.
Ответы:
Этот скрипт сделает это:
Он получает группы исходного пользователя (не включая группу, совпадающую с его именем входа) и оболочку, а затем создает нового пользователя с такой же оболочкой и дополнительными группами.
Там нет проверки ошибок, это просто быстрый и грязный скрипт-клон.
источник
john
, одна из групп естьjohnny
. Вот что происходит:SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"
Вывод:john,group1ny,group3
SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g')
что позволит правильно удалить точное имя группы пользователей, а не частичное совпадение строк. Ex. Если идентификатор пользователя равен «pi», а у пользователя есть группы, включающие «pi, gpio, spi и т. Д.», Он удалит только «pi», а не совпадет с другой частичной строкой.passwd newuser
чтобы изменить пароль.Помните, что в системе оба пользователя одинаковы (один и тот же UID), поэтому один сможет войти в домашний каталог другого и изменить его по своему усмотрению.
источник
useradd
. Теперь, когда я думаю об этом, вы можете сделать это наоборот, создать нового пользователяuseradd
и затем изменить UID и GID для клонирования первого.Для Linux Mint 18 Mate
Основываясь на сценарии Майка Андерсона, я создал такой, который задает вопросы о новом пользователе, старом пользователе, новом пароле, а затем копирует домашний каталог старого пользователя и заменяет все экземпляры имени старого пользователя в новом домашнем каталоге новым имя пользователя
Основное различие в моем сценарии относительно строки useradd заключается в том, что passwd завершается с ошибкой в Linux Mint 18, заменяется на chpasswd. Чтобы заставить пароль работать, я создал новую строку: echo $ newuser: $ newpassword | chpasswd.
Другое отличие в том, что я не смог заставить работать --create-home, поэтому вместо этого я использовал mkdir в новой строке.
Остерегайтесь, если у вас есть огромный домашний каталог старого пользователя.
Возьми то, что тебе нужно, и оставь остальные Вы несете ответственность за любой код, который вы копируете - делайте резервные копии!
Спасибо всем в мире, кто помог мне с этим сценарием. Джон в Орегоне
источник
olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')
которое будет правильно удалять точное имя группы пользователей, а не частичное совпадение строк. Ex. Если идентификатор пользователя равен «pi», а у пользователя есть группы, включающие «pi, gpio, spi и т. Д.», Он удалит только «pi», а не совпадет с другой частичной строкой.Как вы знаете, пользователи Unix в качестве идентификаторов UID не называются. Например: mohsen, известный как 1001, или группа mohsen, известная как 1001.
Вам необходимо написать скрипт и выполнить следующие шаги:
/etc/suduers
и состояние вашего пользователя.scp
на вашей цели.ПРИМЕЧАНИЕ: не используйте скрипт и используйте вышеприведенные заметки шаг за шагом. Даже вы можете вставить выше.
источник
Попробуйте эту команду
источник