OS X पर डेमॉन अकाउंट जोड़ें


9

मैं अपने मशीन पर मैन्युअल रूप से डेमन (ओरेकल ग्रिड इंजन) स्थापित करने की कोशिश कर रहा हूं, और मैं चाहूंगा कि यह एक अलग खाते के तहत चले। ओएस एक्स पर स्थानीय मशीन में "सिस्टम" खाता जोड़ने के लिए निर्देशिका सेवाओं का उपयोग करके पसंदीदा तरीका क्या है? उनमें से बहुत सारे / etc / passwd ( _www, _dovecotइत्यादि) में मौजूद हैं, लेकिन उस फ़ाइल के शीर्ष पर टिप्पणियों का कहना है कि इसका उपयोग एकल-उपयोगकर्ता मोड को छोड़कर नहीं किया गया है।

मैं 10.6 पर चल रहा हूं, और किसी विशेष नेटवर्क खाता प्रबंधन की आवश्यकता नहीं है। मैं कुछ सरल के लिए उम्मीद कर रहा हूं - useraddलगभग हर दूसरे यूनिक्स जैसे ओएस पर बराबर ।

जवाबों:


3

dscl वह कमांड है जिसे आप ढूंढ रहे हैं।


+1 क्योंकि यह निश्चित उत्तर है। यदि आप एक GUI चाहते हैं, तो आप सर्वर टूल्स को डाउनलोड कर सकते हैं और अपनी खुद की मशीन पर कार्यसमूह प्रबंधक को अनिवार्य रूप से एक ही काम करने के लिए डाउनलोड कर सकते हैं ..
Johnnie Odom

12

मैंने पटकथा को बराबर से आज़माया , और कुछ मुद्दों को पाया। इसलिए मैंने इसे एक विशिष्ट उपयोगकर्ता के लिए और OS X Mavericks (10.9) के लिए संशोधित किया।

मैंने पाया कि Mavericks के तहत उपयोगकर्ता खाते में जोड़े गए कुछ विलुप्त रिकॉर्ड थे - एक PasswordPolicyOptions और एक प्रमाणिकता रिकॉर्ड रिकॉर्ड - जिसे अन्य अंतर्निहित सेवा उपयोगकर्ता खातों (जैसे _www) को सही ढंग से हटाने के लिए निकालने की आवश्यकता थी।

मैंने पासवर्ड और RealName रिकॉर्ड को भी समूह खाते में जोड़ा।

मैंने एक WSGI सेवा खाते के लिए एक कस्टम, एक बंद, स्क्रिप्ट बनाई। यहाँ अद्यतन स्क्रिप्ट है।

#! /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 / group फाइलें अपडेट नहीं होती हैं। मेरा मानना ​​है कि वे रिबूट पर अपडेट हैं।


1
धन्यवाद डेव। मैंने आपकी स्क्रिप्ट (नीचे) को अपनी Mavericks खोजों का उपयोग करने और एक वैकल्पिक वास्तविक नाम पैरामीटर लेने के लिए अद्यतन किया।
बराबर

12

संपादित करें: अपडेट किया गया जनवरी 9, 2014 ओएस एक्स मावेरिक्स के लिए (डेव से सुझाव है, धन्यवाद!)

मैंने ऐसा करने के लिए एक बैश स्क्रिप्ट लिखी। यह पहले अप्रयुक्त यूआईडी का उपयोग करेगा जो 500 से कम या इसके बराबर है (मैक ओएस एक्स पर डेमॉन अकाउंट यूड्स) जिसमें एक समान अप्रयुक्त जीआईडी ​​भी है।

स्क्रिप्ट को नामांकित फ़ाइल में सहेजें add_system_user.shऔर इसके साथ निष्पादन योग्य सेट करें chmod 755 add_system_user.sh

तो फिर चलिए कहते हैं कि आप एक डेमॉन / सिस्टम यूजर जोड़ना चाहते हैं जिसे par कहा जाता है । आप इस स्क्रिप्ट को ऐसे ही चलाएंगे:

sudo add_system_user.sh par

