Yeni bir kullanıcı neden dosyaları silinen bir kullanıcıdan miras aldı?


24

Bu yüzden bir kitapta ödev olarak alıştırma yapmak zorunda kaldım. İlk önce şöyle bir kullanıcı oluşturmanız gerekiyordu:

useradd -c "Steven Baxter" -s "/bin/sh" sbaxter

Sonra /home/sbaxterdizine bazı dosyalar eklemelisiniz :

touch /home/sbaxter/ some.txt new.txt files.txt

Sonra sbaxterkullanıcıyı kaldırmanız ve adında yeni bir kullanıcı oluşturmanız gerekiyordu mjane. Koştum benim sürpriz için find /home/ -user mjane, yeni kullanıcı mjaneartık sbaxter eski dosyaların tümü olunan, ne oldu?

Yanıtlar:


41

Şeytan ayrıntılarda, useraddman sayfasındadır (bunu yayınlayarak görebilirsiniz man 8 useradd):

   -u, --uid UID
       The numerical value of the user's ID. This value must be unique,
       unless the -o option is used. The value must be non-negative. The
       default is to use the smallest ID value greater than or equal to
       UID_MIN and greater than every other user.

Bu nedenle, şifre dosyasında diğer kullanıcılardan daha büyük olan kullanılmayan en küçük kullanıcı kimliğini kullanmak varsayılan olacaktır. Sbaxter'ı silerek onu passwd dosyasından çıkardığını görünce, kimliği "ücretsiz" olur ve mjane'ye atanır (kullanıcı useraddseçtikleri useraddkomutun kullanıldığı tarihte her iki kullanıcı için aynıdır ).

Diskteki dosyalar yalnızca kullanıcı kimliğini saklar ve kullanıcı adı çevirisini DEĞİL (bu çeviri şifre dosyasında tanımlandığı için). Kullanıcı ls -lnkimliği mülkiyet dosyalarının ne olduğunu görmek için yayınlayarak onaylayabilirsiniz .

Hesapları silmek yerine devre dışı bırakmanı öneririm . Çoğu Linux dağıtımında hesapları usermod -L -e today <username>kilitlemek, şifreyi kilitlemek ve hesabı bugün sona ermesi için ayarlamak üzere gerçekleştirilebilir (bir hesabın son kullanma tarihini görebilirsiniz chage -l).


2
... bu korkunç bir güvenlik açığı gibi görünüyor. Etrafında çalışmak için herhangi bir yolu var mı?
BlueRaja - Danny Pflughoeft

6
@ BlueRaja-DannyPflughoeft Bu bir güvenlik açığı değildir: kullanıcılar, kullanıcı adlarıyla değil kullanıcı adlarıyla tanımlanır. Bir hesabı silerken, tüm dosyalarını kaldırmanız gerekir (yani, yalnızca kullanıcının giriş dizinine değil, bu kullanıcı kimliğine ait tüm dosyalar). Bu, bir hesabı kaldırmak için normal prosedürün bir parçasıdır.
Gilles 'SO- kötülük olmayı'

2
@OlivierDulac Buna yedekleme denir. Alternatif olarak, verileri saklamanız gerektiği sürece hesabı kilitleyin ancak kaldırmayın. Sonuçta, verileri saklamanız gerekiyorsa, hesaba hala ihtiyaç duyulur.
Gilles 'SO- kötülük' dur '26

1
Çoğu Linux dağıtımında hesapları usermod -L -e today <username>kilitlemek, şifreyi kilitlemek ve hesabı bugün sona ermesi için ayarlamak üzere gerçekleştirilebilir (bir hesabın son kullanma tarihini görebilirsiniz chage -l).
Drav Sloan

5
Bugünün standartlarına göre bir güvenlik açığıdır. Örnekte gösterildiği gibi, bu, insanları dosyalarla ilişkilendiremeyeceğiniz anlamına gelir. Elbette, insanlar hesaplarla güçlü bir şekilde ilişkili olabilir, ancak kurumdaki <-> hesap <-> dosyası, UID geri dönüşümü nedeniyle bozuluyor. Sonra tekrar, Unix bu konuda hiçbir zaman büyük bir güvenceye sahip değildi ( rootneredeyse her şeyi taklit edebilir). Bunun için denetim izlerine ihtiyacınız var.
MSalters

13

Silinen kullanıcının UID'si yeni kullanıcı tarafından tekrar kullanıldı ve dosya sistemleri bir kullanıcı adı değil, sahiplik için bir UID kullanıyor.

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.