Linux用户和组详解。

环境:Xshell6远程连接到Ubuntu18.04。

用户和组:

用户和组的概念应该还是比较好理解的。Linux是一个多用户多任务的操作系统,而肯定是少数有管理员权限的用户管理着所有用户。作为系统的管理员来说,用户创建,更改权限,用户组的创建,组的权限等等,都需要管理员的协助。

用户和组的账户管理:

用户管理

useradd
-c,用户说明信息。
-g,指定有效组。
-G,后面接用户加入的群组但不是该用户的有效组。
-M,强制不要建立用户家目录,是系统程序默认的。
-m,强制在/home文件夹下建立该用户的家目录。
-d,指定家目录,用绝对路径。
-s,指定shell,ubuntu默认是sh,建议用bash。
实例:
 sudo useradd -c helloworld -m -g group1 -G group2 group3

这是刚创建之后对应的用户信息。我没设置-s,这基本上都是常用的配置参数。
这里写图片描述

useradd配置的默认值,以及更改。

这是useradd的参考文档,用useradd -D打开。

hang@ubuntu:~$ useradd -D
GROUP=100                   预设的群组   
HOME=/home                  默认家目录所在的文件夹
INACTIVE=-1                 密码失效日,shadow的第7栏(-1代表永不失效)
EXPIRE=                     账号失效日,shadow的第8栏
SHELL=/bin/sh               默认shell
SKEL=/etc/skel              用户家目录的内容数据参考目录
CREATE_MAIL_SPOOL=no        是否建立邮箱

这个文件夹所在位置是/etc/default/useradd,可以适当修改。

usermod:

和useradd非常的像,一般用来useradd少写的参数,用usermod将对应的参数补上。

userdel:

删除用户。

user [-r] username

-r,连同用户的家目录也一起删除。

passwd:

passwd新手用的时候,仅仅在创建用户后

passwd username

接下来会提示输入两次密码。
需要加深了解的话,可先学习/etc/shadow里的内容,然后再看passwd 创建密码时参数与之对应的信息。

组管理

groupadd:

一般来说对于普通用户,仅有一个参数-g 指定GID的,还有一个参数-r,建立系统群组的。

groupadd 【-g gid】 【-r】组名
groupmod:同usermod
groupdel:
groupdel groupname

即可,但是如果有其他用户在使用改组,那么就不能删去。

gpasswd:
gpasswd groudname

无参数时,只是给groupname设置一个秘密。

gpasswd 【-A user】【-M user1,user,....】 groupname

-A:将groupname的控制权交给后面的组员。
-M:将某些账号加入这个群组。
-r:将groupname的秘密移除。
-R:让groupname的秘密栏失效。

Linux辨别用户和组:UID,GID:

应该很容易就看出来,UID–>user id,GID–>group id。Linux不会通过username来辨别你是谁,在/etc/passwd的文件里保存着每一个用户对应的UID,组也一样组名和GID的对应关系存放在/etc/group里。

UID

/etc/passwd解析。

下面就以user1和hang用户为例,user1的创建过程见下面:UID对应关系小实验。
这里写图片描述
可以看出来两个用户都是以6个:分割开7块(每块对应的我用【块号】表示):

  • 【1】:用户名
  • 【2】:密码,因为这个文件的权限是每个用户都可以读取的,所以密码以加密的方式存放在/etc/shadow中。
  • 【3】:UID,管理员一般是0,1~499是系统保留使用的,500~ 是使用者使用的创建用户是可以自行指定。
  • 【4】:GID,这是用户对应的组ID,可在/etc/group中找到对应关系,与/etc/passwd类似,不多做赘述。
  • 【5】:用户信息栏说明,创建用户是可选参数。
  • 【6】:该用户的家目录。
  • 【7】:shell,不同版本的Linux对应的默认shell不同,个人觉得bash方便一点,ubuntu18.04默认为sh,ssh时不太好用。
想深入的可以自行了解/etc/shadow,这个文件只能用管理员权限打开,里面有单向加密后的密码信息。
UID对应关系小实验。

请先了解,Linux文件权限的一些内容:https://blog.csdn.net/qq_42776455/article/details/82660113

  • 先创建一个用户:user1

    hang@ubuntu:~$ sudo useradd -m user1
    hang@ubuntu:~$ sudo passwd user1 
    Enter new UNIX password: 
    Retype new UNIX password: 
    passwd: password updated successfully
  • 在/etc/passwd中查看user1的UID:
    这里写图片描述

  • 可以看到用户名是user1,UID:1001
    用该用户新建一个文件,查看文件所属用户(下图):
    这里写图片描述
    此时文件所有者是user1,没问题。

  • 用管理员权限强行改掉,user1的UID。
    这里写图片描述

  • user1的UID被强行改为9999后,查看原来文件的所有者。
    这里写图片描述
    原来是user1位置的现在都变成了1001,这是user1更改之前的UID。现在的UID是9999,可见当用户创建文件的时候,和文件一起关联的不是用户名,而是UID(GID同UID)。

GID

/etc/group解析

讲解模式同上UID。打开/etc/group
这里写图片描述

  • 【1】:组名。
  • 【2】:群组密码,一般很少设定。
  • 【3】:GID。
  • 【4】:此群组里的用户。

一个用户多个组问题

为什么说是问题呐,因为我们已经知道了一个新用户创建的时候,如果不指定组的话会默认新建一个和用户名一样的组。但是如果这个已经有组的用户再去加入另外一个组那么那个组是这个用户现在有效组或者说是首要组(就是创建文档时和文档关联的组名是哪个)?这就是问题所在。

创建对应的用户和组。

group1和group2对应的UID分别是1002,1003。并且组内无其他用户。(创建用户时最好设置密码)
这里写图片描述
现将group2这个用户加入group1中。
这里写图片描述
接着登录group2这个用户,用groups命令查看当前用户所处的组。

group2@ubuntu:/home$ groups
group2 group1

可以看到,group2用户的组是两个,一个是创建group2用户时自己创建出来的,group1组是刚手动添加的。
那么那个组是group2用户的有效组吗?那么用group2用户来创建文件,查看文件的所有组就知道了。

group2@ubuntu:~$ touch test
group2@ubuntu:~$ ls -al
-rw-rw-r-- 1 group2 group2    0 Sep 10 18:15 test

所有者是group2,所属组是group2,其实这里就可以看出来,groups命令现实出来的第一个组就是有效组。
当然了,如果用户同时在多个中那么有效组也是可以切换的,用命令,newgrp(鸟哥的私房菜)这个我没弄成功。我在网上重新找了一个更改用户组的方法(-g,后跟的参数就是有效用户组,-G只是将用户加入改组。):

ubuntu:~$ sudo usermod -g group1 group2

当默认和用户名一样的有效用户组被更改,而原来的组内没其他人了,也就自动消失了。

group2@ubuntu:~$ groups
group1

查看原来的文件,所有组是否发生变化。

group2@ubuntu:~$ ls -al
-rw-rw-r-- 1 group2 group1    0 Sep 10 18:15 test

所有组已经从原来的group2改为group1了,这就是有效组发生的变化,但所有者没变。

想深入的可以自行了解/etc/gshadow,这个文件只能用管理员权限打开,里面有单向加密后的密码信息。
Logo

更多推荐