我的Linux学习笔记·用户和组(1)
用户
Linux是一个多用户多任务操作系统。我们要想登入这个系统并使用相关的资源,必须拥有账号和密码。引入用户的机制,一方面利于系统对资源进行管理和分配,维护系统安全;另一方面也利于文件的管理,保护用户的文件安全。
每一个用户都有自己的UID。我们在登录系统时,输入用户名(sxy),机器就会自动将其解析成UID(500),然后提示我们输入密码。若密码认证通过,则成功登入系统。
我们可以通过id命令来查看用户的UID及其他一些基本信息。
在linux中用户可以分为管理员和普通用户两个类别。
管理员(root):
root具有最高权限,它可以使用系统的所有资源甚至将系统销毁。其uid为0。
和普通用户不同,管理员的家目录在/root,而普通用户的家目录都在/home/USER下。
普通用户:
普通用户的uid范围是1-65535,它又可以分为系统用户和一般用户。
系统用户:uid范围1-499,保障系统的运行,一般没有登录密码。
一般用户:也就是我们使用账号和密码登入的用户啦。uid范围500-60000。
两个重要文件
之前我们提到过,linux系统的一个重要思想是一切皆文件。说到用户,就不得不提一下和用户相关的两个重要文件:
/etc/passwd和/etc/shadow。
这两个文件对整个系统中的所有用户和密码进行管理,是linux系统中最重要的文件之一。如果它们出了问题,轻则某些用户无法登陆,重则整个系统无法启动。
/etc/passwd
该文件记录了系统中所有的用户信息,由“:”分割成7个字段。
1. account: 用户名。代表用户账号的字符串,如root, sxy等;
2. password: 密码。用户的登录密码。Linux中密码都存放在/etc/shadow中,此处以x代替;
3. UID: 用户名ID。这里我们可以看见root的UID处为0,用户sxy的UID为500,1-499是系统预留给系统用户的,当我们创建新用户时,若不指定UID,则默认从500开始依次向后分配UID;
4. GID:基本组ID。用户的基本组,具体的组信息存放在/etc/group文件中;
5. comment: 用户注释信息,可以注释用户的一些信息如地址电话等,通常为空;
6. HOME DIR:家目录。这里可以看到,root的家目录是/root,普通用户的家目录是/home/USER;
7. shell: 用户的默认shell。CentOS发行版的默认shell是bash,此处root和sxy等用户的默认shell是/bin/bash,而系统用户的是/sbin/nologin,这代表该用户无法登录。
/etc/shadow
该文件主要存放用户的密码,由“:”分割成9个字段。普通用户是没有权限查看该文件的,我们切换到管理员查看该文件的内容。
1. account:用户名;
2. encrypted password:加密密码;
使用md5加密,分为以$隔开的3个字段,第2个字段为杂质,在加密前将杂质加入密码中,之后再进行加密,第3个字段为加密后的md5码;
md5是常用的单向加密方式,可以由明文取得密文,但反之不行,可以使用md5sum获取md5码。
3. 上次更改密码的时间:在linux系统中经常会用到linux时间,即距离1970年1月1日0时0分0秒的时间。这个字段的数字就是上次修改密码的时间距离1970年1月1日的总天数。
4. 修改密码后再次修改密码需要经过多少天:默认是0,即不需等待,可连续修改密码;
5. 密码的有效期:即密码修改后在多少天内有效,超过一定时间后必须重新设置密码。默认99999,可以认为永不到期,嗯,除非你有意把密码世代相传;
6. 密码到期前警告:此处为7,即密码到期7天前,系统会给予警告;
7. 账号失效期限:假如此处为7,则密码到期7天后用户还未修改密码则会被锁定。我们的系统中此处为空;
8. 账号的有效期限:同样按照距离1970年1月1日的天数计算。在此天数内账号有效,超过日期则失效;
9. 保留用,无意义。
用户管理命令
Linux用户管理常用的命令主要有以下四个:useradd, userdel, usermod和passwd。
useradd:添加新用户
格式:
useradd [options] USERNAME
选项:
-u: 手动指定UID;一般用户,ID号大于等于500;
-g: 指定 基本组 ;指定的基本组必须事先存在;
-G: 指定 额外组 ;可以一次指定多个(组之间以逗号隔开);且组需要事先存在
-c: 指定注释信息;可以用""引起来;
-d: 指定家目录 /path/somewhere;
-s: 指定shell路径;echo $SHELL可以查看用户默认shell;
-M: 不为用户创建家目录;即使/etc/login.defs中CREATE_HOME项为Yes;
关于/etc/login.defs 文件的详细内容可以参见http://blog.csdn.net/u010181136/article/details/17436407
-r: 添加系统用户;
举例:
我们创建一个用户名为sxy2,UID为1000的用户,并为其设置密码。
useradd –u 1000 sxy2
创建完成后发现/home下新建了sxy2的家目录,且/etc/passwd中最后一行新添加了sxy2的信息。
使用passwd命令可以更改用户的密码,我们要修改用户sxy2的密码,则
passwd sxy2
按照提示,输入两次新密码即可。
新用户sxy2创建完成,尝试登陆一下,一切正常。
userdel:删除用户
格式:
userdel [option] USERNAME
选项:
-r: 删除用户默认保留用户的家目录;使用-r选项,删除用户的同时删除家目录;
举例:删除用户sxy2,同时删除其家目录
userdel –r sxy2
使用-r选项,发现sxy2的家目录也被删除,当然,/etc/passwd下sxy2的信息也被抹去。
usermod:修改用户账号属性
格式:
usermod [option] USERNAME
选项:
各个选项基本与useradd一致
-a -G: 把用户追加到某些组中,不使用-a选项会覆盖之前的附加组;
-d: 修改用户的家目录,通常和-m选项一起使用
-g: 修改用户的基本组,改组需事先存在;
-l: 修改用户名;
-L: 锁定用户账号;-U: 解锁用户账号;
-s: 修改用户的shell;
-u: 修改用户的uid;
举例:
修改用户sxy1的家目录为/home/test:
usermod -md/home/test sxy1
修改用户sxy1的UID为1000:
usermod -u 1000 sxy1
passwd:修改用户密码
格式:passwd [USERNAME]
选项:
--stdin: 从标准输入中读取密码并修改用户密码
echo "password" | passwd --stdin user(ubuntu不支持此选项)
-l: 锁定用户;
-u: 解锁用户;
-d: 删除用户密码;
举例:修改sxy1的密码为sxy1234,从标准输入读取密码:
echo "sxy1234" | passwd --stdin sxy1
下周的笔记会继续这周的内容,主要涉及组管理,以及如何通过修改系统文件完全手动创建一个新用户。
欢迎关注我们