在Linux中,有三种用户:
  • Root 用户:也称为超级用户,对系统拥有完全的控制权限。超级用户可以不受限制的运行任何命令。Root 用户可以看做是系统管理员。
  • 系统用户:系统用户是Linux运行某些程序所必须的用户,例如 mail 用户、sshd 用户等。系统用户通常为系统功能所必须的,不建议修改这些用户。
  • 普通用户:一般用户都是普通用户,这些用户对系统文件的访问受限,不能执行全部Linux命令。

Linux支持用户组,用户组就是具有相同特征的用户的集合。一个组可以包含多个用户,每个用户也可以属于不同的组。用户组在Linux中扮演着重要的角色,方便管理员对用户进行集中管理。当一个用户同时是多个组中的成员时,在 /etc/passwd 文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。

根目录下的\etc文件夹主要包含系统配置文件和用户、用户组配置文件,我们可以在这里查看用户和用户组的详细信息。

与用户和组有关的系统文件: 

系统文件

说明

/etc/passwd 保存用户名和密码等信息,Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行。这个文件对所有用户都是可读的。
/etc/shadow /etc/shadow中的记录行和/etc/passwd中的相对应,他由pwconv命令根据/etc/passwd中的数据自动产生,它的格式和/etc/passwd类似,只是对密码进行了加密。并不是所有的系统都支持这个文件。
/etc/group 以记录行的形式保存了用户组的所有信息。

来看一下/etc/passwd文件的结构:

$cat /etc/passwd
root:x:0:0:Superuser:/:
daemon:x:1:1:System daemons:/etc:
bin:x:2:2:Owner of system commands:/bin:
sys:x:3:3:Owner of system files:/usr/sys:
adm:x:4:4:System accounting:/usr/adm:
uucp:x:5:5:UUCP administrator:/usr/lib/uucp:
auth:x:7:21:Authentication administrator:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:printer administrator:/usr/spool/lp:
sam:x:200:50:Sam san:/usr/sam:/bin/sh

可以看到,/etc/passwd文件中一行记录对应着一个用户,每行记录又被冒号分隔为7个字段,其格式和具体含义如下:

用户名:密码:用户ID:组ID:描述信息:用户主目录:用户Shell

对每个字段的说明:

字段 说明
用户名 用户名是惟一的,长度根据不同的linux系统而定,一般是8位。
密码 由于系统中还有一个/etc/shadow文件用于存放加密后的口令,所以在这里这一项是“x”来表示,如果用户没有设置口令,则该项为空。如果passwd字段中的第一个字符是“*”的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。
用户ID 系统内部根据用户ID而不是用户名来识别不同的用户,用户ID有以下几种:

  • 0代表系统管理员,如果你想建立一个系统管理员的话,可以建立一个普通帐户,然后将该账户的用户ID改为0即可。
  • 1~500系统预留的ID。
  • 500以上是普通用户使用。
组ID 其实这个和用户ID差不多,用来管理群组,与/etc/group文件相关。
描述信息 这个字段几乎没有什么用,只是用来解释这个账号的意义。在不同的Linux系统中,这个字段的 格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。
用户主目录 用户登录系统的起始目录。用户登录系统后将首先进入该目录。root用户默认是/,普通用户是/home/username。
用户Shell 用户登录系统时使用的Shell。

/etc/shadow文件的结构:

/etc$ sudo cat shadow
[sudo] password for test:
root:$6$W2kscbFB$RpaAn0nY..gG5.9L8lEcz7CW5j.v1RyLTjaZPHH/5zwskRibSeVUHSSkWxNcWLLFsV0K1gmap90Dzf6V894FJ1:16958:0:99999:7:::
daemon:*:16911:0:99999:7:::
bin:*:16911:0:99999:7:::
sys:*:16911:0:99999:7:::
sync:*:16911:0:99999:7:::
games:*:16911:0:99999:7:::
man:*:16911:0:99999:7:::
lp:*:16911:0:99999:7:::
mail:*:16911:0:99999:7:::

格式--用户名:密码:最近更改密码的日期:不可更改密码的天数:密码需要重新更改的天数:密码更改期限前的警告日期:密码过期的宽限时间:账号失效时间:保留字段

字段 说明
用户名 用户名是惟一的,长度根据不同的linux系统而定,一般是8位。
密码 经过加密的密码。如果字段中的第一个字符是“*”的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。
最近更改密码的日期

16911这种数字是因为是以1970年1月1日做为第1天,然后++得到的。

