dsclコマンドの使い方
2009.02.08
prerequisite
- Mac OS X
refs
about
- dscl
- Directory Service command line utility
LeopardではそれまでのNEXTSTEP由来のNetInfoから脱却して独自のOpen Directoryというサービスでユーザの管理や認証などを行なう。
MovableTypeでサイトを作ってる時に、管理画面から生成したファイルが、 apache権限(www)になるので、ローカルから編集しようとたとき、 パーミッションがないため、編集できないので、 回避策として、自分のユーザをwwwグループに追加する。 dsclコマンドで行なった編集は即座にシステムに反映される。
なぜwwwといったデーモン系にはwwwと_www、2つのレコード名があるのか疑問。
manページによると、コマンド(e.g. -list)の先頭のダッシュは付けても付けなくてもよいみたいだ。
インタラクティブモードで起動
$ sudo dscl
Entering interactive mode... (type "help" for commands)
>
Entering interactive mode... (type "help" for commands)
>
list コマンド
ルート直下のレコード一覧:
$dscl . -list /
AFPServer
AFPUserAliases
Aliases
AppleMetaRecord
...(以下略)
AFPServer
AFPUserAliases
Aliases
AppleMetaRecord
...(以下略)
ユーザ一覧を表示:
$dscl . -list /Users
_amavisd
_appowner
_appserver
_ard
_atsserver
...(以下略)
_amavisd
_appowner
_appserver
_ard
_atsserver
...(以下略)
グループ一覧:
$dscl . list /Groups
_amavisd
_appowner
_appserveradm
_appserverusr
_ard
_atsserver
_calendar
_carddav
_clamav
...(以下略)
_amavisd
_appowner
_appserveradm
_appserverusr
_ard
_atsserver
_calendar
_carddav
_clamav
...(以下略)
read コマンド
wwwユーザのレコードの内容を出力:
$dscl . -read /Users/www
AppleMetaNodeLocation: /Local/Default
NFSHomeDirectory: /Library/WebServer
Password: *
PrimaryGroupID: 70
RealName:
World Wide Web Server
RecordName: _www www
RecordType: dsRecTypeStandard:Users
UniqueID: 70
UserShell: /usr/bin/false
AppleMetaNodeLocation: /Local/Default
NFSHomeDirectory: /Library/WebServer
Password: *
PrimaryGroupID: 70
RealName:
World Wide Web Server
RecordName: _www www
RecordType: dsRecTypeStandard:Users
UniqueID: 70
UserShell: /usr/bin/false
wwwグループの内容確認:
$ sudo dscl . -read /Groups/www
AppleMetaNodeLocation: /Local/Default
GeneratedUID: ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000046
Password: *
PrimaryGroupID: 70
RealName:
World Wide Web Server
RecordName: _www www
RecordType: dsRecTypeStandard:Groups
AppleMetaNodeLocation: /Local/Default
GeneratedUID: ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000046
Password: *
PrimaryGroupID: 70
RealName:
World Wide Web Server
RecordName: _www www
RecordType: dsRecTypeStandard:Groups
readall コマンド
$ sudo dscl . readall /Users
AppleMetaNodeLocation: /Local/Default
GeneratedUID: FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000053
NFSHomeDirectory: /var/virusmails
Password: *
PrimaryGroupID: 83
RealName:
AMaViS Daemon
RecordName: _amavisd amavisd
RecordType: dsRecTypeStandard:Users
UniqueID: 83
UserShell: /usr/bin/false
-
AppleMetaNodeLocation: /Local/Default
GeneratedUID: FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000057
NFSHomeDirectory: /var/empty
Password: *
PrimaryGroupID: 87
RealName:
Application Owner
RecordName: _appowner appowner
RecordType: dsRecTypeStandard:Users
UniqueID: 87
UserShell: /usr/bin/false
-
(...以下省略...)
AppleMetaNodeLocation: /Local/Default
GeneratedUID: FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000053
NFSHomeDirectory: /var/virusmails
Password: *
PrimaryGroupID: 83
RealName:
AMaViS Daemon
RecordName: _amavisd amavisd
RecordType: dsRecTypeStandard:Users
UniqueID: 83
UserShell: /usr/bin/false
-
AppleMetaNodeLocation: /Local/Default
GeneratedUID: FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000057
NFSHomeDirectory: /var/empty
Password: *
PrimaryGroupID: 87
RealName:
Application Owner
RecordName: _appowner appowner
RecordType: dsRecTypeStandard:Users
UniqueID: 87
UserShell: /usr/bin/false
-
(...以下省略...)
search コマンド
$ dscl . search /Users UniqueID 70
_www UniqueID = (
70
)
_www UniqueID = (
70
)
$ dscl . search /Users RecordName www
_www RecordName = (
"_www",
www
)
_www RecordName = (
"_www",
www
)
change コマンド
あるユーザの所属グループをstaffからwwwに変更する:
$sudo dscl . change /Users/[ユーザ名] PrimaryGroupID 20 70
本当に変わったか確認:
$id [ユーザ名]
uid=501([ユーザ名]) gid=20(staff) groups=70(_www),102(com.apple.access_ssh),98(_lpadmin),101(com.apple.sharepoint.group.1),81(_appserveradm),79(_appserverusr),80(admin)
uid=501([ユーザ名]) gid=20(staff) groups=70(_www),102(com.apple.access_ssh),98(_lpadmin),101(com.apple.sharepoint.group.1),81(_appserveradm),79(_appserverusr),80(admin)
append コマンド
wwwグループにユーザを追加:
$sudo dscl . -append /Groups/_www GroupMembership [追加したいユーザ]
本当に追加されたか確認:
$ dscl . -read /Groups/_www
AppleMetaNodeLocation: /Local/Default
GeneratedUID: ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000046
GroupMembership: [追加したいユーザ]
Password: *
PrimaryGroupID: 70
RealName:
HTTP Users
RecordName: _www www
RecordType: dsRecTypeStandard:Groups
SMBSID: S-1-5-21-170
AppleMetaNodeLocation: /Local/Default
GeneratedUID: ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000046
GroupMembership: [追加したいユーザ]
Password: *
PrimaryGroupID: 70
RealName:
HTTP Users
RecordName: _www www
RecordType: dsRecTypeStandard:Groups
SMBSID: S-1-5-21-170
delete コマンド
wwwグループの[ユーザ]を削除:
$ sudo dscl . delete /Groups/_www GroupMembership [削除したい値]
create コマンド
グループ作成:
$ sudo dscl . create /Groups/munin PrimaryGroupId 4949
ユーザ作成:
$ sudo dscl . create /Users/munin UniqueId 4949
$ sudo dscl . create /Users/munin PrimaryGroupId 4949
$ sudo dscl . create /Users/munin UserShell /bin/false
$ sudo dscl . create /Users/munin NFSHomeDirectory /nohome
$ sudo dscl . create /Users/munin RealName Munin
$ sudo dscl . create /Users/munin PrimaryGroupId 4949
$ sudo dscl . create /Users/munin UserShell /bin/false
$ sudo dscl . create /Users/munin NFSHomeDirectory /nohome
$ sudo dscl . create /Users/munin RealName Munin
グループにユーザを追加:
$ sudo dscl . create /Groups/munin GroupMembership munin
hadoop ユーザーを追加する
まず以下のようにユーザーIDとグループIDは被らないようにするために現在使用中のIDを調べる。
現在使用中のグループIDを調べる:
$ sudo dscl . -list /Groups PrimaryGroupID | cut -c 32-38 | sort -rn
現在使用中のユーザーIDを調べる:
$ sudo dscl . -list /Users UniqueID | cut -c 23-28 | sort -rn
hadoop ユーザーを追加する:
$ sudo dscl . -create /Groups/_hadoop PrimaryGroupID <空いているグループID>
$ sudo dscl . -append /Groups/_hadoop RecordName hadoop
$ sudo dscl . -create /Users/_hadoop UniqueID <空いているユーザーID>
$ sudo dscl . -create /Users/_hadoop RealName "Hadoop Service"
$ sudo dscl . -create /Users/_hadoop PrimaryGroupID <空いているグループID>
$ sudo dscl . -create /Users/_hadoop NFSHomeDirectory /var/lib/hadoop
$ sudo dscl . -create /Users/_hadoop Password "*"
$ sudo dscl . -append /Users/_hadoop RecordName hadoop
$ sudo /usr/sbin/createhomedir -b -u hadoop
$ sudo dscl . -append /Groups/_hadoop RecordName hadoop
$ sudo dscl . -create /Users/_hadoop UniqueID <空いているユーザーID>
$ sudo dscl . -create /Users/_hadoop RealName "Hadoop Service"
$ sudo dscl . -create /Users/_hadoop PrimaryGroupID <空いているグループID>
$ sudo dscl . -create /Users/_hadoop NFSHomeDirectory /var/lib/hadoop
$ sudo dscl . -create /Users/_hadoop Password "*"
$ sudo dscl . -append /Users/_hadoop RecordName hadoop
$ sudo /usr/sbin/createhomedir -b -u hadoop
muninグループとユーザの作成
// muninのREADME.OSXより抜粋したdsclコマンドでのグループとユーザーの作成。
bash-3.2# dscl . create /Groups/munin PrimaryGroupId 4949
bash-3.2# dscl . create /Users/munin UniqueId 4949
bash-3.2# dscl . create /Users/munin PrimaryGroupId 4949
bash-3.2# dscl . create /Users/munin UserShell /bin/false
bash-3.2# dscl . create /Users/munin NFSHomeDirectory /nohome
bash-3.2# dscl . create /Users/munin RealName Munin
bash-3.2# dscl . create /Groups/munin GroupMembership munin
bash-3.2# dscl . -read /Users/munin
dsAttrTypeNative:PrimaryGroupId: 4949
dsAttrTypeNative:UniqueId: 4949
AppleMetaNodeLocation: /Local/Default
GeneratedUID: 2A56D7FE-00D0-4B81-BAE7-F842E675031D
NFSHomeDirectory: /nohome
RealName: Munin
RecordName: munin
RecordType: dsRecTypeStandard:Users
UserShell: /bin/false
bash-3.2# dscl . -read /Groups/munin
dsAttrTypeNative:PrimaryGroupId: 4949
AppleMetaNodeLocation: /Local/Default
GeneratedUID: F53ACCA3-2CB9-440F-84A6-E2FADC44CB9E
GroupMembership: munin
RecordName: munin
RecordType: dsRecTypeStandard:Groups
bash-3.2# dscl . create /Users/munin UniqueId 4949
bash-3.2# dscl . create /Users/munin PrimaryGroupId 4949
bash-3.2# dscl . create /Users/munin UserShell /bin/false
bash-3.2# dscl . create /Users/munin NFSHomeDirectory /nohome
bash-3.2# dscl . create /Users/munin RealName Munin
bash-3.2# dscl . create /Groups/munin GroupMembership munin
bash-3.2# dscl . -read /Users/munin
dsAttrTypeNative:PrimaryGroupId: 4949
dsAttrTypeNative:UniqueId: 4949
AppleMetaNodeLocation: /Local/Default
GeneratedUID: 2A56D7FE-00D0-4B81-BAE7-F842E675031D
NFSHomeDirectory: /nohome
RealName: Munin
RecordName: munin
RecordType: dsRecTypeStandard:Users
UserShell: /bin/false
bash-3.2# dscl . -read /Groups/munin
dsAttrTypeNative:PrimaryGroupId: 4949
AppleMetaNodeLocation: /Local/Default
GeneratedUID: F53ACCA3-2CB9-440F-84A6-E2FADC44CB9E
GroupMembership: munin
RecordName: munin
RecordType: dsRecTypeStandard:Groups
ユーザー削除(例)
$ sudo dscl . delete /Users/jenkins
$ sudo rm -rf /Users/Shared/Jenkins
$ sudo rm -rf /Users/Shared/Jenkins
関連記事はありません。

