Ẩn người dùng khỏi màn hình đăng nhập Mac OS X Snow Leopard


25

Bằng cách nào đó, tôi đã quản lý để đặt mật khẩu cho người dùng _postgres của mình trên HĐH thay vì đặt nó trên vai trò postgres mà tôi có với tư cách là siêu người dùng / root của mình. Dù sao, vì điều này, tôi đã phải vật lộn với người dùng đó xuất hiện trong phần tài khoản và màn hình đăng nhập, điều mà tôi thực sự muốn tránh. Tôi đã đọc qua một số tài liệu về điều này và đặt mật khẩu thành *tất cả những gì cần thiết để khắc phục điều này. Nhưng sau nhiều lần thử làm điều này có và không có dscl nhưng không có kết quả, tôi đã đến một điểm mà tôi không biết phải làm gì nữa.

Tôi đã không nghĩ rằng việc này thậm chí còn khó khăn, nhưng rõ ràng tôi đang thiếu một cái gì đó, vậy làm thế nào để bạn làm điều này?


Có một mật khẩu cho người dùng _postgres của bạn không phải là một ý tưởng đặc biệt tồi.
Hasaan Chop

1
Các tài liệu postgres thực sự khuyến nghị điều ngược lại, theo cách đó chỉ người dùng hệ thống mới có thể truy cập postgres và có một mật khẩu ít hơn để ghi nhớ / rủi ro bảo mật.
googletorp

Bạn đã thử xóa và tạo lại người dùng?
Chealion

Vâng, tôi đã thử điều đó một vài lần. Bạn cần bằng cách nào đó đặt passwd thành vô hiệu hóa vì không có passwd là không đủ. Đây là điểm đau tôi không thể vượt qua.
googletorp

Câu trả lời:


31

Phương pháp đơn giản nhất để ẩn người dùng hệ thống (nếu ID người dùng của họ <500) trong cửa sổ đăng nhập là chạy lệnh sau:

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

Ngoài ra, bạn có thể ẩn tên người dùng bằng cách chạy

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

Để ẩn mục 'Khác ...' khỏi cửa sổ đăng nhập nếu cần:

sudo defaults write /Library/Preferences/com.apple.loginwindow SHOWOTHERUSERS_MANAGED -bool FALSE

2
Đây là một giải pháp hơi khó và không thực sự "giải quyết" vấn đề, nó chỉ che giấu các triệu chứng. Tôi có rất nhiều người dùng hệ thống khác nhau cho những thứ như mysql và whatnot, và họ không hiển thị vì mật khẩu của họ được đánh dấu là '*'. Đây là những gì tôi đang cố gắng thực hiện cho người dùng postgres của mình. Giải pháp của bạn sẽ rất tệ nếu tôi có những người dùng khác mà tôi muốn ẩn, nhưng có thể đăng nhập bằng cách sử dụng những người khác. Tôi thực sự muốn đi đến root và thực sự khắc phục điều này thay vì che giấu vấn đề.
googletorp

1
Đây là một câu trả lời tuyệt vời, và trả lời chính xác câu hỏi của tôi. Nhưng bạn có thể đúng rằng đó không chính xác là câu hỏi bạn đã hỏi.
Bill Michell

3
Cờ Hide500Users dường như không còn hoạt động dưới sư tử nữa. Chỉ có hai lệnh còn lại hoạt động cho Lion
Antony

Lưu ý rằng điều này sẽ không ẩn người dùng trên màn hình khởi động ban đầu nếu bạn bật FileVault2.
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

Điều này tạo ra một người dùng có thể nhìn thấy trong sysprefs / Tài khoản.

dscl . create /Users/test Password "*"

Điều này che giấu người dùng. Hãy chắc chắn rằng bạn trích dẫn "*" nếu không nó sẽ hoạt động.

EDIT : Tôi đã vô tình quản lý để tạo lại tình huống của googletorp về việc không thể che giấu người dùng bằng cách đặt mật khẩu của mình thành "*" và tôi đã khám phá cách khắc phục nó. Lần này, tôi đã tạo một người dùng bằng dsimport, như thế này:

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

Nhưng trong lệnh đó, * được dùng để thể hiện mật khẩu một ký tự bằng chữ *và vì vậy dsimport tạo một thuộc tính xác thực cho người dùng và đặt thuộc tính mật khẩu thành hàm băm của *(hiển thị như ********trong dscl, như đối với tất cả mật khẩu). Sau đó, cố gắng đặt mật khẩu thành "*" bằng cách sử dụng dscl, hãy tiếp tục đặt mật khẩu thành chữ *, thay vì vô hiệu hóa mật khẩu. Giải pháp là xóa thuộc tính không mong muốn, sau đó vô hiệu hóa mật khẩu:

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

Điều này che giấu người dùng.


Thay vì các trích dẫn, bạn đã thử thoát khỏi ngôi sao? dscl . -create /Users/test Password \*
Eric3

Miễn là dscl thấy một chữ "*" theo nghĩa đen sau "Mật khẩu", mọi thứ đều ổn.
LaC

7

Chỉ trong trường hợp bạn chưa tìm thấy giải pháp khả thi (hoặc trong trường hợp người khác tìm thấy câu hỏi này từ Google), hãy đặt trình bao của người dùng để /usr/bin/false ngăn anh ta đăng nhập và ẩn nó khỏi màn hình đăng nhập từ tùy chọn hệ thống. Để làm như vậy, sử dụng dòng lệnh sau:

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

Và để hoàn nguyên sự thay đổi:

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

Trong trường hợp [username]là tên của người dùng mà bạn muốn ẩn ( _postgrestrong trường hợp của bạn tôi giả sử). Tôi không biết tại sao dsclmuốn giá trị cũ trước tiên, nhưng đó là những gì trang này nói và nó hoạt động khá tốt.


1
Giải pháp này rất kém vì nó vô hiệu hóa trình bao cho người dùng đó, điều mà tôi muốn sử dụng nó cho. Nếu tôi muốn khởi động lại cơ sở dữ liệu, v.v.
googletorp

@googletorp: Bạn vẫn có thể thực hiện sudo -s -u _postgrestừ tài khoản quản trị viên để lấy shell như _postgres; Điều này sẽ làm việc ngay cả khi UserShellthiết lập của mình /usr/bin/false. Bên cạnh đó, không đặt mật khẩu thành "không có mật khẩu", như bạn đã cố làm, còn vô hiệu hóa tài khoản?
zneak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.