Centos Linux下useradd 命令uid计算问题推荐

生产环境应用服务器推送一个账号的时候发现报错,账号UID已存在无法创建,查看/etc/passwd中无相关UID信息,想到服务器开启了ldap服务,getent passwd 查看发现有ldap用户占用相关uid。

默认情况下,ldap新增的用户和系统本地的用户uid是混在一起,本来设想着给ldap中添加一个uid比较大的用户,每次ldap添加用户的时候能和本地账号的uid明显区分开来。于是,在ldap数据库每个组中增加了一个uid为30000的用户。再往ldap数据库中增加用户的时候,发现新增的用户的uid已经为30001了。

本以为就此就ok了,感觉还是验证下本地创建账号是否正常,然后使用useradd在本地创建了一个账号,发现创建的账号的uid为30002,没有像如期的那样uid为2004。

修改 /etc/nsswitch.conf 将ldap数据库禁用:

#Tousedb,putthe"db"infrontof"files"forentriesyouwanttobe#lookedupfirstinthedatabases#Example:#passwd:dbfilesnisplusnis#shadow:dbfilesnisplusnis#group:dbfilesnisplusnis#passwd:filesldappasswd:filesshadow:filesldapgroup:filesldap

再次创建新用户测试,发现现在创建的用户的uid为2004。

useradd命令的声明,CAVEATS

You may not add a user to a NIS or LDAP group. This must be performed

on the corresponding server.

Similarly, if the username already exists in an external user database

such as NIS or LDAP, useradd will deny the user account creation

request.

查看了下useradd命令的帮助信息:

有关uid的解释,

-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 999 and greater than every other user. Values between 0 and 999 are typically reserved for system accounts.

系统在使用useradd命令创建用户的时候,如果没有指定uid的情况,默认是使用超过999,且大于现有所有账号的最小uid。

当然也可以通过 -o参数指定非唯一uid,这样创建的用户会和其他用户公用一个uid,相当于这两个账号是一个账号。

useradd -o -u 503 test.dianping

当然使用-o参数是有一定的风险的,建议每个账号还是有自己唯一的uid。

在找资料解决,在添加ldap用户和 linux local users时分别使用不同uid段,比如本地账号使用10000以下的uid,ldap用30000以上的uid,10000到30000之间的uid作为保留。

在linux中存在一个文件允许限制我们通过useradd命令创建uid时的最大和最小值范围:

/etc/login.defs

#

# Min/max values for automatic uid selection in useradd

#

UID_MIN 500

UID_MAX 60000

文件修改后:

/etc/login.defs是设置用户帐号限制的文件。该文件里的配置对root用户无效。如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,也就是说/etc/shadow的配置优先级高于/etc/login.defs#*REQUIRED*required#Directorywheremailboxesreside,_or_nameoffile,relativetothe#homedirectory.Ifyou_do_defineboth,MAIL_DIRtakesprecedence.#QMAIL_DIRisforQmail#QMAIL_DIRMaildirMAIL_DIR/var/spool/mail#创建用户时,要在目录/var/spool/mail中创建一个用户mail文件#MAIL_FILE.mail#Passwordagingcontrols:#PASS_MAX_DAYSMaximumnumberofdaysapasswordmaybeused.#PASS_MIN_DAYSMinimumnumberofdaysallowedbetweenpasswordchanges.#PASS_MIN_LENMinimumacceptablepasswordlength.#PASS_WARN_AGENumberofdayswarninggivenbeforeapasswordexpires.PASS_MAX_DAYS99999#密码最大有效期PASS_MIN_DAYS0#两次修改密码的最小间隔时间PASS_MIN_LEN5#密码最小长度,对于root无效PASS_WARN_AGE7#密码过期前多少天开始提示#Min/maxvaluesforautomaticuidselectioninuseradd#创建用户时不指定UID的话自动UID的范围UID_MIN500#用户ID的最小值UID_MAX10000#用户ID的最大值#Min/maxvaluesforautomaticgidselectioningroupadd#自动组ID的范围GID_MIN500#组ID的最小值GID_MAX10000#组ID的最大值#Ifdefined,thiscommandisrunwhenremovingauser.#Itshouldremoveanyat/cron/printjobsetc.ownedby#theusertoberemoved(passedasthefirstargument).#USERDEL_CMD/usr/sbin/userdel_local#当删除用户的时候执行的脚本#Ifuseraddshouldcreatehomedirectoriesforusersbydefault#OnRHsystems,wedo.Thisoptionisoverriddenwiththe-mflagon#useraddcommandline.CREATE_HOMEyes#使用useradd的时候是够创建用户目录#Thepermissionmaskisinitializedtothisvalue.Ifnotspecified,#thepermissionmaskwillbeinitializedto022.UMASK077#Thisenablesuserdeltoremoveusergroupsifnomembersexist.USERGROUPS_ENAByes#用MD5加密密码

这样设置以后,本地系统创建账号的uid默认为500到10000之间,而ldap账号可以在添加一个uid为30000的账号后将ldap数据库中每个组最大的uid取出来,然后最大uid的基础上每次增加1.

与其临渊羡鱼,不如退而结网。

Centos Linux下useradd 命令uid计算问题推荐

相关文章:

你感兴趣的文章:

标签云: