Tüm kullanıcıları root ile nasıl listeleyebilirim?


35

Linux kutusunda, kök ayrıcalıklarına sahip tüm kullanıcıları (ve hatta daha iyisi, genel olarak kökleri olup olmadığına bakılmaksızın) nasıl listeleyebilirim?


1
"Kök ayrıcalıkları" ile neyi kastettiğinizi daha açıklayabilir misiniz? UID = 0 olan kullanıcılar mı demek istiyorsunuz?
Chris S

Her şeyi yapabilme yeteneği olan kullanıcılar. Temel olarak - Eğer mümkünse kullanıcıları üye oldukları gruplar ile birlikte listelemem gerekiyor.
Eric

2
Bilgisayarınızın nerede olduğunu bilseydim, yürürdüm ve güç kablosunu çekebilirdim. Bu, "bir şey yap" olarak nitelendirilir, bu da sizin listenizde olduğum anlamına gelir. Rafiq en yaygın üç şeyi listeledi, ancak daha fazlası olabilir ve sisteminizi veya nasıl kurulduğunu not edin.
Chris S

Yanıtlar:


42

Kök şifresini değiştirmeyi unutma. Herhangi bir kullanıcının root dışında UID 0 varsa, yapmaması gerekir. Kötü bir fikir. Kontrol etmek:

grep 'x:0:' /etc/passwd

Yine, bunu yapmamalısınız, ancak kullanıcının kök grubun bir üyesi olup olmadığını kontrol etmek için:

grep root /etc/group

Herhangi birisinin root olarak komut çalıştırıp çalıştıramayacağını görmek için sudoer'ları kontrol edin:

cat /etc/sudoers

Programların kök ayrıcalıklarıyla yürütülmesine izin veren SUID bitini denetlemek için:

find / -perm -04000


Kesinlikle, birincisi sadece gölge şifre dosyası kullanıcıdaysa çalışır. Bugünlerde neredeyse her zaman olduğu konusunda hemfikirim, ancak sadece durumda, 3. alanı açıkça kontrol eden hızlı bir perl işi yaptım.
MadHatter Monica

4
Bu ilkinden daha iyi bir model şöyledir: grep '[^:]*:[^:]*:0:' /etc/passwd. SUID kontrolü için özellikle +1.
sonraki duyuruya kadar duraklatıldı.

33

UID 0 olduğunu görmek için:

getent passwd 0

Görmek için kimin gruplar halinde ise root, wheel admve admin:

getent group root wheel adm admin

Tüm kullanıcıları ve üye oldukları grupları listelemek için:

getent passwd | cut -d : -f 1 | xargs groups

9
Yanlış / etc / passwd dosyasına dayanan tüm diğer cevapların aksine, getent passwdbunun yerine bu gerçekten doğrudur. Sadece / etc / sudoers 'ı kontrol etmeyi unutma.
mivk

Bunun için teşekkürler. Çok daha net. Benim için bu kabul edilen cevap.
Fiddy Bux

6

Saf kök kullanıcı kimliği "0" dır.

Sistemdeki tüm kullanıcılar / etc / passwd dosyasındadır:

less /etc/passwd

Kök olanlar, 3. sütun olan kullanıcı kimliği olarak "0" değerine sahiptir. Grup olarak "0" 'a sahip olanlar (4. sütun) ayrıca bazı kök haklarına sahip olabilir.

Ardından, gruplara bakmak ve "root" veya "wheel" veya "admin" gruplarının kimlerden birinin üyesi olduğunu görmek istersiniz:

less /etc/group

Bu gruplarda listelenen kullanıcılar, özellikle "sudo" komutu ile bazı kök ayrıcalıklarına sahip olabilirler.

Kontrol etmek isteyeceğiniz son şey "sudo" config ve bu komutu çalıştırma yetkisi olan kişilerin listelendiğini görün. Bu dosyanın kendisi iyi belgelenmiştir, bu nedenle burada yeniden oluşturmayacağım:

less /etc/sudoers

Bu, kök erişimi olan ana alanları kapsar.


Ayrıca bkz serverfault.com/questions/205598/... ayrıcalık yükseltmeli hakları verilmiş olabilir birkaç yerler için. (Yani, consolehelperve PackageKit.)
mattdm

2
Tüm kullanıcıların kesinlikle / etc / passwd içinde olmaları garanti edilmez. Örneğin LDAP'da olabilirler. Ancak getent passwd, tanımlandıkları veritabanından bağımsız olarak, tüm sistem kullanıcılarını (root dahil), passwd biçiminde listelemeleri gerekir.
mivk

3

Tüm kullanıcıları yazdırmak için

perl -n -e '@user = split /:/ ; print "@user[0]\n";' < /etc/passwd

Yalnızca UID 0 kullanan kullanıcıları, başkalarının söylediği gibi, kök haklarına sahip olan kullanıcıları yazdırmak için:

perl -n -e '@user = split /:/ ; print "@user[0]\n" if @user[2] == "0";' < /etc/passwd

Bu iyi bir astar, ancak sınırlamaların farkında olun (MadHatter'ın zaten bunun farkında olduğundan eminim) - grupları kontrol etmeyecek ve sudo'ları kontrol etmeyecek. Sadece, söylediği gibi, örtük kök kontrolü yapacak.
Rafiq Maniar

2
/ Etc / passwd dosyasını çözümlemeyin. Kullanıcılar başka yerde tanımlanabilir. Yerine getent passwdkullanın. İlk "tüm kullanıcıları yazdır" örneğiniz için, bunun yerine şunu deneyin:getent passwd | perl -naF: -e 'print "$F[0]\n"'
mivk

2

Tüm kullanıcıların hızlı bir listesi için, passwdkomutu ve ardından bir boşluk yazdıktan sonra iki kez sekmeyi (otomatik tamamlamaya) tıklamayı deneyin . Bu sukomutla da çalışır .

Kök ayrıcalıklı bir kullanıcı olarak yapılmalıdır.


Bu bir zsh spesifik özelliği midir? Bash, yalnızca openSUSE'deki dosyaları önerir.
jgillich

Bash Debian (Squeeze) üzerinde test edilmiştir. Kimsenin resmi olarak destekleyeceğine inanmıyorum, ama bu bir kestirme.
Emeraldo

Güncelleme: Bu artık El Capitan'da çalışmıyor. Muhtemelen güvenlik nedeniyle düzeltildi.
Emeraldo

0

Tek satırlık bir cevap olmaması beni rahatsız ediyordu ... Tüm UID 0 (root) hesaplarını listelemek istiyorsanız aşağıdakileri kullanın:

cat /etc/passwd | cut -f1,3,4 -d":" | grep"0:0" | cut -f1 -d":" | awk '{print $1}'

En iyi,

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.