Linux常用命令(用户及用户组相关操作)

用户及用户组基础知识请参考《Linux常用命令(用户及用户组基础知识)》

 

相关文件结构

/etc/passwd文件结构

例:root:x:0:0:root:/root:/bin/bash

1

2

3

4

5

6

7

root

X

0

0

root

/root

/bin/bash

账号名称

密码

UID

GID

用户信息说明

主文件夹

Shell

 

/etc/shadow文件结构

例:root:$6$yMuqjFCP$p6z3v3bTa842XU/HRjmWALrXv723ZTepEgwT1G2M3kSI2M7hyGak6api1LhJu8smwz5K8r8MER1O..5hjWM7R1:18340:0:99999:7:::

1

2

3

4

5

6

7

8

9

root

$6$yMuqjFCP$p6z3v3bTa842XU

/HRjmWALrXv723ZTepE

gwT1G2M3kSI2M7hyGak6api1LhJu8

smwz5K8r8MER1O..5hjWM7R1

18340

0

99999

7

账号名称

密码(加密后)

最近修改密码的日期

密码不可修改的日期

密码需要重新修改的日期

密码需要修改前的警告天数

密码过期后的宽限时间

账号失效日期

保留

 

/etc/group文件结构

例:adm:x:4:syslog,kehan

1

2

3

4

adm

x

4

syslog,kehan

用户组名称

用户组密码

GID

用户组支持的账号名称

 

用户组的查看和切换

初始用户组(effective group)

每个用户在他的/etc/passwd里面的第四列有所谓的GID,那个GID就是所谓的“初始用户组”。当用户登录系统时,立刻就拥有这个用户组的相关权限。初始用户组是不需要在/etc/group的第四个字段写入该账号的。

 

有效用户组(initial group)

在/etc/group的第四个字段中配置了账号,该账号就加入了这个用户组,这个用户组就是该账号的有效用户组。

 

有效与支持用户组的查看:groups

Linux常用命令(用户及用户组相关操作)

groups命令显示的第一个用户组就是root的有效用户组,这时候root用户创建的文件或目录,所属的用户组就是root的有效用户组,也就是root。

 

切换有效用户组:newgrp

为root添加一个用户组后,groups命令查询结果如下:

Linux常用命令(用户及用户组相关操作)

用newgrp命令切换有效用户组:

Linux常用命令(用户及用户组相关操作)

此时有效用户组变更为dbgroup,此时创建的文件或目录,所属用户组就是dbgroup了。

Linux常用命令(用户及用户组相关操作)

 

新增用户:useradd

useradd [-u UID] [-g 初始用户组] [-G 次要用户组]  [-mM] [-c 说明栏] [-d 主文件夹绝对路径] [-s shell] 用户账号名

参数:

-u:后面接的是UID,是一组数字。直接指定一个特定的UID给这个账号。

-g:后面接的用户组名就是前面提到的初始用户组,该用户组的GID会被放置到/etc/passwd的第四个字段内。

-G:后面接的组名则是这个账号还可以加入的用户组,这个参数会修改/etc/group内的相关数据。

-M:不要创建用户主文件夹(系统账号默认值)。

-m:创建用户主文件夹(一般账号默认值)。

-c:这个是/etc/passwd的第五列说明内容,可以随便设置。

-d:指定某个目录成为主文件夹,而不要使用默认值,要求使用绝对路径。

-r:创建一个系统的账号,这个账号的UID会有限制(参考/etc/login.defs)。

-s:后面接一个shell,若没有指定则默认是/bin/bash。

-e:后面接一个日期,格式为“YYYY-MM-DD”,此选项可写入shadow第八字段,即账号失效日的设置选项。

-f:后面接shadow的第七字段选项,指定密码是否会失效。0为立刻失效,-1为永不失效(密码只会过期而强制于登录时重新设置而已)。

不加参数地创建一个用户看系统做了哪些事情:

