很早以前就想到,如果有一個需要實體帳號的服務,那麼那個服務的帳號不會就受到linux帳號uid的限制了嗎?(書上說UID最大值為2^16-1),所以我也一直以為是這樣,剛剛去網路上爬了一下文,發現linux的kernel在2.3版的時候已經加入UID32-bit的支援了,所以穩定版的2.4版都已經可以容許2^32-1個帳號,也就是4294967295個帳號,於是筆者查了一下主機的核心版本是2.6.8-2-686,於是就手癢測試了一下,筆者先後使用adduser -u UID NAME的方式,新增了三個使用者
帳號名稱 uid
testuser 70000
testuser2 4200000000
testuser3 5000000000
分別測試登入,登入結果都ok
ls -la /home的結果如下
drwxr-xr-x 2 testuser testuser 4096 2006-01-08 19:41 testuser
drwxr-xr-x 2 4200000000 testuser2 4096 2006-01-08 19:40 testuser2
drwxr-xr-x 2 root staff 4096 2006-01-08 19:42 testuser3
打開/etc/passwd一看
testuser:x:70000:70000:root,,,:/home/testuser:/bin/bash
testuser2:x:2147483647:2147483647:root,,,:/home/testuser2:/bin/bash
testuser3:x:2147483647:2147483647:root,,,:/home/testuser3:/bin/bash
發現了嗎,除了testuser外其他的兩個帳號都緩衝區溢滿了,這32個bit只使用了31個bit來計算,第一個bit為正負(二的補數表示法),不知道這是bug還是有什麼特別的設計,uid應該不會有負的吧,所以實際帳號的數量是2^31-1個也就是2147483648個
補充一下
/etc/group內容如下
testuser:x:70000:
testuser2:x:4200000000:
testuser3:x:4294967295:
後話
再另一架RH9 Kernel 2.4.22-1.2115的系統上測試結果
帳號名稱 uid
testuser 4200000000
testuser1 5000000000
testuser:x:4200000000:4200000000::/home/testuser:/bin/bash
testuser1:x:4294967295:4294967295::/home/testuser1:/bin/bash
結論
看起來這像是Debian adduser程式的bug
p.s 應該沒有像我這麼無聊的人才是....
p.s2 書上的介紹應該要改一下了...
沒有留言:
張貼留言