blob: bb3fc0553e7e79e1408086a41c5debcb64614532 (
plain) (
tree)
|
|
#!/bin/sh
set_authorized_keys(){
# Add authorized_keys for a user.
# $1 = username
# $2 = newline-separated string of authorized keys
_sak_homedir=$(eval echo "~${1}")
_sak_group=$(getent passwd "$1" | awk -F: '{ print $4}')
# Create authorized keys file and set permissions.
install_directory -o "$1" -g "$_sak_group" -m 0700 "${_sak_homedir}/.ssh"
[ -f "${_sak_homedir}/.ssh/authorized_keys" ] || touch "${_sak_homedir}/.ssh/authorized_keys"
chown "$1" "${_sak_homedir}/.ssh/authorized_keys"
chgrp "$_sak_group" "${_sak_homedir}/.ssh/authorized_keys"
chmod 600 "${_sak_homedir}/.ssh/authorized_keys"
printf '%s\n' "${2}" > "${_sak_homedir}/.ssh/authorized_keys"
log "added authorized_keys for ${1}:"$'\n'"$2"
}
set_password(){
# Set password for a local user.
# $1 = username
# $2 = password
printf '%s\n%s\n' "$2" "$2" | passwd "$1" > /dev/null
}
add_user(){
# Add a local user if it doesn't exist.
# options: mostly same as `pw useradd`
# $1 = username
_bcau_homedir_mode=700
_bcau_create_homedir=
_bcau_homedir=
_bcau_comment=
_bcau_shell=/sbin/nologin
_bcau_pgroup=
_bcau_grouplist=
_bcau_uid=
_bcau_password=
while getopts c:d:G:g:mM:p:s:u: _bcau_opt; do
case $_bcau_opt in
c) _bcau_comment=$OPTARG ;;
d) _bcau_homedir=$OPTARG ;;
G) _bcau_grouplist=$OPTARG ;;
g) _bcau_pgroup=$OPTARG ;;
M) _bcau_homedir_mode=$OPTARG ;;
m) _bcau_create_homedir=true ;;
p) _bcau_password=$OPTARG ;;
s) _bcau_shell=$OPTARG ;;
u) _bcau_uid=$OPTARG ;;
esac
done
shift $((OPTIND - 1))
_bcau_username=$1
: ${_bcau_homedir:="/home/${_bcau_username}"}
: ${_bcau_comment:="${_bcau_username} user"}
case $BOXCONF_OS in
freebsd)
if pw usershow "$_bcau_username" > /dev/null 2>&1; then
log "local user ${_bcau_username} already exists"
return 0
fi
pw useradd \
-n "$_bcau_username" \
-c "$_bcau_comment" \
-s "$_bcau_shell" \
-M "$_bcau_homedir_mode" \
-d "$_bcau_homedir" \
${_bcau_create_homedir:+-m} \
${_bcau_grouplist:+-G ${_bcau_grouplist}} \
${_bcau_pgroup:+-g ${_bcau_pgroup}} \
${_bcau_uid:+-u ${_bcau_uid}}
log "added local user ${_bcau_username}"
;;
*)
die "add_user unimplemented for ${BOXCONF_OS}"
;;
esac
if [ -n "${_bcau_password}" ]; then
set_password "$_bcau_user" "$_bcau_password"
fi
}
add_group(){
# Add a local group if it doesn't exist.
# options: mostly same as `pw groupadd`
# $1 = groupname
_bcag_gid=
while getopts g: _bcag_opt; do
case $_bcag_opt in
g) _bcag_gid=$OPTARG ;;
esac
done
shift $((OPTIND - 1))
_bcag_groupname=$1
case $BOXCONF_OS in
freebsd)
if pw groupshow "$_bcag_groupname" > /dev/null 2>&1; then
log "local group ${_bcag_groupname} already exists"
return 0
fi
pw groupadd -n "$_bcag_groupname" ${_bcag_gid:+-g ${_bcag_gid}}
log "added local group ${_bcag_groupname}"
;;
*)
die "add_group unimplemented for ${BOXCONF_OS}"
;;
esac
}
|