Linux帐号管理详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux帐号管理详解相关的知识,希望对你有一定的参考价值。

参考技术A 对于Linux管理者来说,“帐号管理”是再也普通不过的一个环节了,但每次都要去查一大本的手册实在是很浪费时间。我还是老老实实地花点心思把这些常用的功能都整理成一份文档,方便以后的使用和学习,以后也都会继续这样做下去。

本文的所有案例与说明都是基于Ubuntu 16.04.3 LTS 64位操作系统,如果你的操作系统与我的不一样,可能会出现不一样的结果。但Linux的原理都是通用的,善于使用man可以帮助你更好的管理你的操作系统。

上图一共列出了9个相关文件,但这里我只重点讲解前三个文件,也即是 /etc/passwd、/etc/shadow 与 /etc/group。

1、/etc/passwd

User account information. --(明文的)用户账号信息

这个文件每一行都代表一个帐号,有几行就代表有几个帐号在你的系统中!不过需要特别注意的是,里面很多帐号本来就是系统正常运行所必须的,我们可以简称它为系统帐号。这些帐号都是你不能随便删除的!

通过查看passwd(5)手册可以查看/etc/passwd的文件结构:

文件结构说明:

“/etc/passwd” 第二项的内容说明

2、/etc/shadow

Secure user account information. -- 安全加密的用户账号信息

通过查看shadow(5)手册也可以查看/etc/shadow的文件结构:

如shadow(5)中所述,这个文件中被 “:” 分隔的每项含义如下。

3、/etc/group

Group account information.  -- 组信息

通过查看group(5)手册也可以查看/etc/group的文件结构:

如group(5)中所述,这个文件中被“:”分隔的每项含义如下。

注意:

“/etc/gshadow” 为 “/etc/group” 提供了与 “/etc/shadow” 相似的功能,但没有被真正地使用。

4、/etc/gshadow

Secure group account information. -- 安全加密的组信息

5、/etc/default/useradd

Default values for account creation.  -- 创建用户时的默认设置

6、/etc/skel/

Directory containing default files.  -- 用户主目录的默认内容

7、/etc/subgid

Per user subordinate group IDs.

8、/etc/subuid

Per user subordinate user IDs.

9、/etc/login.defs

Shadow password suite configuration.

1、添加用户 -- useradd

useradd -- create a new user or update default new user information.

常用参数:

例1:最简单的例子

例2:创建一个可以使用的帐号

例3:查看useradd默认设置

使用useradd创建用户时还会参考文件/etc/login.defs的设置,比如UID/GID的指定数值、用户主文件夹设置值、用户删除与密码设置值等,这里也不做深入讨论了。

2、用户密码管理 -- passwd

passwd - change user password

常用参数:

3、用户密码管理 -- chage

chage - change user password expiry information

4、用户信息修改 -- usermod

usermod - modify a user account

当然,以上的修改你也可以通过手动修改相关的配置文件来达到一样的目的。

5、删除用户 -- userdel 

userdel - delete a user account and related files

注意:

1)一般而言,该帐号如果只是暂时不启用的话,那么将/etc/shadow里面帐号失效日期(第八字段)设置为0就可以让该帐号无法登录,但所有相关的数据都会留下来。使用userdel的时候通常是你真的确定不要该用户在主机上面用任何数据了!

2)如果想要完整地将某个帐号删除,最好可以执行userdel -r username之前,先以“find / -user username”查出整个系统内属于username的文件,然后再进行删除。

1、初始用户组(initial group)与 有效用户组(effective group):

在/etc/passwd里面的第四列有一个所谓的GID,它就是“ 初始用户组 ”。也就是说,当用户登录系统,立刻就拥有这个用户组的相关权限的意思。

有效用户组:即帐号当前(实时)所使用的用户组。

次要用户组:次要用户组就是除了用户的初始用户组外的其它所属组,在/etc/group的最后一个字段中所设置,可以有多个(多个用逗号','隔开)。

使用usermod -g可以修改初始用户组,而使用usermod -G则可以修改次要用户组。

例1:修改用户次要用户组

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

在这个输出的信息中,可知道nosee这个用户同时属于nosee及users这两个组,而且,第一个输出的即为“ 有效用户组 ”。也就是说,上面例子中的有效用户组为nosee。

