Як я можу створити нового користувача системи, точну копію іншого (з тими ж групами, дозволами, привілеями та налаштуваннями), але з різними іменами користувача, паролем та домашнім каталогом?
Як я можу створити нового користувача системи, точну копію іншого (з тими ж групами, дозволами, привілеями та налаштуваннями), але з різними іменами користувача, паролем та домашнім каталогом?
Відповіді:
Цей сценарій зробить це:
#!/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')
який належним чином видалить точне ім'я групи користувачів на відміну від часткового збігу рядків. Вих. Якщо ідентифікатор користувача "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')
що дозволить належним чином видалити точне ім’я групи користувачів на відміну від часткового збігу рядків. Вих. Якщо ідентифікатор користувача "pi", а у користувача є групи, включаючи "pi, gpio, spi тощо", він видалить лише "pi", а не інші часткові рядкові збіги.
Як відомо, користувачі Unix як UID не називають, для Exampel: mohsen, відомий як 1001, або mohsen групи, відомий як 1001.
Ви повинні написати сценарій і виконувати крок за кроком наступні кроки:
/etc/suduers
та стан вашого користувача.scp
на вашу ціль.ПРИМІТКА. Не використовуйте сценарій і не використовуйте вищезазначені примітки крок за кроком. Навіть ви можете вставити вище.
Спробуйте цю команду
useradd -N -g gid -G gid2,gid3 -m