OS Xにデーモンアカウントを追加する


9

自分のマシンにデーモン(Oracle Grid Engine)を手動でインストールしようとしていますが、分離されたアカウントで実行したいのですが。OS Xのローカルマシンに「システム」アカウントを追加するには、ディレクトリサービスを使用してどのような方法が推奨されますか?それらのプレンティは、/ etc / passwdファイル(中に存在する_www_dovecotなど)が、これはシングルユーザーモード以外で使用されていないこと、そのファイルの発言の先頭のコメント。

10.6で実行しており、特別なネットワークアカウント管理を必要としません。私は何か単純なものを望んでいます- useradd他のほぼすべてのUnixライクなOSに相当するものです。

回答:


3

dsclは、探しているコマンドです。


これが決定的な答えなので、+ 1。あなたはGUIをしたい場合は、...本質的に同じことを行うために自分のマシンでサーバーのツールとポイントワークグループマネージャをダウンロードすることができます
ジョニー・オドム

12

私はparからスクリプトを試しましたが、いくつかの問題が見つかりました。そのため、特定の1つのユーザーIDとOS X Mavericks(10.9)用に変更しました。

他の組み込みサービスのユーザーアカウント(_wwwなど)を正しく模倣するために削除する必要がある、Mavericksの下のユーザーアカウントに2つの無関係なレコード(PasswordPolicyOptionsおよびAuthenticationAuthorityレコード)が追加されていることがわかりました。

また、パスワードとRealNameレコードをグループアカウントに追加しました。

WSGIサービスアカウント専用のカスタムの1回限りのスクリプトを作成しました。更新されたスクリプトは次のとおりです。

#! /bin/bash
#

# Check that we are superuser (i.e. $(id -u) is zero)
if (( $(id -u) ))
then
    echo "This script needs to run as root"
    exit 1
fi

username_=wsgi
uid_=240
realname_="WSGI Daemon"

dscl . -create /Groups/_$username_
dscl . -create /Groups/_$username_ PrimaryGroupID $uid_
dscl . -create /Groups/_$username_ RecordName _$username_ $username_
dscl . -create /Groups/_$username_ RealName $realname_
dscl . -create /Groups/_$username_ Password \*

dscl . -create /Users/_$username_
dscl . -create /Users/_$username_ NFSHomeDirectory /xpt/local/apache2/wsgi/api
dscl . -create /Users/_$username_ Password \*
dscl . -create /Users/_$username_ PrimaryGroupID $uid_
dscl . -create /Users/_$username_ RealName $realname_
dscl . -create /Users/_$username_ RecordName _$username_ $username_
dscl . -create /Users/_$username_ UniqueID $uid_
dscl . -create /Users/_$username_ UserShell /usr/bin/false
dscl . -delete /Users/_$username_ PasswordPolicyOptions
dscl . -delete /Users/_$username_ AuthenticationAuthority

このスクリプトを実行した後、/ etc / passwdおよび/ etc / groupsファイルは更新されないことに注意してください。再起動時に更新されると思います。


1
デイブ、ありがとう。Mavericksの検出を使用し、オプションの実名パラメーターを受け取るようにスクリプト(下記)を更新しました。
パー

11

編集:OS X Mavericks用に2014年1月9日に更新(Daveからの提案、ありがとう!)

これを行うためのbashスクリプトを書きました。同じ未使用のgidを持つ、500(Mac OS Xではデーモンアカウントのuid)以下の最初の未使用のuidを使用します。

という名前のファイルにスクリプトを保存し、add_system_user.shで実行可能に設定しますchmod 755 add_system_user.sh

次に、parというデーモン/システムユーザーを追加するとします。このスクリプトは次のように実行します。

sudo add_system_user.sh par

そして_parpar(要求した名前)にエイリアスされ、一致するuidとgid(たとえば、499またはそれが見つかったもの)を持つシステムユーザーが呼び出されます。

スクリプトは次のとおりです。

#!/bin/bash

if (( $(id -u) )) ; then
    echo "This script needs to run as root"
    exit 1
fi