2、有效用户组的切换 -- newgrp

上面例子中,nosee的有效用户组从nosee转变成了users。

现在我们来深入讨论下newgrp这个命令,这个命令可以更改目前用户的有效用户组,而且是另外以一个新的shell来提供这个功能。因此如果你想要回到原本的环境中,只需要输入exit即可。

3、新增用户组 -- groupadd

groupadd - create a new group

常用参数:

4、用户组参数修改 -- groupmod

groupmod - modify a group definition on the system

常用参数:

注意:不要随意改动GID,容易造成系统资源的错乱。

5、删除用户组 -- groupdel

groupdel - delete a group

注意,只有在/etc/passwd内没有任何用户使用该用户组的作为初始用户组的时候,才可以成功删除。

6、用户组管理员功能 -- gpasswd

gpasswd - administer /etc/group and /etc/gshadow

1)系统管理员(root)的常用参数

2)用户组管理员(Group administrators)的常用参数

1、su

su - change user ID or become superuser

su是最简单的身份切换命令了,它可以进行任何身份的切换。

常用参数:

注意:

1)这个su的用法当中,有没有加上“-”差很多的,转为涉及login-shell与not-login shell的变量读取方法。即想要完整的切换到新用户的环境,可以利用“su - username”或“su -l username”。

2)使用root切换到任何用户时,都不需要输入密码

3)当从其它用户切换到root用户时都必须输入root的密码,这样root的密码就很容易流传出去,这是很不妥当的,所以才会有sudo这个命令的出现。

2、sudo

sudo, sudoedit — execute a command as another user

sudo的执行仅需要自己的密码,甚至可以设置不需要密码即可执行sudo。由于sudo可以让你以其他的用户身份执行命令(通常是root的身份),因此并不是所有人才能执行sudo,而是仅有/etc/sudoers内的用户才能够执行sodu这个命令。

/etc/sudoers文件内容如下:

常用参数:

例:使用nosee的身份在/home/nosee/目录下新建一个test文件

sudo的执行流程:

1)当用户执行sudo时,系统于/etc/sudoers文件查找该用户是否有执行sudo的权限;

2)若用户具有可执行sudo的权限后,便让用户输入自己的密码来确认;

3)若密码输入成功,便开始进行sudo后续接的命令(但root执行sudo时不需要输入密码);

4)若欲切换的用户与执行者身份相同,那也不需要输入密码。

因为/etc/sudoers文件有一定的规则,所以我们一帮不直接用vi去编辑。一般,我们都是使用visudo来修改这个文件。

3、visudo

因为/etc/sudoers是有语法的,如果设置错误那会造成无法使用sudo的不良后果,因此才会使用visudo去修改。

一般来说,visudo的设置方式有几种简单的方法,正面我们以几个简单的例子来说明:

1)单一用户可以进行root的所有命令与sudoer文件语法

例:让用户nosee可以使用root的所有命令

2)利用用户组及免密功能处理visudo

例:让nosee用户组可以使用root的所有命令,并且不需要输入密码

注意:用户组的表示只需要在前面加一个百分号%即可,NOPASSWD则是免密的关键字。

3)有限制的命令操作

例:让user1用户仅能使用passwd这个命令帮root修改其他用户的密码

注意:最后一个参数一定要用绝对路径才行,否则visudo会出现语法错误。

但这里有个可怕的地方,就是用户user1竟然也可以去修改root的密码了,这是不应该允许发生的,为了避免上述的问题,应该使用下面的这种配置:

上面参数的意思是,用户user1可以执行“passwd 任意字符串”,但是“passwd”与“passwd root”两个命令除外。

4)通过别名设置visudo

5)sudo的时间间隔问题

两次执行sudo的间隔时间在5分钟内,那么再次执行sudo时就不需要再次输入密码。

6)sudo搭配su的使用方式

很多时候我们需要大量执行很多root的工作,所以一直sudo觉得麻烦。这里有一个变身root用户的办法,而且还不会外泄root密码,前提是你要非常信任你将要为他们做此次设置的用户。

1、查看用户当前所用的shell

1)实时查看当前进程中使用的shell种类:推荐

2)最常用的查看shell的命令,但不能实时反映当前shell

3)环境变量中shell的匹配查找

