#!/bin/bash
#com.cocolog-nifty.quicktimer.icefloe
#設定するユーザーID
#学籍や社員番号があれば関連づけるのも有効だけど
#セキュリティ上はユーザーと紐づかない番号が推奨
STR_SET_UID="555"
#ユーザー名ショート
STR_USER_NAME="quick_timer"
#ユーザー名フル
STR_USER_FULLNAME="QuickTimer"
#グループID
STR_GID="20"
#シェル
STR_SHELL_PATH="/bin/zsh"
#パスワード
STR_PASSWORD="1234"
#パスワードヒント
STR_HINT="初期パスワードは書類に記載されています"
#ホームパス
STR_HOME_PATH="/Users/$STR_USER_NAME"
#アイコンパス
STR_PICTURE_PATH="/Library/User Pictures/Sports/Target.heic"
#################################################
###管理者インストールしているか?チェック
#################################################
USER_WHOAMI=$(/usr/bin/whoami)
/bin/echo "実行ユーザー(whoami): $USER_WHOAMI"
if [ "$USER_WHOAMI" != "root" ]; then
/bin/echo "このスクリプトを実行するには管理者権限が必要です。"
/bin/echo "sudo で実行してください"
### path to me
SCRIPT_PATH="${BASH_SOURCE[0]}"
/bin/echo "/usr/bin/sudo \"$SCRIPT_PATH\""
/bin/echo "↑を実行してください"
exit 1
else
###実行しているユーザー名
CONSOLE_USER=$(/bin/echo "show State:/Users/ConsoleUser" | /usr/sbin/scutil | /usr/bin/awk '/Name :/ { print $3 }')
/bin/echo "コンソールユーザー(scutil): $CONSOLE_USER"
###実行しているユーザー名
HOME_USER=$(/bin/echo "$HOME" | /usr/bin/awk -F'/' '{print $NF}')
/bin/echo "実行ユーザー(HOME): $HOME_USER"
###logname
LOGIN_NAME=$(/usr/bin/logname)
/bin/echo "ログイン名(logname): $LOGIN_NAME"
###UID
USER_NAME=$(/usr/bin/id -un)
/bin/echo "ユーザー名(id): $USER_NAME"
###STAT
STAT_USR=$(/usr/bin/stat -f%Su /dev/console)
/bin/echo "STAT_USR(console): $STAT_USR"
fi
########################################
/bin/echo "ユーザーIDの重複チェック"
########################################
TEXT_RESULT=$(/usr/bin/dscl localhost -list /Local/Default/Users UniqueID)
#リストにして
DEFAULT_IFS=$IFS
IFS=$'\n'
read -d '\n' -r -a LIST_USER <<<"$TEXT_RESULT"
IFS=$DEFAULT_IFS
#総当たりで調べます
for ITEM_LIST in "${LIST_USER[@]}"; do
#ユーザーが存在するか?
if [[ $ITEM_LIST == *"$STR_SET_UID"* ]]; then
TEXT_USER_INFO=$ITEM_LIST
fi
done
#ユーザーが発見された場合
if [ -z "$TEXT_USER_INFO" ]; then
/bin/echo "未設定ですので処理を開始します"
else
/bin/echo "ユーザー:" "$TEXT_USER_INFO"
/bin/echo "$STR_SET_UID""ユーザーがいるので処理を終了します"
exit 1
fi
########################################
/bin/echo "ユーザーアカウント作成"
########################################
/usr/bin/sudo /usr/sbin/sysadminctl -addUser "$STR_USER_NAME" -fullName "$STR_USER_FULLNAME" -UID "$STR_SET_UID" -GID "$STR_GID" -shell "$STR_SHELL_PATH" -home "$STR_HOME_PATH" -picture "$STR_PICTURE_PATH" -password "$STR_PASSWORD" -hint "$STR_HINT" -admin
########################################
/bin/echo "パスワードリセット"
########################################
##ルートで処理する場合(非推奨)
## /usr/bin/printf "ルートパスワード" | /usr/bin/sudo /usr/bin/pwpolicy -a root -u "$STR_USER_NAME" -setpolicy "newPasswordRequired=1"
##初回ログイン時にパスワード設定
##macOS14.3で修正された
/usr/bin/sudo /usr/bin/pwpolicy -u "$STR_USER_NAME" -setpolicy "newPasswordRequired=1"
########################################
/bin/echo "ユーザーフォルダ作成"
########################################
/bin/mkdir -p "$STR_HOME_PATH"
# 規定は700 アパッチ運用ある場合は755
/bin/chmod 755 "$STR_HOME_PATH"
/bin/chmod +a "group:everyone deny delete" "$STR_HOME_PATH"
#ユーザーテンプレートをコピー
/usr/bin/ditto "/Library/User Template/Japanese.lproj/.CFUserTextEncoding" "$STR_HOME_PATH/.CFUserTextEncoding"
########################################
/bin/echo "サブフォルダ作成"
########################################
LIST_SUB_DIR_NAME=("Library" "Desktop" "Documents" "Downloads" "Movies" "Music" "Pictures" "Public" "Groups" "Developer" "Sites" "Applications" "bin")
for ITEM_DIR_NAME in "${LIST_SUB_DIR_NAME[@]}"; do
STR_CHK_PATH="$STR_HOME_PATH/${ITEM_DIR_NAME}"
/bin/mkdir -p "$STR_CHK_PATH"
/bin/chmod 700 "$STR_CHK_PATH"
/bin/chmod +a "group:everyone deny delete" "$STR_CHK_PATH"
#localized生成
/usr/bin/touch "$STR_CHK_PATH/.localized"
done
########################################
/bin/echo "Library サブフォルダ作成 "
########################################
LIST_SUB_DIR_NAME=("Compositions" "PreferencePanes" "Application Support" "Favorites" "Preferences" "Assistants" "FontCollections" "Printers" "Fonts" "Screen Savers" "Autosave Information" "Input Methods" "Services" "Caches" "Internet Plug-Ins" "Sounds" "ColorPickers" "Keyboard Layouts" "Spelling" "Colors" "Logs" "Group Containers" "Managed Items" "Managed Items/My Applications" "Managed Items/My Network" "Managed Items/Documents" "Audio" "Audio/MIDI Drivers" "Audio/Plug-Ins/Components" "Audio/Plug-Ins/Digidesign" "Audio/Plug-Ins/VST" "Audio/Sounds/Alerts" "Audio/Sounds/Banks")
for ITEM_DIR_NAME in "${LIST_SUB_DIR_NAME[@]}"; do
STR_CHK_PATH="$STR_HOME_PATH/Library/${ITEM_DIR_NAME}"
/bin/mkdir -p "$STR_CHK_PATH"
/bin/chmod 700 "$STR_CHK_PATH"
/bin/chmod +a "group:everyone deny delete" "$STR_CHK_PATH"
done
##可視にする場合
/usr/bin/chflags nohidden "/Users/$CONSOLE_USER/Library"
/usr/bin/SetFile -a v "/Users/$CONSOLE_USER/Library"
#不可視にする場合
# /usr/bin/chflags hidden "/Users/$CONSOLE_USER/Library"
# /usr/bin/SetFile -a V "/Users/$CONSOLE_USER/Library"
# binは不可視にする
/usr/bin/chflags hidden "/Users/$CONSOLE_USER/bin"
/usr/bin/SetFile -a V "/Users/$CONSOLE_USER/bin"
#ユーザーテンプレートをコピー
/usr/bin/ditto "/Library/User Template/Japanese.lproj/Library/FontCollections" "$STR_HOME_PATH/Library/FontCollections"
/usr/bin/ditto "/Library/User Template/Japanese.lproj/Library/Preferences" "$STR_HOME_PATH/Library/Preferences"
########################################
/bin/echo "Public サブフォルダ作成 "
########################################
/bin/chmod 755 "$STR_HOME_PATH/Public"
/bin/mkdir -p "$STR_HOME_PATH/Public/Drop Box"
/bin/chmod 733 "$STR_HOME_PATH/Public/Drop Box"
/bin/chmod +a "group:everyone deny delete" "$STR_HOME_PATH/Public/Drop Box"
/bin/chmod +a "user:$STR_USER_NAME allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,file_inherit,directory_inherit" "$STR_HOME_PATH/Public/Drop Box"
/usr/bin/touch "$STR_HOME_PATH/Public/Drop Box/.localized"
########################################
/bin/echo "アクセス権 オーナー指定"
########################################
/usr/sbin/chown -Rf "$STR_USER_NAME" "$STR_HOME_PATH"
/usr/bin/chgrp -Rf staff "$STR_HOME_PATH"
##
########################################
/bin/echo "Sites サブフォルダ作成 "
#Sites以下は削除可能でOK
########################################
# 規定は700 アパッチ運用ある場合は755
/bin/chmod 755 "$STR_HOME_PATH/Sites"
LIST_SUB_DIR_NAME=("images" "css" "js" "Streaming")
for ITEM_DIR_NAME in "${LIST_SUB_DIR_NAME[@]}"; do
STR_CHK_PATH="$STR_HOME_PATH/Sites/${ITEM_DIR_NAME}"
/bin/mkdir -p "$STR_CHK_PATH"
/bin/chmod 755 "$STR_CHK_PATH"
/usr/bin/chgrp -Rf _www "$STR_CHK_PATH"
done
/bin/chmod +a "group:_qtss allow read,write,execute" "$STR_HOME_PATH/Sites/Streaming"
exit 0