不可更改密码的天数 指定天数内用户无法修改密码
密码需要重新更改的天数 指定天数后必须更改密码
密码更改期限前的警告日期 用户登录系统的起始目录。用户登录系统后将首先进入该目录。root用户默认是/,普通用户是/home/username。
密码过期的宽限时间 账号过期后指定时间内还能接着使用
账号失效时间 超过指定时间账号自动被停用
保留字段 目前无意义,可能留着以后扩展用

/etc/group 结构:

/etc$ sudo cat group
[sudo] password for test:
root:x::
daemon:x::
bin:x::
sys:x::
adm:x::syslog,test
tty:x::
disk:x::
lp:x::
mail:x::
news:x::
uucp:x::
man:x::
proxy:x::

格式--组名称:密码:组id:成员

应该不需要解释了,只要注意"x"代表密码,具体密码存在shadow里即可。

 管理用户和组

下面是一些常用的管理用户和组的命令:  

命令 说明
useradd 添加用户。
usermod 修改用户信息。
userdel 删除用户。
groupadd 添加用户组。
groupmod

修改用户组信息。

groupdel

删除用户组。

默认的用户组通常用来管理系统用户,不建议将普通用户添加到这些用户组。使用groupadd命令创建用户组的语法为:

groupadd [-g gid [-o]] [-r] [-f] groupname

每个选项的含义如下:

选项 说明
-g GID 以数字表示的用户组ID。
-o 可以使用重复的组ID。
-r 建立系统组,用来管理系统用户。
-f 强制创建。
groupname 用户组的名称。

修改用户组

groupmod命令可以用来修改用户组

例如,将用户组 mygroup 重命名为 mygroup1:

$ groupmod -n mygroup1 mygroup

将mygroup用户组的ID改为1002:

$ groupmod -g  mygroup

删除用户组

通过groupdel命令可以删除用户组。

例如,删除developer组:

$ groupdel mygroup

删除之前注意用户组里是否还有成员,如果有而且当前组是此用户的主组时会报错:

groupdel: cannot remove the primary group of user 'test'

groupdel 仅仅删除用户组,并不删除与之相关的文件,这些文件仍然可以被所有者访问。

添加用户添加用户可以使用useradd命令,语法为:

useradd -d homedir -g groupname -m -s shell -u userid accountname

每个选项的含义如下:

选项 描述
-d homedir 指定用户主目录。
-g groupname 指定用户组。
-m 如果主目录不存在,就创建。
-s shell 为用户指定默认Shell。
-u userid 指定用户ID。
accountname 用户名。

如果不指定任何选项,系统将使用默认值。useradd 命令将会修改 /etc/passwd、/etc/shadow、and /etc/group 三个文件,并创建用户主目录。

下面的例子将会添加用户 test,并设置主目录为 /home/test,用户组为 testgroup,默认 Shell 为  Korn Shell:

useradd -d /home/test -g testgroup -s /bin/ksh test

注意:添加用户前请确认 testgroup 用户组存在。

用户被创建后,可以使用 passwd 命令来设置密码,例如:

passwd test
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

注意:如果你是管理员,输入 $ passwd username 可以修改你所管理的用户的密码;否则只能修改你自己的密码(不需要提供username)。

修改用户

usermod 命令可以修改现有用户的信息。usermod 命令的选项和 useradd 相同,不过可以增加 -l 选项来更改用户名。
下面的例子将用户 test的用户名修改为 test1,主目录修改为 /home/test1:

usermod -d /home/test1 -m -l test test1

前面说过用户的主组和附加组,那么如何修改主组和附加组呢?

修改主组:

usermod -g testgroup1 test

原来test用户的主组是testgroup,执行完上面的语句后主组变为testgroup1,注意'g'是小写。

修改附加组:

usermod -a -G testgroup test

-a是append的意思,将test用户添加到testgroup组中,testgroup成为test的附加组,如果添加多个附加组可以用逗号分隔,注意'G'是大写。

如果是删除操作把-a去掉即可,另外gpasswd命令也可以实现这类功能。

删除用户

userdel 命令可以用来删除现有用户。userdel 是一个危险的命令,请谨慎使用。
userdel 命令仅有一个选项 -r,用来删除用户主目录和本地邮件。例如,删除用户  test1:

userdel -r test1