4)口令文件中shell的匹配查找

2、强制踢出已登录用户

或也可以给他发送一条信息。

3、adduser

adduser也可以用于用户的添加,感觉兴趣的同学可以自行去查阅相关的资料。

1、《鸟哥的Linux私房菜基础学习篇》-- 鸟哥

2、  Debian官方参考手册

如发现有写得不对或不好的地方非常欢迎到评论区指出与交流,感谢阅读!    

——《完》

Linux用户管理详解

Linux用户管理详解

1Linux中用户和组的标识

说明:Linux系统是基于用户身份对系统的资源进行管理的操作系统

 

1)用户帐号:UIDUser Identity,用户标识号)

2)超级用户在任何Linux系统中UID=0

3)系统用户在不同版本Linux中的UID范围:UID:1-499UID:1-999

4)普通用户在不同版本Linux中的UID范围:UID:500-65535UID:1000-65535

 

5)组帐号:GIDGroup Identify,组标识号)

组可以分为:初始组(私有组)和附加组(公共组)

6)组的GID范围和上面的普通用户UID范围相同,每创建一个普通用户,默认会生成一个和用户名相同的用户组且UIDGID也相同

 

2、用户和组相关文件

1)用户信息文件 /etc/passwd

[[email protected] ~]# vim /etc/passwd

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

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

…………………………………省略若干

 

2)用户信息文件/etc/passwd详细介绍

用户信息文件内容全部是以冒号进行分割的,详细介绍如下:

第一列:用户名

 

第二列:密码占位符

 

第三列:用户 ID UID

0 :超级用户的 UID,只要 UID 0 就是超级用户。

1-499:系统用户的范围,此范围的用户不能用于登录系统,只能用于软件服

务运行使用,其中 1-99 是系统保留的账户,系统自动创建。100-499 是预留给用户创建系统用户的。

500-65535:普通用户 UID。建立的普通用户 UID 500 开始,最大到 65535

这些用户足够使用了,但是如果不够也不用害怕,2.6.x 内核以后的 Linux 系统用户 UID 已经可以支持 232次方这么多了。

 

第四列:组 IDGID),添加用户时,如果不指定用户的初始组,则会自动创建和用户名相同的组。

 

第五列:用户描述信息

 

