Làm cách nào tôi có thể tạo người dùng hệ thống mới, bản sao chính xác của người khác (có cùng nhóm, quyền, đặc quyền và cài đặt), nhưng với tên người dùng, mật khẩu và thư mục chính khác nhau?
Làm cách nào tôi có thể tạo người dùng hệ thống mới, bản sao chính xác của người khác (có cùng nhóm, quyền, đặc quyền và cài đặt), nhưng với tên người dùng, mật khẩu và thư mục chính khác nhau?
Câu trả lời:
Kịch bản này sẽ làm điều đó:
#!/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}
Nó nhận được các nhóm người dùng nguồn (không bao gồm nhóm giống như đăng nhập của họ) và shell, sau đó tạo một người dùng mới có cùng nhóm và nhóm phụ.
Usage: clone-user src_user_name new_user_name
Không có lỗi kiểm tra, nó chỉ là một kịch bản nhân bản nhanh và bẩn.
john
, một trong các nhóm là johnny
. Đây là những gì xảy ra: SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"
Kết quả:john,group1ny,group3
SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g')
Điều đó sẽ xóa chính xác tên nhóm người dùng chính xác so với đối sánh chuỗi một phần. Ví dụ. Nếu Id của người dùng là 'pi' và người dùng có các nhóm bao gồm 'pi, gpio, spi, v.v.' thì nó sẽ chỉ xóa 'pi' và không khớp với một phần chuỗi khác.
passwd newuser
để sửa đổi mật khẩu.Xin lưu ý rằng hệ thống thông minh cả hai người dùng đều giống nhau (cùng UID), vì vậy một người sẽ có thể vào thư mục chính của người kia và sửa đổi theo ý muốn.
useradd
. Bây giờ tôi nghĩ về nó, bạn có thể làm theo cách khác, tạo một người dùng mới useradd
và sau đó sửa đổi UID và GID để sao chép cái đầu tiên.
Dành cho Linux Mint 18 Mate
Dựa trên kịch bản của Mike Anderson, tôi đã tạo một câu hỏi về người dùng mới, người dùng cũ, mật khẩu mới và sau đó sao chép thư mục chính của người dùng cũ và thay thế tất cả các trường hợp tên người dùng cũ trong thư mục nhà mới bằng thư mục mới tên người dùng.
Sự khác biệt chính trong tập lệnh của tôi liên quan đến dòng useradd là passwd bị lỗi trong Linux Mint 18, được thay thế bằng chpasswd. Để có được mật khẩu hoạt động, tôi đã tạo một dòng mới: echo $ newuser: $ newpassword | chpasswd.
Một sự khác biệt nữa là tôi không thể có được - làm việc tại nhà để làm việc nên tôi chỉ sử dụng mkdir trong một dòng mới thay thế.
Xem ra nếu bạn có một thư mục nhà lớn của người dùng cũ.
Lấy những gì bạn cần và để lại phần còn lại. Bạn chịu trách nhiệm cho bất kỳ mã nào bạn sao chép - tạo bản sao lưu!
#!/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
Cảm ơn tất cả mọi người trên thế giới đã giúp tôi với kịch bản này. John ở Oregon
olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')
Điều đó sẽ xóa chính xác tên nhóm người dùng trái ngược với đối sánh chuỗi một phần. Ví dụ. Nếu Id của người dùng là 'pi' và người dùng có các nhóm bao gồm 'pi, gpio, spi, v.v.' thì nó sẽ chỉ xóa 'pi' và không khớp với một phần chuỗi khác.
Như bạn đã biết, người dùng Unix không phải là tên UID, Đối với exampel: mohsen được gọi là 1001 hoặc nhóm mohsen được gọi là 1001.
Bạn phải viết một tập lệnh và thực hiện từng bước sau:
/etc/suduers
và trạng thái của người dùng của bạn.scp
vào mục tiêu của bạn.LƯU Ý: Không sử dụng tập lệnh và sử dụng các ghi chú ở trên từng bước. Thậm chí bạn có thể chèn vào ở trên.
Hãy thử lệnh này
useradd -N -g gid -G gid2,gid3 -m