if [[ -z "$1" ]] ; then
    echo "Usage: $(basename $0) [username] [realname (optional)]"
    exit 1
fi

username=$1
realname="${2:-$username}"

echo "Adding daemon user $username with real name \"$realname\""

for (( uid = 500;; --uid )) ; do
    if ! id -u $uid &>/dev/null; then
        if ! dscl /Local/Default -ls Groups gid | grep -q [^0-9]$uid\$ ; then
          dscl /Local/Default -create Groups/_$username
          dscl /Local/Default -create Groups/_$username Password \*
          dscl /Local/Default -create Groups/_$username PrimaryGroupID $uid
          dscl /Local/Default -create Groups/_$username RealName "$realname"
          dscl /Local/Default -create Groups/_$username RecordName _$username $username

          dscl /Local/Default -create Users/_$username
          dscl /Local/Default -create Users/_$username NFSHomeDirectory /var/empty
          dscl /Local/Default -create Users/_$username Password \*
          dscl /Local/Default -create Users/_$username PrimaryGroupID $uid
          dscl /Local/Default -create Users/_$username RealName "$realname"
          dscl /Local/Default -create Users/_$username RecordName _$username $username
          dscl /Local/Default -create Users/_$username UniqueID $uid
          dscl /Local/Default -create Users/_$username UserShell /usr/bin/false

          dscl /Local/Default -delete /Users/_$username AuthenticationAuthority
          dscl /Local/Default -delete /Users/_$username PasswordPolicyOptions
          break
        fi
    fi
done

echo -e "Created system user $username (uid/gid $uid):\n"

dscl /Local/Default -read Users/_$username

echo -e "\nYou can undo the creation of this user by issuing the following commands:\n"
echo "sudo dscl /Local/Default -delete Users/_$username"
echo "sudo dscl /Local/Default -delete Groups/_$username"

これは10.9ではうまくいきました。ありがとう!
jbyler、2014

2

これは、dsclを使用してユーザーアカウントを作成する方法を説明する記事です。

osxdaily.comの記事


ありがとう。マニュアルページには、使用できるコマンドが記載されていますが、どのフィールドをどのように設定するかについてのヘルプはありません。別のアカウントから設定をコピーするだけでしたが、これは良い例です。
Tim Yates

非表示のシステムアカウントの場合、より良い例については、いくつかの既存のシステムアカウントを参照してください。例dscl /Local/Default -read /Users/_sshddscl /Local/Default -ls /Usersローカルアカウントのリストが表示されます)。すべての属性を設定する必要はないことに注意してください。GeneratedUIDはランダムに生成され、RecordTypeは自動メタデータです。また、ほとんどのOS Xシステムアカウントには、アンダースコアで始まるプライマリアカウント名と、下位互換性のためにアンダースコアなしのエイリアスがあります。アンダースコアの規則を使用することをお勧めしますが、必要でない限り、プレーンエイリアスを使用しないでください。
Gordon Davisson、

2

次に、Daveのスクリプトのバージョンを示します。これは、作成する前にユーザー/グループが存在するかどうかもチェックします。

#!/ bin / sh
#Linux adduserコマンドと同様のサービスアカウントユーザーを作成
#既存のユーザーとIDを表示するには、次を試してください:
#dscl。-readall / Users UniqueID | ソート-nk 2

死ぬ(){
    エコー>&2 "$ @"
    1番出口
}

echo "使用法:sudo $ 0ユーザー名uid実名"
echo "注:ユーザー名はアンダースコアで始めるべきではありません(スクリプトによって追加されます)"
echo "ユーザーが存在しないことを確認し、1000の範囲の無料のID番号を取得します"
echo "例:dscl。-readall / Users UniqueID | sort -nk 2"
エコー ""

#スーパーユーザーであることを確認します(つまり、$(id -u)はゼロです)
[`id -u` -eq 0] || 「このスクリプトはrootとして実行する必要があります」

["$#" -eq 3] || 「エラー:3つの引数が必要です:ユーザー名、UID、実名」

username _ = $ 1
uid _ = $ 2
realname _ = $ 3
nfs_homedir = "/ var / tmp"
user_shell = "/ usr / bin / false"

