查看原文
其他

我的Linux学习笔记·用户和组(1)

2017-04-09 阿现 生信媛

用户


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

 


下周的笔记会继续这周的内容,主要涉及组管理,以及如何通过修改系统文件完全手动创建一个新用户。

欢迎关注我们






您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存