bash 스크립트를 통해 사용자 계정을 추가하는 올바른 방법


15

지금 사용하고있는 스크립트 코드는 다음과 같습니다.

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"

이 접근 방식은 openSuse에서 잘 작동합니다. 그러나 Ubuntu에서 생성 한 사용자 계정에는 몇 가지 문제가 있으므로 여기에서 도움을 요청하고 있습니다.

  • 터미널 프롬프트가 설정되어 있지 않습니다 ( echo $PS1아무것도 반환하지 않습니다)
  • 터미널에서 화살표 키와 탭 키가 올바르게 작동하지 않습니다
  • 암호가 작동하지 않는 것 같습니다 (이 문제가 무엇인지 여전히 확실하지는 않지만)
  • 이 새 사용자에 대해 설정된 / etc / sudoers 권한이 적용되지 않습니다

대신 adduseruseradd 대신 수동으로 사용자를 만들면 Ubuntu에 이러한 문제가 없습니다. 하지만 사용할 수 없습니다adduser openSuse (afaik)에서 . 따라서 우분투에서 작동하고 다른 배포판에서 작동하지 않는 bash 스크립트를 통해 사용자 계정을 추가하는 데비안 비 독점적 스크립트 또는 방법이 필요합니다.

마지막으로, 나는 이해하고 싶은 차이 사이 adduseruseradd. 예를 들어 어떤 기본 디렉토리가 사용되는지 알고 싶습니다. 왜냐하면 adduser그 이유 useradd가 예상대로 작동하지 않을 수 있기 때문입니다 (방금 기본값을 수락했기 때문입니다).

감사


1
차이점은 useradd 매뉴얼 페이지 ( man useradd) 와 다릅니다. useradd는 사용자를 추가하기위한 저수준 유틸리티입니다. 데비안에서 관리자는 보통 adduser (8)를 사용해야합니다.
guntbert

또한와 sudo su -c "cmd arg1 arg2"같습니다 sudo cmd arg1 arg2.
enzotib

@enzotib 감사합니다. 그것들은 openSuse가 아니기 때문에 Ubuntu와 동등한 것을 아는 것이 좋습니다. 따라서 sudo su -c "cmd arg1 arg2"작업이 필요한 모든 곳에서 작동하도록 계속 사용할 것입니다.
MountainX-for-Monica

adduserA는 스크립트를 살펴 수 있도록 차이를, 스크립트 더 긴 1000 선 이상.
enzotib

@enzotib 그래, 나는 읽고 adduser있었지만 나는 펄을 모른다. 그래서 그것은 나에게 좋은 접근법이 아닙니다.
MountainX-for-Monica

답변:


14

내 솔루션은 여기에 제공되었습니다 : /unix/82923/proper-way-to-add-a-user-account-via-bash-script by Ulrich Schwarz and Joseph R .. 내가해야 할 주요 일은 -s /bin/bash기존 useradd명령 에 추가 -p password하고 암호화 된 암호를 기대하는 제거 하는 것입니다.

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

그런 다음이 작업을 수행하십시오.

sudo chpasswd << 'END'
mynewuser:password
END

6
echo mynewuser:password | sudo chpasswd작동합니다.
Felix Rabe

10

작동합니다.

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

이것은 허용되는 답변보다 쉬운 솔루션입니다.
Steven

2

ssh 키 로그인과 비밀번호없이 서비스 계정을 자동으로 생성하는 스크립트

#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

참고로, 스크립트를 사용한 후 "sudo"는 서비스 계정에서 거의 쓸모가 없다는 것을 알았습니다. 암호가 없으면 sudo를 사용할 수 없다는 의미입니다. visudo를 통해 암호 없음 sudo를 허용하도록 구성 할 수는 있지만 스크립트에서 자동화하는 방법을 모르겠습니다. 또한 암호가없는 sudo를 가진 서비스 계정은 좋은 (보안) 아이디어가 아닙니다.
JasonS

0

스크립트에서 조건을 간단히 사용할 수 있다고 가정합니다.

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

(파일 /etc/issue이 OpenSUSE에 있는지 확인할 수 없으며 , 그렇지 않으면 해당 파일 이 존재 하는지 에 대한 조건을 지정할 수 있습니다).


이유는 단순히의 존재 테스트 adduserif command -v adduser >/dev/null; then나 좋아? 기본 배포판이 아닌 중요합니다. 또한 데비안 / 우분투 및 OpenSUSE 이외의 다른 배포판도 있습니다.
David Foerster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.