Cách thích hợp để thêm tài khoản người dùng thông qua bash script


15

Đây là mã script tôi đang sử dụng:

getent group $MYGROUP
if [ $? -ne 0 ] ; then
    sudo su -c "groupadd $MYGROUP"
fi
sudo su -c "useradd mynewuser -p mypassword -m -g $PRIMARYGRP -G $MYGROUP"

Cách tiếp cận này hoạt động tốt trên openSuse. Nhưng có một số vấn đề với tài khoản người dùng mà nó tạo ra trên Ubuntu nên tôi đang tìm kiếm sự giúp đỡ ở đây.

  • dấu nhắc thiết bị đầu cuối không được đặt ( echo $PS1không trả về gì)
  • các phím mũi tên và phím tab không hoạt động chính xác trong thiết bị đầu cuối
  • mật khẩu dường như không hoạt động (mặc dù tôi vẫn chưa rõ chính xác vấn đề này là gì)
  • quyền / etc / sudoers được đặt cho người dùng mới này không được tôn trọng

Thay vào đó, nếu tôi tự tạo người dùng bằng adduser(thay vì useradd), tôi không gặp phải những vấn đề này trên Ubuntu. Nhưng tôi không thể sử dụng addusertrên openSuse (afaik). Do đó, tôi cần một tập lệnh hoặc phương pháp không độc quyền của Debian để thêm tài khoản người dùng thông qua tập lệnh bash của tôi hoạt động trên Ubuntu (và không ngừng hoạt động trên các bản phát hành khác).

Cuối cùng, tôi muốn hiểu sự khác biệt giữa adduseruseradd. Ví dụ, tôi muốn biết thư mục bộ xương nào được sử dụng bởi adduservì đó có thể là lý do useraddkhông hoạt động như mong đợi (vì tôi chỉ chấp nhận mặc định).

Cảm ơn


1
Về sự khác biệt: từ trang useradd man ( man useradd): useradd là một tiện ích cấp thấp để thêm người dùng. Trên Debian, quản trị viên thường nên sử dụng adduser (8) thay thế.
guntbert

Ngoài ra, sudo su -c "cmd arg1 arg2"là tương đương với sudo cmd arg1 arg2.
enzotib

@enzotib cảm ơn. Thật tốt khi biết những thứ này tương đương trên Ubuntu vì chúng không có trên openSuse. Do đó, tôi sẽ tiếp tục sử dụng sudo su -c "cmd arg1 arg2"để nó hoạt động ở mọi nơi tôi cần.
MountainX-for-Monica

adduserlà một tập lệnh perl dài hơn 1000 dòng, vì vậy để biết sự khác biệt, bạn có thể xem tập lệnh.
enzotib

@enzotib Vâng, tôi đã đọc addusernhưng tôi không biết perl. Vì vậy, đó không phải là một cách tiếp cận tốt cho tôi.
MountainX-for-Monica

Câu trả lời:


14

Giải pháp của tôi đã được cung cấp tại đây: /unix/82923/proper-way-to-add-a-user-account-via-bash-script của Ulrich SchwarzJoseph R .. Điều chính tôi phải làm là thêm -s /bin/bashvào useraddlệnh hiện có của mình và xóa -p passwordmật khẩu được mã hóa.

sudo su -c "useradd mynewuser -s /bin/bash -m -g $PRIMARYGRP -G $MYGROUP"

Sau đó, làm điều này:

sudo chpasswd << 'END'
mynewuser:password
END

6
echo mynewuser:password | sudo chpasswdlàm việc quá
Felix Rabe

10

Điều này sẽ làm việc.

sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | sudo chpasswd

Đây là một giải pháp dễ dàng hơn câu trả lời được chấp nhận.
Steven

2

tập lệnh của tôi tự động xây dựng một tài khoản dịch vụ với thông tin đăng nhập khóa ssh và không có mật khẩu

#add service group/user
addgroup service-runner
useradd devops-service --create-home --shell /bin/bash --groups service-runner
#gpasswd -a devops-service sudo #allowing sudo requires password, and not a good idea for a service account.
mkdir /home/devops-service/.ssh
chmod 700 /home/devops-service/.ssh
cat devops-service@v2-20150312.pub >> /home/devops-service/.ssh/authorized_keys
chown devops-service:devops-service /home/devops-service -R

fyi, sau khi sử dụng tập lệnh của tôi, tôi thấy rằng "sudo" khá vô dụng với tài khoản dịch vụ, vì không có mật khẩu có nghĩa là nó không thể sử dụng sudo. Bạn có thể định cấu hình nó để cho phép sudo không có mật khẩu thông qua visudo nhưng tôi không biết cách tự động hóa nó trong tập lệnh. Ngoài ra, có lẽ một tài khoản dịch vụ không có mật khẩu sudo không phải là một ý tưởng (bảo mật) tốt.
tên gọi là Jasons

0

Tôi cho rằng bạn chỉ có thể sử dụng một điều kiện trong kịch bản của mình, đại loại như

if grep -q 'Ubuntu\|Debian' /etc/issue; then
    adduser .....
else
    useradd .....
fi

(không thể xác minh nếu tệp /etc/issuecó mặt trên OpenSUSE, nếu không bạn có thể đặt điều kiện cho sự tồn tại của tệp đó).


Tại sao không chỉ đơn giản là kiểm tra sự tồn tại của adduservới if command -v adduser >/dev/null; thenhoặc thích? Đó là điều duy nhất quan trọng và không phải là các bản phân phối cơ bản. Ngoài ra, còn có các bản phân phối khác ngoài Debian / Ubuntu và OpenSUSE.
David Foerster
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.