Linux常用命令(用户及用户组相关操作)

1、在/etc/passwd里面创建一行与账号相关的数据,包括创建UID/GID/主文件夹等。

2、在/etc/shadow里面将此账号的密码相关参数填入,但是尚未有密码。默认情况下账号密码永不过期。

3、在/etc/group里面加入一个与账号同名的目录作为用户的主文件夹,且权限为700.

还需要执行“passwd 用户名”命令设置用户密码后创建用户才算结束。可以看到此时密码字段是!,此时conan这个新账号是不能登录的,但是可以从root用户切换过去。

Linux常用命令(用户及用户组相关操作)

 

useradd默认参数

useradd参考文件(useradd默认参数来源):/etc/default/useradd

Linux常用命令(用户及用户组相关操作)

用useradd -D也可以调出默认配置。

Linux常用命令(用户及用户组相关操作)

1、GROUP=100:新建账号的初始用户组使用GID为100

系统上面GID为100即是users这个用户组,这个设置意思是让新用户账号的初始用户组为users。但是不同的Linux表现不一样,有的Linux版本默认的用户组名为与账号名相同的用户组。这是因为针对用户组的角度有两种不同的机制:

1、私有用户组机制:系统会创建一个与账号一样的用户组给用户作为初始用户组。这种用户组的设置机制会比较有保密性,这是因为用户都有自己的用户组,而且主文件夹权限将会设置为700(仅有自己可进入自己的主文件夹之故。使用这种机制将不会参考GROUP=100这个配置。

2、公共用户组机制:就是以GROUP=100这个设置值作为新建账号的初始用户组,因此每个账号都属于users这个用户组,且默认主文件夹通常的权限会是“drwxr-xr-x”,由于每个账号都属于users用户组,因此大家可以互相分享主文件夹内的数据。

2、HOME=/home:用户主文件夹的基准目录(basedir)

用户的主文件夹通常是与账号同名的目录,这个目录将会放在此设置值的目录后面。所以conan的主文件夹就是/home/conan。

3、INACTIVE=-1:密码过期后是否会失效的设置

0代表过期后立刻失效,-1代表密码永不失效,30代表过期后30天失效。

4、EXPIRE=:账号失效日期

就是/etc/shadow文件内的第八字段,可以直接设置账号在哪个日期后直接失效,而不理会密码的问题,通常不会设置此选项。

5、SHELL=/bin/sh:默认使用的shell程序文件名

6、SKEL=/etc/skel:用户主文件夹参考基准目录

指定用户主文件夹参考基准目录,新用户主文件夹的内容都是从/etc/skel中拷贝过去的。

7、CREATE_MAIL_SPOOL=no:是否创建用户的mailbox

 

UID/GID默认密码参数

UID/GID密码参数的参考文件/etc/login.defs

Linux常用命令(用户及用户组相关操作)

mailbox所在目录

MAIL_DIR /var/mail:用户默认邮件信箱放置目录。

shadow密码第4,5,6字段内容

PASS_MAX_DAYS  99999:/etc/shadow的第5列,更改密码后需要再次更改密码的天数

PASS_MIN_DAYS   0:/etc/shadow的第4列,更改密码后不可更改密码的天数

PASS_WARN_AGE 7:/etc/shadow的第6列,密码过期前会警告的天数

UID/GID指定数值

UID_MIN               1000:一般账号最小UID

UID_MAX                     60000:一般账号最大UID

GID_MIN               1000:一般用户组最小GID

GID_MAX                     60000:一般用户组最大GID

系统计算新一般用户账号ID逻辑:先参考UID_MIN取得最小值,由/etc/passwd查找最大的UID数值,将两者相比,找出最大的那个加1就是新账号的UID。如果当前最大UID是2000,那么新UID就是2001,1000~1999就会空出来。

如果是创建系统账号,那么就会找出比500小的最大的那个UID+1.

用户删除与密码设置值

USERGROUPS_ENAB yes:如果使用userdel去删除一个账号,且该账号所属的初始用户组已经没有人隶属于该用户组了,那么就删除掉该用户组。

CREATE_HOME yes:我的系统上没有这个参数,所以没有自动创建新用户的主文件夹,加上这个配置后再创建一般用户,系统会自动创建新用户的主文件夹。

所以在使用useradd创建账号时至少会参考以下三个文件:

/etc/default/useradd

/etc/login.defs

/etc/skel/*

 

修改密码:passwd

所有用户都可以用passwd修改自己的密码。

只有root用户可以用“passwd 账号”来修改其他账号的密码。

参数:

-l:锁定账号,通过在/etc/shadow第二列最前面加上!使密码失效。

-u:解锁账号,和-l相对。

-S:列出密码相关参数,即shadow文件内的大部分信息。

-n:后面接天数,shadow的第4字段,多久不可修改密码天数。

-x:后面接天数,shadow的第5字段,多久内必须要改动密码。

-w:后面接天数,shadow的第6字段,密码过期前的警告天数。

-i:后面接“日期”,shadow的第7字段,密码失效日期。

root使用passwd命令可以设置各种各样的密码,几乎不会受密码复杂度的限制。

chage -l 账号名可以用来替代passwd -S 账号名,列出的信息更易读。

Linux常用命令(用户及用户组相关操作)

 

修改用户参数:usermod

usermod username

参数:

-c:后面接账号的说明,即/etc/passwd第五列的说明,可以加入一些账号的说明。

-d:后面接账号的主文件夹,即修改/etc/passwd的第6列。

-e:后面接日期,格式是YYYY-MM-DD,也就是在/etc/shadow内的第8个字段数据。

-f:后面接天数,为shadow的第7字段,密码过期后的账号宽限时间。

-g:后面接初始用户组,修改/etc/passwd的第四个字段,即是GID的字段。

-G:后面接次要用户组,修改这个用户组能够支持的用户组。

-a:与-G合用可增加次要用户组的支持而非设置(usermod -G dbgroup -a root)。

-l:后面接账号名称,即是修改账号名称,/etc/passwd的第一列。

-s:后面接Shell的实际文件,例如/bin/bash或/bin/sh等。

-u:后面接UID数字,即/etc/passwd第三列的数据。

-L:暂时将用户的密码冻结,让他无法登录,其实仅改/etc/shadow的密码。

-U:将/etc/shadow密码列的!去掉。

 

删除用户:userdel

userdel [-r] username

参数:

-r:连同用户的主文件夹一起删除。

删除的用户数据有:

用户账号/密码相关参数:/etc/passwd,/etc/shadow

用户组相关参数:/etc/group,/etc/gshadow

用户个人文件数据:/home/username,/var/spool/mail/username

想要完整删除某个用户,最好先用find / -user username查出系统内属于username的文件,删掉这些文件后再执行userdel -r username。

 

查询用户相关信息:id

查询自己的相关GID/UID等信息:id

查询其他账号的相关GID/UID等信息:id username

 

新增用户组:groupadd

groupadd 用户组名

参数:

-g:后面接某个特定的GID,用来直接给予某个GID。

-r:新建系统用户组。

 

修改group相关参数:groupmod

groupmod [-g gid] [-n group_name] 用户组名

参数:

-g:修改既有的GID。

-n:修改既有的组名。

不要随意修改GID,容易造成系统资源的混乱。

 

删除用户组:groupdel

groupdel groupname

只有没有账号以groupname为初始用户组的情况下才可以删除该用户组。

 

切换用户:su

su - [username]

不带username代表这切换到root用户。

不带-的情况下shell不会加载目标username的环境变量。

退出切换的用户:exit

Linux常用命令(用户及用户组相关操作)

 

参考资料

《鸟哥的Linux私房菜基础学习篇(第三版)》