echo "ユーザー/グループが存在するかどうかを確認しています:\ c"

check_uuid = `dscl。-search / Users UniqueID $ uid_`
check_upgid = `dscl。-search / Users PrimaryGroupID $ uid_`
check_urn = `dscl。-search / Users RecordName _ $ username_`
check_grn = `dscl。-search / Groups RecordName _ $ username_`


[$ {#check_uuid} = 0] || 「失敗しました!\ nエラー:一意でないユーザーUniqueID:\ n \ n`dscl。-read / Users / _ $ username_ RecordName PrimaryGroupID RealName` \ n \ n既存のユーザー/ IDを表示するには、dsclを実行します。-readall / Users UniqueID |並べ替え-nk 2 "
[$ {#check_upgid} = 0] || 「失敗しました!\ nエラー:一意でないユーザーPrimaryGroupID \ n \ n`dscl。-read / Users / _ $ username_ RecordName PrimaryGroupID RealName` \ n \ n既存のユーザー/ IDを表示するには、次のコマンドを実行します:dscl。-readall / Users UniqueID | sort -nk 2 "
[$ {#check_urn} = 0] || 「失敗しました!\ nエラー:一意でないユーザーRecordName \ n \ n`dscl。-read / Users / _ $ username_ RecordName PrimaryGroupID RealName` \ n \ n既存のユーザー/ IDを表示するには、次のコマンドを実行します:dscl。-readall / Users UniqueID | sort -nk 2 "
[$ {#check_grn} = 0] || 「失敗しました!\ nエラー:一意でないグループRecordName \ n \ n`dscl。-read / Groups / _ $ username_ RecordName PrimaryGroupID RealName` \ n \ n既存のユーザー/ IDを表示するには、次のコマンドを実行します:dscl。-readall / Users UniqueID | sort -nk 2 "

エコー "私たちは行く準備ができています!"

#echo "続行(y / n)?"
#input_を読み込む
#["$ input_" = "y"] || 「あなたが望むように...」死ぬ

echo "ユーザーを作成しています:\ c"

dscl。-create / Groups / _ $ username_
dscl。-create / Groups / _ $ username_ PrimaryGroupID $ uid_
dscl。-create / Groups / _ $ username_ RecordName _ $ username_ $ username_
dscl。-create / Groups / _ $ username_ RealName "$ realname_"
dscl。-create / Groups / _ $ username_ Password \ *

dscl。-create / Users / _ $ username_
dscl。-create / Users / _ $ username_ NFSHomeDirectory $ nfs_homedir
dscl。-create / Users / _ $ username_ Password \ *
dscl。-create / Users / _ $ username_ PrimaryGroupID $ uid_
dscl。-create / Users / _ $ username_ RealName "$ realname_"
dscl。-create / Users / _ $ username_ RecordName _ $ username_ $ username_
dscl。-create / Users / _ $ username_ UniqueID $ uid_
dscl。-create / Users / _ $ username_ UserShell $ user_shell
dscl。-delete / Users / _ $ username_ PasswordPolicyOptions
dscl。-delete / Users / _ $ username_ AuthenticationAuthority

エコー "完了!"

そして、ユーザーを削除するスクリプト:

#!/ bin / sh
#Linux userdelコマンドと同様のサービスユーザーを削除しますが、ファイルはそのまま残します
#既存のユーザーとIDを表示するには、次を試してください:
#dscl。-readall / Users UniqueID | ソート-nk 2

死ぬ(){
    エコー>&2 "$ @"
    1番出口
}

#スーパーユーザーであることを確認します(つまり、$(id -u)はゼロです)
[`id -u` -eq 0] || 「このスクリプトはrootとして実行する必要があります」
["$#" -eq 1] || 「エラー:ユーザー名引数が必要です!」

username _ = $ 1

dscl。-delete / Users / $ username_
dscl。-delete / Groups / $ username_

エコー "完了!"

あなたはマジシャンです、どうもありがとう!macOS 10.13で動作します。
Dmitry Verkhoturov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.