第六列:用户家目录,例如超级级管理员 root 的家目录为/root/ ;普通用户的家目录 /home/***

 

第七列:登录 shell 类型 /bin/bash 能登录系统;/sbin/nologin不能登录系统

 

3)用户密码文件/etc/shadow

 [[email protected] ~]# vim /etc/shadow

root:$6$OmNu6a62J4t2sFEP$7FzLpbcwSs4TKRAtC9KOgTWvmX/dSphwBJnWOtLjG.sHgn4iMrEmL.T.dlC9am66i3xC4s4Mu5ENpxBEcTe6y1::0:99999:7:::

bin:*:17110:0:99999:7:::

daemon:*:17110:0:99999:7:::

adm:*:17110:0:99999:7:::

lp:*:17110:0:99999:7:::

sync:*:17110:0:99999:7:::

shutdown:*:17110:0:99999:7:::

…………………………………省略若干

 

4)用户密码文件/etc/shadow文件详细介绍

用户密码文件/etc/shadow文件内容也是以冒号分割的,详细介绍如下:

第一列:用户名

 

第二列:加密密码我们也可以在密码前人为的加入“!”或“*”改变加密值让密码暂时失效,使这个用户无法登陆,达到暂时禁止用户登录的效果。注意所有伪用户的密码都是“!!”或“*”,代表没有密码是不能登录的。当然我新创建的用户如果不设定密码,它的密码项也是“!!”,代表这个用户没有密码,不能登录。

 

第三列:密码最近更改时间的时间戳( 1970 1 1 日作为标准时间)

时间戳转换日期方法:

[[email protected] ~]# date -d "1970-01-01 17110 days"

2016 11 05 星期六 00:00:00 CST

 

日期转换时间戳方法:

[[email protected] ~]# echo $(($(date --date="2017-11-21" +%s)/86400+1))

17491

 

第四列:密码最短有效期

 

第五例:密码最长有效期

 

第六列:密码到期前的警告天数

 

第七列:密码过期后的宽限天数

 

第八列:密码失效时间,这里同样要写时间戳,也就是用 1970 1 1日进行时间换算。如果超过了失效时间,就算密码没有过期,用户也就失效无法使用了

 

第九列:保留

 

5)组信息文件/etc/group

[[email protected] ~]# vim /etc/group

root:x:0:

bin:x:1:

daemon:x:2:

sys:x:3:

adm:x:4:

tty:x:5:

disk:x:6:

lp:x:7:

…………………………………省略若干

 

6)组信息文件/etc/group文件详细介绍

组信息文件/etc/group文件内容也是以冒号分割的,详细介绍如下:

第一列: 组名

 

第二列: 组密码占位符

 

第三列: ID 号(GID

 

第四列: 组内成员列表

 

7)组密码文件/etc/gshadow

[[email protected] ~]# vim /etc/gshadow

root:::

bin:::

daemon:::

sys:::

adm:::

tty:::

…………………………………省略若干

 

8)组密码文件/etc/gshadow文件详细介绍

组密码文件/etc/gshadow文件内容也是以冒号分割的,详细介绍如下:

第一列:用户组

 

第二列:用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码

 

第三列:用户组管理者,这个字段也可为空,如果有多个用户组管理者,用逗号分割

 

第四列:组成员,如果有多个成员,用逗号分割

 

9)用户的基本目录

1、用户的家目录

超级用户家目录是 ’/root’

普通用户家目录是 ’/home/xxx’

 

2、用户邮箱目录 ‘/var/spool/mail/xxx’

 

3、用户模板目录 ‘/etc/skel/’

 

3、用户和组相关命令

1)添加用户命令useradd

格式:useradd  [选项用户名

选项如下:

-u UID         指定 UID 创建用户

-g 组名        指定初始组,尽量不要手动指定

-G 组名        指定附加组,将用户加入到所指定组内。

-c 说明         添加描述信息

-d 目录        手动指定家目录,目录不需要事先创建

-s  shell类型   指定用户是否能登录系统

-M             创建时不生成用户家目录

 

1

useradd -M –s /sbin/nologin zhangsan

创建 zhangsan 用户,不创建用户家目录,并且不能登录系统

 

2

先执行“groupadd a1“,预先创建好需要的组

useradd –u 521 –g a1 –G root –d /home/b1 –c “test user” –s /bin/bash abc

-u 指定UID521-g指定初始组是a1-G指定了附加组为 root组;-d指定了家目录叫/home/b1-c添加了“test user”作为描述信息;-s指定了登录 shell类型为/bin/bash,允许登陆系统。

 

2useradd 创建用户时默认规则及相关文件介绍

useradd 创建用户时默认参考两个配置文件,分别是/etc/default/useradd/etc/login.defs

1/etc/default/useradd文件介绍

[[email protected] ~]# vim /etc/default/useradd

# useradd defaults file

GROUP=100

新创建用户时默认初始组的 GID 号(公共组)现在使用的是私有组机制(根据创建用户名称创建组)

HOME=/home   新创建用户的家目录的默认位置

INACTIVE=-1     密码过期后宽限天数(过期停权),-1代表永不过期,0代表立即失效

EXPIRE=   密码失效时间,此处写时间戳,到期后立刻失效,不填写表示用户密码永不过期。

SHELL=/bin/bash   此选项是创建用户时默认的 shell 类型,/bin/bash 表示可以登录系统

SKEL=/etc/skel          此选项是创建用户时使用的模板目录,/etc/skel 中的文件在用户创建时

都会被复制到用户家目录下。

CREATE_MAIL_SPOOL=yes   此选项是是否给新用户创建邮件缓冲(即新邮箱)

2/etc/login.defs文件介绍

[[email protected] ~]# vim /etc/login.defs

MAIL_DIR        /var/spool/mail    指定新用户的默认邮箱位置

PASS_MAX_DAYS   99999           这行指定的是密码的有效期

PASS_MIN_DAYS   0               这行指定的是两次密码的修改间隔时间

PASS_MIN_LEN    5               密码的最小长度,现在验证已经被 PAM 模块取代

PASS_WARN_AGE   7                            这行代表密码修改到期前的警告天数

UID_MIN          1000                     创建普通用户的时候默认的起始 UID

UID_MAX          60000                  创建普通用户,不用 -u 指定时,默认最大的 UID

# System accounts

SYS_UID_MIN      201                       创建系统用户时默认的最小UID

SYS_UID_MAX      999                      创建系统用户时默认的最大UID

GID_MIN          1000                  创建组的时候默认的起始 GID

GID_MAX         60000                 创建组的时候默认的最大的 GID

# System accounts

SYS_GID_MIN     201                       默认最小系统GID

SYS_GID_MAX     999                      默认最大系统GID

CREATE_HOME     yes                      创建用户时是否创建用户家目录  默认 yes 创建

UMASK           077          建立的用户家目录的默认权限

USERGROUPS_ENAB yes                     使用命令 userdel 删除用户时,是否删除用户的初始组

ENCRYPT_METHOD SHA512               指定 Linux 用户的密码使用 SHA512 散列模式加密

 

3)添加和修改密码命令passwd

格式:passwd [选项] 用户名

     选项:

-l  用户名        锁定用户的密码,使之无法登录到系统

-u 用户名         解锁用户密码

-S(大) 用户名   查看用户帐号的状态(是否被锁定)

 

第一次对一个用户使用时是为此用户创建密码,第二次使用时是修改密码。

例:root身份执行 passwd

[[email protected] ~]# passwd root     root用户修改自己的密码

更改用户 root 的密码

新的 密码:

无效的密码: 密码少于 8 个字符

重新输入新的 密码:

passwd:所有的身份验证令牌已经成功更新。

 

[[email protected] ~]# passwd a1              root用户修改普通用户a1的密码

更改用户 a1 的密码

新的 密码:

无效的密码: 密码少于 8 个字符

重新输入新的 密码:

passwd:所有的身份验证令牌已经成功更新。

注:root可以修改任意用户密码,普通用户只能修改自己的密码,当普通用户没有密码时,自己是修改不了自己的密码的!

 

非交互式密码设置:

--stdin 使用 echo|实现密码非交互式创建

例:为普通用户a1创建或修改密码

[[email protected] ~]# echo '123456'|passwd --stdin a1

更改用户 a1 的密码

passwd:所有的身份验证令牌已经成功更新。

 

 

4)用户信息修改命令usermod(必须是已存在的用户)

格式:usermod  [选项用户名

选项:

-u UID                修改用户的指定 UID

-g 组名               修改用户的指定初始组(尽量不修改)

-G 组名               修改用户的附加组(不管之前设置了多少附加组,都替换掉)

-c 说明                修改用户的描述信息

-d 目录                结合-m 选项直接对源家目录进行改名实现修改家目录

例:usermod –m –d /home/u4 user4(用户user的原家目录是/home/user4

-s shell类型             修改用户的登录 shell 类型

-L(大)用户名          锁定用户的密码

-U(大)用户名         解锁用户密码

-l 新用户名 旧用户名    修改用户名

 

5)删除用户命令userdel

格式:userdel  [选项用户名

选项

-r  删除用户时,连带家目录一起删除

 

6)添加组命令groupadd

格式:groupadd 组名

 

7)删除组命令groupdel

格式:groupdel 组名  

注意:被删除的组尽量是空组

 

8)向组内添加成员命令gpasswd

格式:gpasswd [选项用户名 组名

选项:

-a 向指定组内添加一个成员

-d 把指定用户从组内删除

-M 定义组内成员列表,用户之间用,分隔 (覆盖式)

 

9)其他相关命令

1. id 用户名

显示用户的 UID、初始组、附加组列表

 

2. su 用户名

切换用户身份

 

su - 用户名

连带环境变量一起切换

 

3. newgrp 组名

修改用户的有效组,切换到普通用户之后,执行命令

有效组定义:用户创建文件或目录时使用哪个组作为文件的所属组,就是有效组。

注:初始组、附加组:是用户和组之间的关系

有效组:用户和文件之间的关系


以上是关于Linux帐号管理详解的主要内容,如果未能解决你的问题,请参考以下文章

linux用户及权限详解-用户组-用户管理-权限管理

Linux内存管理之mmap详解

Linux权限管理详解

Linux命令详解-用户管理

Linux kernel模块管理相关详解

linux文件管理命令详解