Kullanıcı adının olup olmadığını öğrenin


68

Belirli bir kullanıcı adının mevcut sistemde olup olmadığını bir kabuk betiğinde nasıl bulabilirim?


/etc/passwdve /etc/shadoweksik. OS X'in Directory Services veya Linux'u aynı şekilde Active Directory entegrasyonuyla düşünün.

Yanıtlar:


103

Bunun için kullanılacak en temel araçlardan biri muhtemelen id.

#!/bin/bash
if id "$1" >/dev/null 2>&1; then
        echo "user exists"
else
        echo "user does not exist"
fi

Hangi üretir

$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist

2
Buradaki ters alıntılara ihtiyacınız yok - sadece kullanın if id -u "$1" >/dev/null 2>&1; then...
Gordon Davisson

1
@ Gordon kesinlikle elbette haklı. Thanks :)
barbaz 17:11

"-u" da gereksiz görünüyor
palacsint

Sadece ifnegatif sonuç denetleyicisine ihtiyacım olursa ne olur ?
Yura Shinkarev,

id -u $1 1>/dev/null 2>&1; echo $?boru için kullanılabilir
JasonWayne

20

getent

Bu komut, / etc dosyaları ve LDAP, AD, NIS / Sarı Sayfalar, DNS ve benzeri gibi çeşitli uzak servisler tarafından desteklenebilen veritabanları için giriş toplamak üzere tasarlanmıştır.

Bir kullanıcı adının şifre adlandırma servislerinden biri tarafından bilinip bilinmediğini anlamak için, sadece şunu çalıştırın:

getent passwd username

Bu, işletim sistemine ve uygulamaya bağlı olarak grup, toplantı sahipleri ve diğerleri ile de çalışır.


1
Solaris ve Linux ve daha yakın zamanda çoğu BSD'nin sahip getentolduğu halde getent, Mac OS X'te yok
barbaz

Gerçekten, Mac OS / X’in özlüyorum kayıp olduğunu özledim.
jlliagre 17:11

Bununla birlikte, desteklediği sistemlerde oldukça faydalıdır.
Daniel Beck

1
getent güzel çünkü kimliğin yalnızca tek bir kullanıcı adını desteklediği birden fazla kullanıcı adını sorgulayabilirsiniz.
nall

6

finger

Çıktısını ayrıştırın finger -m <username>. Kullanıcı bulunamadıysa hata kodu yok, ne yazık ki, ancak bulunmazsa, hata çıktısı yazılır. Şimdiye kadar sakınca yok.

finger -ms <username> 2>&1 1>/dev/null | wc -l

0Kullanıcı bulunursa yazdırır (çünkü hata çıkışı olmaz), aksi takdirde daha büyük sayılar.

chown

Çalıştır (herhangi bir kullanıcı olarak, şaşırtıcı bir şekilde):

T=$( mktemp -t foo.XXX ) ; chown <username> $T

Olarak başarısız olursa root, hesap adı geçersiz.

rootKullanıcı olmayan olarak başarısız olursa , Operasyon için izin verilmeyen veya geçersiz kullanıcı (veya eşdeğeri) için olası yerelleştirilmiş çıktıyı ayrıştırın . LANGBunu güvenli bir şekilde yapmak için önceden ayarlayın .


0

Güvenmek /etc/passwdve benzeri olmak isteyeceğinizi söyleyebilirim (örneğin /etc/shadow, Gölge tabanlı sistemler için; konu dışı bir yan notta, bazı benzer sistemler /etc/master.passwdveya benzeri dosyalar kullanabilir).

/etc/passwdTipik olarak, bir kullanıcı var olup olmadığını mutlak yetkili karar olarak işlenir. Bu sayfada açıklanan diğer yöntemlerden herhangi birini kullanıyorsanız ve bu diğer yöntemler mevcut bir kullanıcıyı işaret ediyor, ancak /etc/passwdgöstermiyorsa, kullanıcının en yaygın standardın tanımına göre sistemde uygun bir şekilde bulunmadığını söyleyebilirim. yazılım muhtemelen güveniyordu.

Bu, kullanılabilecek diğer bazı seçeneklerin karışımına eklemek için başka bir şekilde atacağım.

ls -l /home | grep ^customUserName$<BR> echo $?

Açıkça, "customuserName" öğesini kontrol etmek istediğiniz kullanıcının adıyla değiştirin. Sisteminizin kullandığı buysa, / home ile / users değerini değiştirin. Bu, belirli bir kullanıcı için giriş dizini oluşturulmamışsa / etc / passwd içindeki tüm kullanıcıları bulamayabilir; yalnızca kullanıcıları (yani, / etc / passwd içine metin satırları alırsanız) ve giriş dizinleri girmiyorsa oluşabilir. Bir kişi giriş yapana kadar / yapılmadığı sürece alın


/ Etc / password dosyasına girişi olmayan, ancak ya geçerli sayıldığı ya idda getent"düzgün bir şekilde" bulunmadığı, özellikle de OP açıkça adlandırma hizmetleri olduğunu belirttiğinde, neden bir kullanıcı tarafından belirtildiğini anlamadım. dikkat edilmesi gereken.
jlliagre
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.