Người dùng Clone Linux (người dùng sao chép, dựa trên người khác)


13

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?


Linux không có bất kỳ cách thức kinh điển nào, Bạn phải viết một kịch bản ....
Tiếng Ba Tư

2
Không có sự khác biệt một khi lệnh, script hoặc howto :) Câu hỏi là làm thế nào để làm điều đó :)
Sfisioza

Vì vậy, tôi trả lời bạn ...
tiếng Ba Tư

Câu trả lời:


9

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.


1
Có, thú vị nhưng nhanh và bẩn: sẽ thất bại nếu tên đăng nhập là tiền tố hoặc hậu tố của bất kỳ tên nhóm nào. Ví dụ, đăng nhập là 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
Stéphane Gourichon

Cảm ơn vì đã tạo ra kịch bản này. Tôi khuyên bạn nên thay đổi SRC_GROUPS như vậy 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.
Phil

5
  • Chỉnh sửa / etc / passwd và sao chép dòng của người dùng mà bạn muốn có bản sao chính xác. Sửa đổi tên đăng nhập, tên thật và thư mục chính.
  • Chỉnh sửa / etc / bóng và một lần nữa nhân đôi dòng của người dùng ban đầu. Sửa đổi tên đăng nhập.
  • Cuối cùng thực hiện 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.


Đây gần như chắc chắn là cách đơn giản nhất. Tuy nhiên, cũng có thể là một ý tưởng tốt để sửa đổi UID nếu bạn không có ý định cho họ thực sự là cùng một người dùng ....
Wildcard

1
@Wildcard, nhưng sau đó sẽ không phải là một bản sao, nó sẽ là một người dùng mới và nhiệm vụ đó có thể được thực hiện một cách đơn giả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 useraddvà sau đó sửa đổi UID và GID để sao chép cái đầu tiên.
YoMismo

3

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


Gợi ý: kiểm tra quyền chính xác, tôi đã thử chạy mà không sudo lần đầu tiên, tập lệnh trở nên khá xa. Allso sẽ là hữu ích để grep .bashrc / zshrc vv cho "/ home / $ olduser" và cảnh báo hoặc cung cấp để thay thế với $ HOME nếu tìm thấy, nó rất khó hiểu khi tham chiếu đến thư mục home của người dùng cũ vẫn
Mike

Cảm ơn vì đã tạo ra điều này. Tôi khuyên bạn nên thay đổi olduser_GROUPS như vậy 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.
Phil

1

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:

  1. Tìm uid và gid của người dùng đã cho
  2. Tìm thư mục nhà của nó.
  3. Tìm nhóm người dùng là thành viên của họ.
  4. Đọc /etc/suduersvà trạng thái của người dùng của bạn.
  5. Điều rất quan trọng đối với bạn là phân biệt giữa các tệp ẩn, tệp liên kết, tệp rác và các tệp liên quan đến máy gốc của bạn.
  6. Theo số trước nén nhà của nó.
  7. Đặt một meta dir theo thông số kỹ thuật khác, chẳng hạn như cấu hình, v.v.
  8. scp vào mục tiêu của bạn.
  9. Tất nhiên, giải nén và sử dụng dir nhà là bản thân nó có một khái niệm lớ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.


-2

Hãy thử lệnh này

useradd -N -g gid -G gid2,gid3 -m

1
Đó không phải là câu trả lời.Poster muốn sao chép người dùng.
Tiếng Ba Tư

Mã này đã bị đánh cắp mà không có liên kết và mô tả!
kyb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.