Как я могу создать нового системного пользователя, точную копию другого (с такими же группами, разрешениями, привилегиями и настройками), но с другим именем пользователя, паролем и домашним каталогом?
Как я могу создать нового системного пользователя, точную копию другого (с такими же группами, разрешениями, привилегиями и настройками), но с другим именем пользователя, паролем и домашним каталогом?
Ответы:
Этот скрипт сделает это:
#!/bin/bash
SRC=$1
DEST=$2
SRC_GROUPS=$(id -Gn ${SRC} | sed "s/${SRC} //g" | sed "s/ ${SRC}//g" | sed "s/ /,/g")
SRC_SHELL=$(awk -F : -v name=${SRC} '(name == $1) { print $7 }' /etc/passwd)
useradd --groups ${SRC_GROUPS} --shell ${SRC_SHELL} --create-home ${DEST}
passwd ${DEST}
Он получает группы исходного пользователя (не включая группу, совпадающую с его именем входа) и оболочку, а затем создает нового пользователя с такой же оболочкой и дополнительными группами.
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=$(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 в новой строке.
Остерегайтесь, если у вас есть огромный домашний каталог старого пользователя.
Возьми то, что тебе нужно, и оставь остальные Вы несете ответственность за любой код, который вы копируете - делайте резервные копии!
#!/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
Спасибо всем в мире, кто помог мне с этим сценарием. Джон в Орегоне
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
на вашей цели.ПРИМЕЧАНИЕ: не используйте скрипт и используйте вышеприведенные заметки шаг за шагом. Даже вы можете вставить выше.
Попробуйте эту команду
useradd -N -g gid -G gid2,gid3 -m