Sembunyikan pengguna dari layar masuk Mac OS X Snow Leopard

25

Entah bagaimana, saya berhasil mengatur passwd untuk pengguna _postgres saya di OS saya alih-alih mengaturnya pada peran postgres yang saya miliki sebagai superuser / root. Lagi pula sejak ini, saya telah berjuang dengan pengguna yang muncul di bagian akun dan layar login, yang saya benar-benar ingin hindari. Saya telah membaca beberapa dokumen tentang ini, dan mengatur kata sandi untuk *semua yang diperlukan untuk memperbaikinya. Tetapi setelah beberapa upaya melakukan ini dengan dan tanpa dscl tidak berhasil, saya sampai pada titik di mana saya tidak tahu harus berbuat apa lagi.

Saya tidak berpikir akan sulit melakukan ini, tetapi jelas saya kehilangan sesuatu, jadi bagaimana Anda melakukan ini?

googletorp
sumber
Memiliki kata sandi untuk pengguna _postgres Anda sama sekali bukan ide yang buruk.
Hasaan Chop
1
Dokumen postgres sebenarnya merekomendasikan yang sebaliknya, dengan cara itu hanya pengguna sistem yang dapat mengakses postgres, dan ada satu kata sandi yang lebih sedikit untuk diingat / risiko keamanan.
googletorp
Sudahkah Anda mencoba menghapus dan menciptakan kembali pengguna?
Chealion
Ya, saya sudah mencobanya beberapa kali sebenarnya. Anda perlu entah bagaimana mengatur passwd ke dinonaktifkan karena tidak memiliki passwd tidak cukup. Ini adalah titik rasa sakit yang belum bisa saya atasi.
googletorp

Jawaban:

31

Metode termudah untuk menyembunyikan pengguna sistem (jika ID pengguna mereka <500) di jendela masuk adalah dengan menjalankan perintah berikut:

sudo defaults write /Library/Preferences/com.apple.loginwindow Hide500Users -bool TRUE

Atau Anda dapat secara manual menyembunyikan hanya nama pengguna dengan menjalankan

sudo defaults write /Library/Preferences/com.apple.loginwindow HiddenUsersList -array-add '_postgres'

Untuk menyembunyikan item 'Lainnya ...' dari jendela login jika perlu:

sudo defaults write /Library/Preferences/com.apple.loginwindow SHOWOTHERUSERS_MANAGED -bool FALSE
Chealion
sumber
2
Ini adalah solusi yang agak rumit dan tidak benar-benar "menyelesaikan" masalah, itu hanya menyembunyikan gejalanya. Saya memiliki banyak pengguna sistem yang berbeda untuk hal-hal seperti mysql dan yang lainnya, dan mereka tidak muncul karena kata sandi mereka ditandai sebagai '*'. Inilah yang saya coba capai untuk pengguna postgres saya. Solusi Anda akan buruk jika saya memiliki pengguna lain yang ingin saya sembunyikan, tetapi bisa masuk dengan menggunakan orang lain. Saya benar-benar ingin pergi ke root dan benar-benar memperbaiki ini alih-alih menyembunyikan masalahnya.
googletorp
1
Ini adalah jawaban yang sangat baik, dan tepat menjawab pertanyaan saya. Tetapi Anda mungkin benar bahwa itu bukan pertanyaan yang Anda ajukan.
Bill Michell
3
Bendera Hide500Users tampaknya tidak berfungsi di bawah singa lagi. Hanya dua perintah yang tersisa yang berfungsi untuk Lion
Antony
Perhatikan bahwa ini tidak akan menyembunyikan pengguna di layar boot awal jika FileVault2 aktif.
James McMahon
12
dscl . create /Users/test
dscl . create /Users/test UniqueID 420
dscl . create /Users/test PrimaryGroupID 420
dscl . create /Users/test UserShell /bin/bash
dscl . create /Users/test NFSHomeDirectory /tmp
dscl . create /Users/test RealName Test
dscl . create /Users/test Password test

Ini menciptakan pengguna yang terlihat di sysprefs / Akun.

dscl . create /Users/test Password "*"

Ini menyembunyikan pengguna. Pastikan Anda mengutip "*" atau itu tidak akan berhasil.

EDIT : Saya tidak sengaja berhasil membuat ulang situasi googletorp karena tidak dapat menyembunyikan pengguna dengan mengatur kata sandi ke "*", dan saya menemukan cara memperbaikinya. Kali ini, saya telah membuat pengguna menggunakan dsimport, seperti ini:

dsimport /dev/fd/0 /Local/Default I --template StandardUser << EOF
test:*:520:520:Test user:/Users/test:/bin/bash
EOF

Tetapi dalam perintah itu, * diambil untuk mewakili kata sandi satu karakter literal *, dan karenanyaimport menciptakan properti AuthenticationAuthority untuk pengguna dan menetapkan properti kata sandi ke hash shadow *(yang ditampilkan seperti ********dalam dscl, seperti untuk semua kata sandi). Setelah itu, mencoba mengatur kata sandi ke "*" menggunakan dscl hanya terus menetapkan kata sandi menjadi literal *, bukannya menonaktifkan kata sandi. Solusinya adalah menghapus properti yang tidak diinginkan, dan kemudian menonaktifkan kata sandi:

sudo dscl . delete /Users/test AuthenticationAuthority
sudo dscl . create /Users/test Password "*"

Ini menyembunyikan pengguna.

LaC
sumber
Alih-alih kutipan, apakah Anda mencoba melarikan diri dari bintang? dscl . -create /Users/test Password \*
Eric3
Selama dscl melihat literal "*" setelah "Kata Sandi", apapun akan berjalan.
LaC
7

Kalau-kalau Anda belum menemukan solusi yang layak (atau kalau-kalau ada orang lain menemukan pertanyaan ini dari Google), mengatur shell pengguna untuk /usr/bin/false mencegahnya masuk dan menyembunyikannya dari layar login dan dari preferensi sistem. Untuk melakukannya, gunakan baris perintah berikut:

sudo dscl . -change /Users/[username] UserShell /bin/bash /usr/bin/false

Dan untuk mengembalikan perubahan:

sudo dscl . -change /Users/[username] UserShell /usr/bin/false /bin/bash

Di mana [username]nama pengguna yang ingin Anda sembunyikan ( _postgresdalam kasus Anda saya anggap). Saya tidak tahu mengapa lebih dulu dsclmenginginkan nilai lama, tetapi itulah yang dikatakan halaman manual, dan itu berfungsi dengan baik.

zneak
sumber
1
Solusi ini sangat buruk karena menonaktifkan shell untuk pengguna itu, hal yang sangat ingin saya gunakan untuk itu. Jika saya ingin me-restart database dll.
googletorp
@googletorp: Anda masih dapat melakukannya sudo -s -u _postgresdari akun admin untuk mendapatkan shell sebagai _postgres; ini akan bekerja bahkan jika UserShellitu diatur ke /usr/bin/false. Selain itu, bukankah mengatur kata sandi menjadi "tidak ada kata sandi", seperti yang Anda coba lakukan, juga menonaktifkan akun?
zneak