一:useradd
学习用户管理首先从注册开始!我们登录Linux系统时需要输入用户名和密码,也就是说,一个用户包括用户名和密码两个部分。那么,要想完整的添加一个用户,就需要使用两个命令来完成。useradd用户创建用户,passwd用来设置用户密码。
useradd是Linux系统中常用的系统管理命令,它的功能就是在系统中创建一个新的用户。注意:在创建用户时,必须以管理员的身份执行。
命令格式: useradd [选项] 用户名
这个命令的一些选项如下表所示:
选项 | 说明 |
-u | 指定用户标识符[-u UID],该值在系统中必须是唯一的 |
-d | 指定用户的家目录[-d 家目录],指定时使用绝对路径 |
-m | 自动建立用户的家目录 |
-M | 不创建用户的家目录 |
-c | 指定用户的注释信息,保存在/etc/passwd文件中 |
-s | 指定用户登录后使用Shell,默认为/bin/bash |
-D | 显示或者设置默认值 |
-e | 指定用户的失效日期。格式为YYY/MM/DD,缺省表示永久有效 |
-f | 指定密码过期后,用户北京用之前的天数。0表示立即禁用,默认值-1表示不禁用 |
-g | 指定用户所属的用户群组 |
-G | 指定用户所属的附加群组 |
注意:在没有指定选项的情况下执行useradd命令创建用户时,系统会根据默认值创建用户。这些默认值被记录在/etc/default/useradd文件中,你可以执行cat命令查看这个文件的内容,也可以执行useradd -D命令查看默认值。这是以Ubuntu中以root用户身份登录系统产看的文件内容。
/etc/default/useradd文件中大概就是这些内容了,如下图所示:
文件里面的内容,意思如下表所示:
内容 | 说明 |
GROUP | 默认的用户组 |
HOME | 指定用户的家目录,默认值 |
INACTIVE | 密码过期后至无法使用该账号的天数,-1表示不启用 |
EXPLRE | 账号失效日期,不设置表示不启用 |
SHELL | 指定默认Shell |
SKEL | 指定用户家目录内容的参考路径 |
CREATE_MAIL_SPOOL | 在/var/spoll/mail中创建新用户的邮箱存储文件 |
其实/etc/default/useradd文件中指定的GROUP=100并不会生效。新用户的初始用户设置虽然是GROUP=100,即GID为100,但是在CentOS中不是这样的。在CentOS中默认的用户组和用户名相同,这种用户名的设置方式保密性会比较高,它不会参考/etc/default/useradd文件指定的GROUP值,因此这个设置选项在CentOS中是不会生效的。
二:命令创建用户时的小问题
使用useradd创建用户时,没有指定-m选项,但系统却创建了用户的家目录,这个原因如下:
这是因为/etc/login.defs设置了CREATE_HOME yes,表示用户同意创建家目录。创建用户时,/etc/skel目录下的文件或目录自动复制到用户的家目录中,原理图如下:
看看上述图中的文件,当你创建一个用户之后,/etc/skel目录下的所有文件和目录都会被复制到新用户的家目录中。你可以根据自己的需求设置这些文件。
在用户创建之后,新用户的信息会被记录在/etc/passwd和/etc/shadow文件中,里面有一些字段,这些含义需要知道下,下面是在Ubuntu中使用tail命令查看/etc/passwd和/etc/shadow文件内容,如下图所示:
上面图片文件中的信息被":"分为七个字段。
- 第一个字段:表示用户的名称,这里是sshd。
- 第二个字段: 如果是x就表示该用户登录LInux系统时必须使用密码,如果是空就表示该用户登录系统时不需要提供密码。这里是x,所以表示要求提供密码。
- 第三个字段: 表示用户的用户标识符(UID),这里是用户sshd的UID是129。
- 第四个字段: 表示用户所属群组的组标识符(GID),这里用户sshd的GID是65534.
- 第五个字段: 表示该用户的注释信息,这里是空白。
- 第六个字段: 表示该用户的家目录,这里是/home/user1。
- 第七个字段: 表示该用户登录系统后第一个要执行的进程,这里表示用户sshd默认使用的Shell是/sbin/nologin。
还用一个文件/etc/shadow,这个文件被":"分成了九个字段,含义如下:
- 第一个字段: 与/etc/passwd文件的第一个字段相同,也是表示用户的名称,所以这里是sshd。
- 第二个字段: 这个字段里的数据是用户密码,!!表示用户还没有指定密码,如果指定了密码这里会是一段加密的字符数据。
- 第三个字段: 表示的是最近修改密码的日期,这里的19518表示从1970年1月1日起累加的日期。
- 第四个字段: 表示密码不能被修改得天数(相对于第三个字段而言),0表示密码随时可以修改。如果你设置了10,那就是表示用户在10天内无法修改自己的密码。
- 第五个字段: 表示密码需要重新修改的天数(相对于第三个段而言),99999就表示没有强制修改密码的意思.
- 第六个字段: 表示密码需要修改的期限之前警告的天数(相对于第五个字段而言)。当你的密码快到期时,系统会发出警告去提醒你。这里的7表示系统会在密码到期的7天之内警告该用户。
- 第七个字段: 表示密码失效的日期,密码过期之后,系统会强制让你重新设置密码,然后才可以继续使用,。
- 第八个字段: 表示账号失效的日期,这个字段也是从1970年1月1日累加的天数。账号在这个字段规定的日期之后将不再使用.
- 第九个字段: 保留字段.
注意:早期用户的密码是存储在/etc/passwd文件的第二个字段中,但是由于保密性不高,所有的程序都能读取,密码很容易被窃取,所以后来就移动到了文件/etc/shadow的第二个字段中去,这两个文件的权限不一样.
下面我在Ubuntu中查看文件的默认权限,截图如下:
.