Neden Linux kullanıcı adları rakamlarla başlayamıyor?


84

Neden teknik bir sebep var mı? Bu, Linux'un veya Unix'in ilk günlerinden kalma bir eser midir ve öyleyse devam etmesinin bir nedeni var mı?


22
Bu cevaplarda debunked olduğundan, bu ifade için kaynağınız nedir?
l0b0

19
@ l0b0 - başına useradd(dan shadow-utils 4.2.1kılavuz sayfasında (bakınız) Uyarılar ):Usernames must start with a lower case letter or an underscore [...] In regular expression terms: [a-z_][a-z0-9_-]*[$]?
don_crissti

30
@ l0b0 - oh, ve sadece bir dağıtıcı (bu tür şeylerle meşhur) bunun “cevaplarda sıkıntıya uğradığı anlamına gelmediği anlamına gelmez . Soru etiketli linuxdeğil ubuntu. Archlinux'da yapmayı dene .
don_crissti

1
@ don_crissti Tüm Linux dağıtımlarına açıkça uygulanmıyor ve bu nedenle bu kısıtlamanın nereden geleceğini bilmek ilginçti.
l0b0

5
Ubuntu'nun bile umurunda: Live CD / Ubiquity ile kurduğunuzda kullanıcı adınızı "Küçük harf ile başlamalı"
43Tesseracts

Yanıtlar:


136

Bazı komutlar (örn. chown) Bir kullanıcı adını veya sayısal bir kullanıcı kimliğini kabul edebilir, böylece tüm sayısal kullanıcı adlarına izin vermek bunu kırabilir.

Sayı ile başlayan ve bir miktar alfa içeren adlara izin verme kuralının büyük olasılıkla çabalamaya değmeyeceği düşünüldü; bunun yerine, alfa karakteriyle başlamak için yalnızca bir gereksinim vardır.

Düzenle:

Bazı tepkilerin bu sınırlamayı altüst ettiği diğer tepkilerden anlaşılmaktadır; Bu durumda, GNU Core Utils belgelerine göre :

POSIX, bu komutların önce belirtilen dizeyi bir ad olarak çözmeyi denemesini ve yalnızca bir kez başarısız olmasının ardından bir ID olarak yorumlamayı gerektirir.

$ useradd 1000   # on most systems this will fail with:
                 # useradd: invalid user name '1000'
$ mkdir /home/1000
$ chown -R 1000 /home/1000   # This will first try to map
    # to username "1000", but this may easily be misinterpreted.

'0' adında bir kullanıcı eklemek sadece sorun istiyordu (UID 0 == root user). Ancak, grup / kullanıcı kimliği argümanlarının, bir tamsayı olarak yorumlanmasını zorlamak için '+' ile gelebileceğini unutmayın.


13
Bu aslında soruyu cevaplayan tek yazı. Sen Linux dağıtımlarının üzerinde çalışan sonucu memba kodunu sakatlamaya alışkanlığı olmayan kişileri göstermek için bir örnek eklemek gerekir useradd 253iseuseradd: invalid user name '253'
don_crissti

2
Buradaki kayıt , yayınınıza eklemek istiyorsanız kaynak koddur .
don_crissti

5
1000 kullanıcı adı UID 253 ise, karışıklık fırsatlarını hayal edebiliyor musunuz? Veya, genel olarak, UID ile eşleşmeyen sayısal kullanıcı adları için? Tabii ki gruplarla basitçe.
Jonathan Leffler

5
Bazı kullanıcıların (sayısal) çalışan kodu / kayıt numarasının kullanıcı adı olarak bulunduğu bir LDAP sistemim var. Hızlı bir şekilde kullanıcı kimliklerini kanuna sokmayı öğrendim ( chown -R $(id -u $username) ...).
muru

2
İdeal olarak, bir kullanıcı adı dizesi, sayılar veya harfler olsun, bir UID ile eşleştirilir ve adlar her zaman UID'yi belirlemek için aranır; o zaman bir kimlik numarası olarak kabul edeceğim '
Matt Warren

83

ubuntu 14.04 üzerinde sayıları kullanarak bir test:

root@ubuntu:~# useradd 232
root@ubuntu:~# mkdir /home/232
root@ubuntu:~# chown 232.232 /home/232
root@ubuntu:~# passwd 232
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
root@ubuntu:~# login
c2 login: 232
Password: 
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 4.4.0-22-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

 System information disabled due to load higher than 2.0

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.


$ 
$ whoami
232

ve bir unicode U + 1F600 kullanarak - 😀

root@c2:~# useradd 😀
root@c2:~# mkdir /home/😀
root@c2:~# chown 😀.😀 /home/😀
root@c2:~# passwd 😀
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
root@c2:~# login
c2 login: 😀
Password: 
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 4.4.0-22-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

 System information disabled due to load higher than 2.0

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

$ whoami
😀

Bu muhtemelen sahip olduğum en kötü fikir.

root@c2:~# useradd '&#%^()!@~*?<>=|'
root@c2:~# passwd '&#%^()!@~*?<>=|'
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
root@c2:~# mkdir '/home/&#%^()!@~*?<>=|'
root@c2:~# chown '&#%^()!@~*?<>=|.&#%^()!@~*?<>=|' '/home/&#%^()!@~*?<>=|'
root@c2:~# login
c2 login: &#%^()!@~*?<>=|     
Password: 
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 4.4.0-22-generic x86_64)
**** text removed ****
applicable law.

$ whoami
&#%^()!@~*?<>=|

Açıkça böyle bir kullanıcı ekleyebilirsiniz, ancak bunun uzun vadede iyi bir fikir olduğundan emin değilim.


1
useradd '*'eğlenceli cd /home/*/olurdu - beklendiği gibi çalışmazdı ve $HOMEbu kullanıcının değerini kullanırken diğer yardımcı programların nasıl tepki vereceğini kim bilebilirdi .
Liam Dawson,

9
vay ubuntu buna izin veriyor mu? useradd 1000(UID 1000 ile bir kullanıcınız olduğunu varsayarsak) denerseniz ne olacağını merak ediyorum
thomas_d_j

8
Tüm yasak semboller için +1!
EKons

3
Oh, daha kötüsünü düşünebilirim ...
OrangeDog

4
@IsmaelMiguel: \0/ etc / passwd içindeki değişmez , muhtemelen onu çözümleyen pek çok programı bozar . Ancak, muhtemelen standart araçları kullanarak bu ada sahip bir kullanıcıyı ekleyemezsiniz. Sistem çağrıları, mkdir(2)0 sonlandırılmış örtülü uzunluktaki dizeleri de kullanır, bu nedenle oluşturamazsınız /home/\0/, çünkü bu yol tamdır /home.
Peter Cordes,

9

A * Nix kullanıcı adı genellikle yardımcı program tarafından oluşturulan 32 karakter uzunluğunda bir dizedir useradd. Bu, söylediğiniz gibi, erken Unix (teknik olarak BSD) standartlarının doğrudan bir sonucudur. FreeBSD Man Sayfasına göre passwd(5):

Giriş adı kısa çizgi (`- ') ile başlamamalıdır ve 8 bit karakterler, sekmeler veya boşluklar veya bu sembollerden herhangi birini içeremez:`,: + & #% ^ ()! @ ~ *? <> = | / "'. Dolar sembolüne (' $ ') yalnızca Samba ile kullanım için son karakter olarak izin verilir. Hiçbir alan, kullanıcıdaki alanları ayırmak için tarihsel olarak kullanıldığı için iki nokta üst üste (`:') içeremez. veri tabanı.

Belirli * Nix sistemleri, kullanıcı adlarında özel karakterlerle sunulduğunda belirsiz hatalar atmak için kullanılırdı, bu yüzden sonunda özel karakterler yasaklandı. En modern * Nix sistemlerinde bunu değiştirmek için nispeten kolay olurdu passwd/ useraddözel karakter adını desteklediğini yardımcı programları, ancak düşük bir etkisi olacaktır ve geriye uyumsuzluk sebep olacağından çoğu insan, böyle bir önemsiz şeyi değiştirmek tereddütlü.

EDIT:
Adonis'in dediği gibi, bunu modern bir Linux dağıtımında yapmak mümkündür, ancak tavsiye edilmez (özellikle standartlaştırılmış veya eski programlarla karşılaştığınızda).


5
Tabii ama soru özel karakterlerden bahsetmiyor bile. Kullanıcı adlarının neden rakamlarla başlayamadığını (özel karakter olmayan) sorar.
don_crissti

Tabii @don_crissti, neden bir kullanıcı adının neden bir boşlukla başlayamadığını sorup sonra neden ayrı bir şekilde neden her bir sembolle başlamadığını sorup, sonra da bir $ ile bitip bitmediğini sormamı ister misiniz? Bu "cevap", açık bir şekilde olduğu gibi yorumla uyuşmuyor, ancak soru ile ilgili faydalı bilgiler içeriyor.
frumbert

Bu paragrafta 8 bit karakterle ne kastedilmektedir? IE: Kesinlikle ascii karakterleri 8-bit mi?
Matt Warren

feh! /etc/passwdbir metin dosyasıdır. useradd? öf-tosh. Gerçek sysadmins kullanın vi!
sabitlendikten

1
@MattWarren. ASCII 7 bit kodlamadır
fpmurphy

1

Neden teknik bir sebep var mı? Bu, Linux'un veya Unix'in ilk günlerinden kalma bir eser midir ve öyleyse devam etmesinin bir nedeni var mı?

Teknik bir neden düşünemiyorum - tarihsel olarak, sadece ASCII. Nasıl okunduğunu ve yazıldığını kodcunun elindedir.

Unix tarih-repo / usr / src / cmd / passwd.c

char *uname;

insist = 0;
if(argc < 2) {
    if ((uname = getlogin()) == NULL) {
        printf ("Usage: passwd user\n");
        goto bex;
    } else {
        printf("Changing password for %s\n", uname);
    }
} else {
    uname = argv[1];
}

Arşiv sayfalarına göz atmak için biraz zaman harcadığımdan (örneğin: 1BSD, Bill Joy'un ilk Berkeley Yazılım Dağıtımıydı ), kullanıcı adlarını belirten hiçbir şey görmedim. Var olmadığını söylemek değil, ama görmedim.

Öyleyse tarihsel insan bağlamına bıraktık. 1980'de teknolojiye başladığımda, girişler için her zaman gerçek ismimizi kullanırdık. Belirli bir uzunluk sınırı olmadıkça, genellikle ilk ad ve soyad. Giriş adınız e-posta adresiniz olarak kullanıldığı için bu önemliydi. Kimse daha sonra isimsiz bir e-posta göndermedi. Elbette bazı istisnalar da olmalı, onları hatırlamıyorum. Yine de, durumun böyle olduğuna inanıyorum.

Ve rfc5321 # sayfa-63’e göre, bir sayısal adla başlayan bir "ad" e-postasında herhangi bir kısıtlama yoktur. gmail, tüm sayısal kullanıcı adlarını oluşturacaktır. (şimdi alın, hızlı gidiyorlar).

Bu nedenle, [0-9] ile başlayan bir kullanıcı adını reddeden herhangi bir kod varsa, daha sonra "neden bir isim olarak bir numaraya sahiptiniz?" Diye düşünerek bazı programcılarla ortaya çıkmıştır. Bir kez daha, bir sayı ile başlayan bir kullanıcı adını reddeden çok eski bir unix kodu olabileceğini söylemeliyim. Sadece görmedim. İlk şifre tabloları elle düzenlendi, 90'ların başında bile bunu sık sık yaptığımı hatırlıyorum.

Neden sürdüğü kadarıyla stroustrup, C ++ 11FAQ, Yeni standart kütüphaneler ne zaman hazır olacak?

Sorunu daha da zorlaştırmak için, komite kötü olduklarını kabul etse bile, eski özellikleri ortadan kaldırmanın mümkün olmadığını unutmayın: Deneyim, kullanıcıların her uygulamacıyı uyumluluk anahtarları altında (veya varsayılan olarak) kullanımdan kaldırılmış ve yasaklanmış özellikler sağlamaya zorladığını göstermektedir. onyıllardır.


0

Cevaplarında belirttiği gibi, Linux kullanıcı adları olabilir tüm sayısal olun. Ancak, bu pek çok yazılım aracını (ve insan sistem yöneticilerini!) Birbirine karıştıracağı için Kötü bir Fikir'dir.

Bu nedenle, örneğin, tüm sayısal kullanıcı adları ve grup adları RHEL 7'de kullanımdan kaldırılmış ve RHEL 8'de yasaklanmıştır:

8.7.1. shadow-utilsartık tüm sayısal kullanıcı ve grup adlarına izin verme

useraddVe groupaddkomutlar sayısal karakterler tamamen oluşan kullanıcı ve grup adları izin vermeyecek. Bu tür isimlere izin verilmemesinin nedeni, bunun, kullanıcı ve grup adları ve kullanıcı ve grup kimlikleriyle (sayı olan) çalışan birçok aracı karıştırmasıdır. Lütfen tüm sayısal kullanıcı ve grup adlarının Red Hat Enterprise Linux 7'de kullanımdan kaldırıldığını ve desteklerinin Red Hat Enterprise Linux 8'de tamamen kaldırıldığını unutmayın.


-2

Teknik bir neden olarak adlandırdığımdan emin değilim, ancak kural "kullanıcı adı geçerli bir programlama dili tanımlayıcısı olmalı" anlamına geliyor. Tanımlayıcılar, kısıtlı sözdizimleri nedeniyle bazı iyi özelliklere sahiptir: Karakter karakter okurken bile sayılarla karıştırılamazlar ve ayrıştırıcıdan geçerken alıntı yapılmaları gerekmez. Kısacası, kolayca isimler olarak tanınırlar ve bu da onlarla çalışmak için gereken programlama işini azaltır.

Öyle olduğunu şüphe hiç erken Unix kullanıcıların% 100'üne kadar berrak kristal olurdu basit bir kuraldır "kullanıcı adı bir tanımlayıcı olmalı" bir rakam ile başlamak adlarını izin vermeyecek şekilde gerçekten gerekli ama.

Kullanıcı adınızı girdiğiniz tek yer bir GUI'de oturum açma istemindeyse, hangi karakterleri içerdiğini büyük olasılıkla değiştirmez (boş satırları ve yeni satırlar gibi şeyleri hariç tutar, bu da hiccup'lara giriş prosedürünü bile verir). Ancak komut satırından çok fazla iş çıkarırsanız, üzerinde çalışması kolay bir kullanıcı adına sahip olmanın rahatlığı.


Humm, bir giriş (kullanıcı adı) kesinlikle bir programlama dili tanımlayıcısı ile ilgisi yoktur.
fpmurphy

Ve yine geçerli bir kullanıcı adı tanımı olan konu bu, tanımlayıcılar için aynıdır.
alexis,
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.