Linux中的用户和用户组的更多相关文章

  1. linux 中更改用户权限和用户组的命令chmod,chgrp实例

    linux 中更改用户权限和用户组的命令实例; 增加权限给当前用户 chmod +wx filename chmod -R 777 /upload 用户组 chgrp -R foldname zdz ...

  2. Linux下的用户和用户组,文件权限:chown和chmod

    如下图所示,root权限下新建一个用户MasterBai, /etc/passwd文件中新加入一些信息 这个文件中,记录了该服务器的用户信息,如下图红色框起来的用户,就是我们自己创建的用户,而起来2- ...

  3. linux基础之用户及用户组管理

    本节内容 用户管理 1. 为什么需要用户? 1.linux是一个多用户系统 2.权限管理(权限最小化) 2. 用户相关文件 /etc/passwd -->用户基本信息 /etc/shadow - ...

  4. Linux中加入用户、删除用户时新手可能遇到的问题

    Linux中加入用户.删除用户时新手可能遇到的问题  1.创建新用户后切换到新用户:No directory, logging in with HOME=/     加入用户     #sudo us ...

  5. Linux中切换用户变成-bash4.1-$的解决方法【转】

    转自 Linux中切换用户变成-bash4.1-$的解决方法 - xia_xia的博客 - 博客频道 - CSDN.NEThttp://blog.csdn.net/xia_xia0919/articl ...

  6. 6-查看centos中的用户和用户组

    转载自:http://www.cnblogs.com/ermao0423/p/9510636.html 查看centos中的用户和用户组 1.用户列表文件:/etc/passwd/ 2.用户组列表文件 ...

  7. 查看centos中的用户和用户组和修改密码

    查看centos中的用户和用户组 1.用户列表文件: vim /etc/passwd/ 2.用户组列表文件: vim /etc/group 3.查看系统中有哪些用户: cut -d : -f /etc ...

  8. Linux中root用户找不到JAVA_HOME

    Linux中root用户找不到JAVA_HOME   在Ubuntu环境中安装好Java环境后设置环境变量:在/etc/profile中设置好了JAVA_HOME变量并引入到PATH中,用于Ubunt ...

  9. linux中的用户、群组和权限

     linux中的用户.群组和权限   新建用户natasha,uid为1000,gid为555,备注信息为“master”   groupadd -g 555 natasha useradd -u 1 ...

随机推荐

  1. MVC POST在ACTION上进行多个模型的数据绑定

    首先声明,接下来的东西并不符合本人认同的严谨的MVC模式. 用MVC做项目的过程中,越来越多的用到不严谨的MVC编程. 比如,在"cshtml"文件中写: @Html.Raw(DB ...

  2. mybatis- spring 批量实现数据导入数据库

    终于实现了ibatis的批量插入,此方法插入3000条数据,比单条插入可以节省一半的时间XML代码: <insert id="insertBatch" parameterTy ...

  3. p/invoke碎片--对数组的封送处理

    因为数组是引用类型,所以数组的处理根据数组元素的类型是否为“可直接传递到非托管代码”的类型而分为两种情况.主要目标是看内存是怎么变化的,是复制还是锁定. 数组中的元素是"可直接传递到非托管代 ...

  4. Ubuntu 14.04 安装SSH

    1.一般我们安装好ubuntu系统后,首先就是更换国内的ubuntu源,使得更新及安装软件速度更快 sudo cp /etc/apt/sources.list /etc/apt/sources.lis ...

  5. 带有runat="server" 的服务器控件通过 ClientID 获取Id

    带有runat="server" 的服务器控件 获取Id <input type="text" id="txtName" runat= ...

  6. 开发thinkphp的第一步就是给Application目录(不包括其下的文件)777权限, 关闭selinux

    开发thinkphp的时候, 总是会出现各种个样 的奇怪的毛病, 比如: 说什么Application目录不可写, 比如: 说什么 _STORAGE_WRITE_ERROR, 不能生成 Runtime ...

  7. 6. web前端开发分享-css,js移动篇

    随着移动市场的逐步扩大及相关技术的日趋完善,对前端开发提出了新的岗位要求,在继承前人成果的基础上需要在新的历史条件下有新的创新.移动端的开发,虽然没有IE6众多问题的折磨,但是多平台,多设备的兼容,也 ...

  8. [Tomcat] Tomcat的classloader

    定义 同其他服务器应用一样,tomcat安装了各种classloader(classes that implement java.lang.ClassLoader) Bootstrap | Syste ...

  9. 阿里提前批校招内推offer经历

    经过一个半月的阿里内推面试,今天终于收到了阿里的offer邮件 .阿里的内推面试一共有四轮,本人是7月19号投的内推邮件,8月28号收到了offer的邮件.首先本人谈谈内推的看法.内推是公司招聘人才的 ...

  10. 常见http错误码解读

    HTTP常见错误 HTTP 错误 400 400 请求出错 由于语法格式有误,服务器无法理解此请求.不作修改,客户程序就无法重复此请求. HTTP 错误 401 401.1 未授权:登录失败 此错误表 ...