और आपको एक सिस्टम उपयोगकर्ता मिलेगा, जिसे _parअलियास किया जाता है par(आपके द्वारा अनुरोधित नाम) और इसमें एक मिलान यूआईडी और जीआईडी ​​(जैसे 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 पर मेरे लिए अच्छी तरह से काम किया। धन्यवाद!
जुबेर

2

यहां एक लेख है जो बताता है कि उपयोगकर्ता खाता बनाने के लिए dscl का उपयोग कैसे करें।

osxdaily.com लेख


धन्यवाद। आदमी पृष्ठों आपको बता क्या आदेशों का उपयोग कर सकते हैं, लेकिन आप क्या उपयोग करने के लिए खेतों और क्या उन्हें स्थापित करने के लिए पर कोई मदद नहीं देते। मैं बस दूसरे खाते से कॉन्फिग को कॉपी करने जा रहा था, लेकिन यह एक अच्छा उदाहरण देता है।
टिम येट्स

एक छिपा हुआ सिस्टम खाते के लिए, बेहतर उदाहरण के लिए कुछ मौजूदा प्रणाली खातों पर एक नज़र डालें। जैसे dscl /Local/Default -read /Users/_sshd ( dscl /Local/Default -ls /Usersआपको स्थानीय खातों की सूची मिलेगी)। नोट आप सभी विशेषता सेट करने की जरूरत नहीं है कि; GeneratedUID बेतरतीब ढंग से उत्पन्न होता है, और RECORDTYPE स्वचालित मेटाडाटा है। साथ ही, अधिकांश ओएस एक्स प्रणाली खातों एक प्राथमिक खाते का नाम अंडरस्कोर के साथ शुरू होता है, और पिछली संगतता के लिए इसके बिना एक उपनाम है; मैं अंडरस्कोर कन्वेंशन का उपयोग करने की सलाह देता हूं, लेकिन जब तक आपको आवश्यकता न हो, सादे उर्फ ​​के साथ परेशान न करें।
गॉर्डन डेविसन

2

यहाँ डेव की पटकथा है, जो भी जांच करता है कि उपयोगकर्ता / समूह इसे बनाने से पहले से मौजूद है के एक संस्करण है:

#! / Bin / श
# लिनक्स एड्यूसर कमांड के समान सेवा खाता उपयोगकर्ता बनाता है
# मौजूदा उपयोगकर्ताओं और आईडी को देखने का प्रयास करें:
# dscl -readall / उपयोगकर्ता UniqueID | सॉर्ट -nk 2

मरो () {
    इको> और 2 "$ @"
    बाहर निकलें 1
}

प्रतिध्वनि "उपयोग: सूडो $ 0 उपयोगकर्ता नाम uid realname"
गूंज "नोट: उपयोगकर्ता नाम अंडरस्कोर से शुरू नहीं होना चाहिए (यह स्क्रिप्ट द्वारा जोड़ा जाएगा)"
इको "यह जांचें कि उपयोगकर्ता मौजूद नहीं है और 1000 रेंज में मुफ्त आईडी नंबर प्राप्त करें"
echo "उदा dscl के साथ। -readall / Users UniqueID | Sort -nk 2"
गूंज ""

# जांचें कि हम सुपरसुअर हैं (यानी $ (आईडी-यू) शून्य है)
[`आईडी -यू` -के ०] || मर "यह स्क्रिप्ट रूट के रूप में चलाने के लिए की जरूरत है"

[ "$ #" -Eq 3] || मरने "त्रुटि: 3 तर्कों की आवश्यकता: उपयोगकर्ता नाम, यूआईडी और realname"

उपयोगकर्ता नाम _ = $ 1
uid _ = $ 2
realname _ = $ 3
nfs_homedir = "/ var / tmp"
user_shell = "/ usr / bin / गलत"

इको "यदि उपयोगकर्ता / समूह मौजूद है तो जाँच करना: \ c"

check_uuid = `dscl -खोज / उपयोगकर्ता UniqueID $ uid_`
check_upgid = `dscl -खोज / उपयोगकर्ता PrimaryGroupID $ uid_`
check_urn = `DSCL। -खोज / उपयोगकर्ता RecordName _ $ username_`
check_grn = `DSCL। -search / Group RecordName _ $ username_`


[$ {# check_uuid} = 0] || die "विफल! \ nERROR: गैर-अद्वितीय उपयोगकर्ता UniqueID: \ n \ n \dscl। -read / Users / _ $ username_ RecordName PrimaryGroupID RealName` \ n \ n कोई मौजूदा उपयोगकर्ता / आईडीआई नहीं देखें: dscl -readall / Users UniqueID। | सॉर्ट -nk 2 "
[$ {# check_upgid} = 0] || मर "में विफल रहा है \ n त्रुटि: गैर-अद्वितीय User PrimaryGroupID \ n \ n`dscl -पढ़ें / उपयोगकर्ताओं / _ $ username_ RecordName PrimaryGroupID RealName` \ n \ n दृश्य मौजूदा उपयोगकर्ताओं / आईडी चलाएँ: DSCL -readall / उपयोगकर्ता UniqueID |!।। तरह -nk 2 "
[$ {# Check_urn} = 0] || die "विफल! \ nERROR: गैर-अद्वितीय उपयोगकर्ता RecordName \ n \ n \dscl। -read / Users / _ $ username_ RecordName PrimaryGroupID RealName` \ n \ n कोई मौजूदा उपयोगकर्ता / आईडीआई नहीं देखें: dscl -readall / Users UniqueID | सॉर्ट -nk 2 "
[$ {# check_grn} = 0] || die "विफल! \ nERROR: गैर-अद्वितीय समूह RecordName \ n \ n`dscl। -read / Group / _ $ username_ RecordName PrimaryGroupID RealName` \ n \ n कोई मौजूदा उपयोगकर्ता / आईडीआई नहीं देखें: dscl -readall / Users UniqueID | सॉर्ट -nk 2 "

गूंज "हम जाने के लिए अच्छा है!"

# गूंज "जारी रखें (y / n)?"
# इनपुट पढ़ें_
# ["$ input_" = "y"] || मरो "जैसा तुम चाहो ..."

गूंज "बनाना उपयोगकर्ता: \ ग"

DSCL। -कार्य / समूह / _ $ उपयोगकर्ता नाम_
dscl -कार्य / समूह / _ $ उपयोगकर्ता नाम_प्राइमरीग्रुप $ uid_
DSCL। -create / Group / _ $ username_ RecordName _ $ उपयोगकर्ता नाम_ $ उपयोगकर्ता नाम
dscl -create / Group / _ $ username_ RealName "$ realname_"
dscl -पहले / समूह / _ $ username_ पासवर्ड \ *

dscl -पहले / उपयोगकर्ताओं / _ $ username_
DSCL। -create / Users / _ $ username_ NFSHomeDirectory $ nfs_homedir
dscl -पहले / उपयोगकर्ताओं / _ $ username_ पासवर्ड \ *
dscl -create / उपयोगकर्ता / _ $ username_ PrimaryGroupID $ uid_
dscl -पहले / उपयोगकर्ताओं / _ $ username_ RealName "$ realname_"
dscl -create / Users / _ $ username_ RecordName _ $ उपयोगकर्ता नाम_ $ उपयोगकर्ता नाम
dscl क्रिएट / यूजर्स / _ $ username_ UniqueID $ uid_
dscl -create / Users / _ $ username_ UserShell $ user_shell
dscl -delete / उपयोगकर्ता / _ $ उपयोगकर्ता नाम / पासवर्डपुलिसऑफिस
dscl -delete / उपयोगकर्ताओं / _ $ username_ AuthenticationAuthority

गूंज "किया!"

और नष्ट उपयोगकर्ता के लिए एक स्क्रिप्ट:

#! / Bin / श
# लिनक्स यूजरडेल कमांड के समान सेवा उपयोगकर्ता को हटाएं, लेकिन फाइलों को बरकरार रखना
# मौजूदा उपयोगकर्ताओं और आईडी को देखने का प्रयास करें:
# dscl -readall / उपयोगकर्ता UniqueID | सॉर्ट -nk 2

मरो () {
    इको> और 2 "$ @"
    बाहर निकलें 1
}

# जांचें कि हम सुपरसुअर हैं (यानी $ (आईडी-यू) शून्य है)
[`आईडी -यू` -के ०] || मर "यह स्क्रिप्ट रूट के रूप में चलाने के लिए की जरूरत है"
[ "$ #" -Eq 1] || मरने "त्रुटि: उपयोगकर्ता नाम तर्क की आवश्यकता है!"

उपयोगकर्ता नाम _ = $ 1

dscl -delete / उपयोगकर्ताओं / $ username_
dscl -delete / समूह / $ username_

गूंज "किया!"

तुम एक जादूगर हो, बहुत बहुत धन्यवाद! MacOS 10.13 में काम करता है।
दिमित्री वेरखोटुरोव 15
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.