我现在正在安装一个带有 CentOS-7 的新 Linux 服务器。之前,我在所有机器上使用 CentOS-6,并为我的帐户使用 uid = 555。然而,在CentOS-7上,似乎uid <= 999是为系统保留的(根据网上的一些文章)。出于测试目的,我尝试创建一个 uid = 555 的帐户,这样
# useradd -u 555 {我的登录名}
然后,即使在 CentOS-7 上也创建了一个新帐户,并且命令中没有任何警告等。
我知道uid <= 999是“为系统保留的”,但实际上,继续使用上面的uid(555)有什么严重的问题吗?或者,考虑到未来新服务可能使用555的可能性,我是否应该避免使用它?我很感激任何建议!
编辑
我的新机器(Centos-7)上的 /etc/login.defs 显示
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000
UID_MAX 60000
而在我的旧机器(Centos-6)上是
# Min/max values for automatic uid selection in useradd
#
UID_MIN 500
UID_MAX 60000
所以有不同的UID_MIN。另外,我的新机器上的 /etc/passwd 看起来像
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
ods:x:999:998:softhsm private keys owner:/var/lib/softhsm:/sbin/nologin
systemd-bus-proxy:x:998:996:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:997:995:User for polkitd:/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
colord:x:996:993:User for colord:/var/lib/colord:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
unbound:x:995:992:Unbound DNS resolver:/etc/unbound:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
libstoragemgmt:x:994:991:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
saslauth:x:993:76:Saslauthd user:/run/saslauthd:/sbin/nologin
dirsrv:x:389:389:389-ds-base:/usr/share/dirsrv:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
pcp:x:388:388:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
geoclue:x:387:386:User for geoclue:/var/lib/geoclue:/sbin/nologin
setroubleshoot:x:386:385::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
memcached:x:385:384:Memcached daemon:/run/memcached:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:384:383::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
sssd:x:383:382:User for sssd:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat:/sbin/nologin
pkiuser:x:17:17:Certificate System:/usr/share/pki:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:382:379::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
从上面显示的 uid 来看,在我看来,新服务使用的 uid 是 999(ods) -> 998 (systemd-bus-proxy) -> 997(polkitd) -> ... -> 993(saslauth)。因此,如果(将来)其他新服务也遵循该方案,那么使用 555(对我来说)可能没有什么风险。仅供参考,其他用户(除了我)已经有 uid >= 1000,所以对他们来说没有问题。但我一直在其他机器(包括 Mac)上使用 555,所以仍然想知道从现在开始使用 uid >= 1000 是否更好。
答案1
嗯,我很高兴你问这个问题,因为这是一个有趣的问题。
根据维基百科:
Linux 标准基本核心规范指定 0 到 99 范围内的 UID 值应由系统静态分配,并且不应由应用程序创建,而 100 到 499 之间的 UID 应保留供系统管理员和安装后动态分配脚本。[4]
在 FreeBSD 上,需要为其程序包提供 UID 的搬运工可以从 50 到 999 范围内选择一个免费的 UID,然后注册静态分配。[5][6]
一些 POSIX 系统为新用户分配 UID 从 500 开始(OS X、Red Hat Enterprise Linux),其他系统从 1000 开始(openSUSE、Debian[7])。在许多 Linux 系统上,这些范围是在 /etc/login.defs 中为 useradd 和类似工具指定的。
企业网络中的中央 UID 分配(例如,通过 LDAP 和 NFS 服务器)可能会限制自己仅使用远高于 1000 的 UID 编号,以避免与客户端计算机上本地分配的 UID 发生潜在冲突。 NFSv4 可以通过使用“用户@域”名称而不是整数来识别协议数据包中的用户(和组),从而帮助避免数字标识符冲突,但需要额外的转换步骤。
来源:https://en.wikipedia.org/wiki/User_identifier
所以我从中得到的是:
- 小于 50 到 99 == 与系统应用程序冲突的高风险
- 小于 499 = 与程序冲突的风险
- 小于 1000 = 与程序冲突的小风险
- 对于网络 UID 系统,你只想使用大数字
在最坏的情况下,仍然根据我的理解,您可能有一个程序或用户或组,允许与其他程序的文件或进程进行交互......我想这在大多数小型服务器上并不是什么大问题,但可能会变得大型系统上的一个重要安全漏洞。
答案2
从https://systemd.io/UIDS-GIDS/
发行版通常将可用的 UID 范围分为两部分:
1…999 → 系统用户。这些用户不会映射到实际的“人类”用户,而是用作系统守护程序的安全身份,以实现权限分离并以最小权限运行系统守护程序。
1000…65533 和 65536…4294967294 → 其他所有内容,即常规(人类)用户。
...
两个分配范围的注意事项:当发生 UID 分配时,首先检查 NSS 是否存在冲突,如果找到条目,则选择不同的 UID