一  管理用户账号和组账户

1.1  用户账号概述

1.2  组账号

1.3  UID和GID  

二  管理目录和文件属性

  2.1  用户账户文件

  2.2  用户账号管理

  2.3  组账户管理

  2.4  查询账号相关信息的命令

  2.5  设置目录与文件权限

  2.6  设置目录与文件归属

总结



一  管理用户账号和组账户

1.1 用户账号概述

Linux作为一个多任务,多用户的服务器操作系统,Linux提供了严格的权限管理机制,主要从用户身份,文件权限两方面对资源访问进行控制。  Linux系统中,根据系统管理的需要,将用户账号分为不同的类型,其拥有的权限,担任的角色也各不相同。主要分为超级用户、普通用户、程序用户。

    超级用户:默认是root用户,其UID和GID均为0。在每台linux操作系统中都是唯一且真实存在的,通过它可以登录系统,可以操作系统中任何文件和命令,拥有最高的管理权限。类似于Windows系统中的administrator用户。在生产环境,一般禁止root账号远程登录SSH连接服务器,以加强系统安全。

普通用户:这类用户一般是由具备系统管理员root的权限的运维人员添加的,拥有的权限受到一定限制,一般只在用户自己的宿主目录中拥有完整权限。

     程序用户:在安装Linux系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运行。

1.2 组账户

     对于用户账号来说,对应的组账号可以分为基本组(私有组)和附加组(公共组)两种。每一个用户账号可以是多个组账号的成员,但是其基本组账号只有一个。

1.3 UID和GID   

    Linux系统中的每一个用户账号和组账号都有一个数字形式的身份标记,称为UID(User IDentity,用户标识号user ID)和GID(Group IDentify,组标识号)。对于系统核心来说,UID是作为区分用户的基本依据,原则上每个用户的UID号应该是唯一的,UID相当于身份证一样,在系统中是唯一的。UID取值范围0-65535 。不同的用户可以属于同一个用户组,享有该用户组共有的权限,GID唯一地标识了一个用户组。

  Linux账号和权限管理_用户账号

二  管理目录和文件属性

2.1 用户账户文件

  /etc/passwd

  保存用户名称,宿主目录,登录Shell等基本信息

   每一行对应一个用户的账号信息

Linux账号和权限管理_用户账号_02

示例:cat /etc/passwd 查看/etc/passwd下所有用户的信息:

Linux账号和权限管理_用户账号_03

示例: cat /etc/passwd | grep adm  查看/etc/passwd中adm用户的信息:

Linux账号和权限管理_用户名_04

示例:tail -1 /etc/passwd  查看/etc/passwd中最后一行用户的信息:

      head -2 /etc/passwd 查看/etc/passwd中头俩行用户的信息

Linux账号和权限管理_字段_05

Linux账号和权限管理_用户名_06

/etc/passwd文件包含了所有系统用户账户列表以及每个用户的基本配置信息。文件中一行记录对应着一个用户,每行记录被冒号分割为7个字段。

passwd格式:

用户账号:口令(密码占位符):用户标识号:组标识号:注释性描述:主目录:登录Shell

1 用户账号:

表示用户账号的字符串,用户名中不能有冒号(因为冒号在这里是分隔符),只能用字母、数字、下划线组合,一般不超过32个字符。

2口令(密码占位符):

某些系统中,存放加密后的用户口令,由于passwd文件对所有用户都是可读的,虽然加密,但仍是一个安全隐患,所以,centos liux系统使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,只有root才能访问,而在/etc/passwd文件的口令字段中存放在一个特殊的字符,例如:“x”或者“*”。不可以删除,删除后无法登录。“!!”代表无密码。

3用户标识号UID:

这个字段是一个整数(取值范围0-65535),系统内部用它来标识用户。0是超级用户root的标示号,如果用户UID为0,则代表这个账号是管理员账号,在Linux中如何把普通用户升级成管理员呢?只需把其他用户的UID修改为0就可以了,这点和Windows是不同的。不过不建议建立多个管理员账号。CentOS 7中1~ 999: 系统用户(伪用户)UID。这些UID是系统保留给系统用户的UID,也就是说UID是1~ 999范围内的用户是不能登录系统的,而是用来运行系统或服务的,1000~65535:普通用户UID。建立的普通用户UID从1000开始,最大到65535。

4组标识号GID:

不同的用户可以属于同一个用户组,享有该用户组共有的权限。与UID类似,GID唯一地标识了一个用户组,记录用户所属的用户组,对应着/etc/group文件中的一条记录。

5注释性描述(用户说明):

字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出

6宿主目录:

用户的开始工作目录,是用户登录系统后所处的目录。目录名称就是该用户的登录名。也就是用户登录后有操作权限的访问目录,我们把这个目录称为用户的家目录。超级用户的家目录是/root目录,普通用户在home/目录下建立和用户名相同的目录作为家目录,如lamp用户的家目录就是/home/lamp/目录, 用usermod -d 设置。

7登录Shell:

用户登陆linux系统会启动一个进程,负责将用户的操作传给内核,这个进程就是用户登录到系统后运行的命令解释器或某个特定的程序,即shell。/bin/bash/代表登录Shell。/bin/nologin 无法登录shell.

 /etc/shadow

   用于存储 Linux 系统中用户的密码信息,又称为“影子文件,保存用户的密码.账号有效期等信息。前面介绍了 /etc/passwd 文件,由于该文件允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了此文件中。/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。(注意,如果这个文件的权限发生了改变,则需要注意是否是恶意攻击。)

      每一行对应一个用户的密码记录

Linux账号和权限管理_用户账号_07

查看方式与/etc/passwd 文件一样

   同 /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 ":" 作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。每个字段的含义如下:

 ​用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

第一列:用户名:同 /etc/passwd 文件的用户名有相同的含义

第二列:加密密码:这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。

注意,这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上 "!"、"*" 或 "x" 使密码暂时失效。所有伪用户的密码都是 "!!" 或 "*",代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 "!!",代表这个用户没有密码,不能登录。

第三列:最后一次修改时间:此字段表示最后一次修改密码的时间,可是,为什么 root 用户显示的是 15775 呢?这是因为,Linux 计算日期的时间是以  1970 年 1 月 1 日作为 1 不断累加得到的时间,到 1971 年 1 月 1 日,则为 366 天。这里显示 15775 天,也就是说,此 root 账号在 1970 年 1 月 1 日之后的第 15775 天修改的 root 用户密码。
  那么,到底 15775 代表的是哪一天呢?可以使用如下命令进行换算:

[root@localhost ~]# date -d "1970-01-01 15775 days"
2013年03月11日 星期一 00:00:00 CST

可以看到,通过以上命令,即可将其换算为我们习惯的系统日期

第四列 最小修改时间间隔:最小修改间隔时间,也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。此字段是为了针对某些人频繁更改账户密码而设计的。

第五列 密码有效期:经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。该字段的默认值为 99999,也就是 273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。

第六列 密码需要变更前的警告天数:与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 "再过 n 天你的密码就要过期了,请尽快重新设置你的密码!"。该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 "修改密码" 的警告信息。

第七列  密码过期后的宽限天数:也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。

第八列 账号失效时间:同第 3 个字段一样,使用自  1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!该字段通常被使用在具有收费服务的系统中。

第九列 保留:这个字段目前没有使用,等待新功能的加入。

  忘记密码怎么办:对于普通账户的密码遗失,可以通过 root 账户解决,它会重新给你配置好指定账户的密码,而不需知道你原有的密码(利用 root 的身份使用 passwd 命令即可)。如果 root 账号的密码遗失,则需要重新启动进入单用户模式,系统会提供 root 权限的 bash 接口,此时可以用 passwd 命令修改账户密码;也可以通过挂载根目录,修改 /etc/shadow,将账户的 root 密码清空的方法,此方式可使用 root 无法密码即可登陆,建议登陆后使用 passwd 命令配置 root 密码。

2.2  用户账号管理

添加用户账号 useradd

useradd命令:用来建立用户帐号和创建用户的起始目录,使用权限是终极用户。(用户名不能纯数字)

格式: useradd [选项] 用户名      

常用选项

-u:指定用户ID号。要求改UID未被其他用户使用。

-d:指定用户登入时的宿主目录。[-d home]。(与-M一起使用时不生效)
-e:指定账号的有效期限,缺省表示永久有效。[-e expire ](可以使用YYYY-MM-DD的日期格式)

-g:指定用户所属的群组。(或使用GID号)

-G:指定用户所属的附加群组。(或使用GID号)

-M:不要自动建立用户的宿主目录。

-s:指定用户登入后所使用的shell。[-s shell]

-f:指定在密码过期后多少天即关闭该账号。[-f inactive]

-c:加上备注文字,备注文字保存在passwd的备注栏中。[-c comment] 
-D:变更预设值。
-m:自动建立用户的登入目录。[-m [-k template]]
-n:取消建立以用户名称为名的群组。
-r:建立系统账号。[-r name]

示例
建立一个新用户账户,并设置ID:
 useradd  nanjing -u 1888

Linux账号和权限管理_用户账号_08

需要说明的是,设定ID值时尽量要大于999,以免冲突。因为Linux安装后会建立一些特别用户,一般0到999之间的值留给bin、mail这样的系统账号。使用-u之后下个创建的用户的ID将在基础上加1.

组合使用:创建admin用户,并指定登录时的宿主目录在根目录下的admin下,且基本组为wheel 附加组为root (各选项之间空格隔开)

Linux账号和权限管理_字段_09

在账号管理中,有时候会希望在新建账号的时候指定账号的有效期,或者要求新建的账号不能登录系统(如仅用于FTP服务),可使用-e和-s /sbin/nologin选项,例如:

useradd -e 2050-10-01 -s /sbin/nologin zhangsan


修改账户和密码的有效期限 chage

chage 命令:用来修改账户和密码的有效期限,针对目前系统已经存在的用户。

格式:chage [选项] 用户名

选项:-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。

-M:密码保持有效的最大天数。

-W:用户密码到期前,提前收到警告信息的天数。

-E:帐号到期的日期。过了这天,此帐号将不可用。(可以使用xxxx-xx-xx)

-d:上一次更改的日期。

-I:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。

-l(小写):例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。

 示例:chage -l nanjing   查看用户名nanjing的当前密码设置情况

Linux账号和权限管理_用户账号_10

 示例:chage -I 10 nanjing  修改nanjing用户密码修改最小间隔为10天

Linux账号和权限管理_字段_11

设置/更改用户口令 passwd   (root权限使用)

     passwd [选项] 用户名

常用选项:

-d:清空指定用户的密码,仅使用用户名即可登录(用于恢复或找回遗忘密码的普通用户的密码。在虚拟机主机上登录,shell无法使用)

-l:锁定用户账户

-u:解锁用户账户

-S:查看用户账户的状态(是否被锁定)

不指定用户名时,修改当前账户的密码

示例:先锁定用户nanjing,然后解锁

Linux账号和权限管理_用户账号_12

未设置密码的用户解锁时需加f

示例:passwd -S nanjing 查看用户名nanjing 的状态

      passwd -uf nanjing 解锁

Linux账号和权限管理_用户账号_13

passwd 命令扩充:调用管道符给sss用户设置密码123456 为了方便管理,passwd命令提供了--stdin 选项,用于批量给用户设置初始密码。一条命令给用户设置密码

echo “123456” | passwd --stdin kgc

Linux账号和权限管理_用户账号_14

修改用户账号的属性 usermod

    usermod [选项] 用户名

常见选项:

-l:更改用户账号的登录名称

-L:锁定用户账号

-U:解锁用户账户

-u:指定用户ID号。要求改UID未被其他用户使用。

-d:指定用户登入时的宿主目录。[-d home]。(与-M一起使用时不生效)
-e:指定账号的有效期限,缺省表示永久有效。[-e expire ](可以使用YYYY-MM-DD的日期格式)

-g:指定用户所属的群组。(或使用GID号)

-G:指定用户所属的附加群组。(或使用GID号)

-M:不要自动建立用户的宿主目录。

-s:指定用户登入后所使用的shell。[-s shell]

-f:指定在密码过期后多少天即关闭该账号。[-f inactive]

-n:取消建立以用户名称为名的群组。
示例:将用户名nanjing改成登录用户名为nanjing1

Linux账号和权限管理_用户账号_15

示例;-d 使用时,需要先想宿主目录移动到/home下 再将目录对应用户名

   move /admin /home

   Usermod -d /home/admin admin​

  删除用户账号 userdel

 userdel [选项] 用户名

 添加-r选项时,表示连用户的宿主目录一并删除(如果只先删除了用户名,在删除宿主目录的时候需要把里面的目录先删除)

用户账号的初始配置文件:".bash_logout"、".bash _profile"和".bashrc”

 添加一个新的用户账号后,useradd命令会在该用户的宿主目录中建立一些初始配置文件。这些文件来自于账号模板目录/etc/skel/,基本上都是隐藏文件,较常用的初始配置文件包括".bash_logout"、".bash _profile"和".bashrc”。其中,".bash profile"文件中的命令将在该用户每次登录时被执行:".bashrc"文件中的命令会在每次加载" /bin/Bash”程序(当然也包括登录系统)时执行:而".bash_logout"文件中的命令将在用户每次退出登录时执行。理解这些文件的作用,可以便我们安排一些自动运行的后台管理任务。在".bashrc"等文件中,可以添加用户自己设置的可执行语句(如Linux命令行、脚本控制语句等),以便自动完成相应的任务。如果希望为所有用户添加登录后自动运行的命令程序、自动设置变量等,可以直接修改/etc目录下的类似文件,如/etc/bashrc 文件、/etc/profile文件。

例如,执行以下操作可以为所有用户自动设置myls 命令别名

vi / etc/bashrc

alias myls="/bin/ls -lhr"

source /etc/ bashrc   刷新缓存

2.3  组账户管理

   2.3.1 组账号文件

Linux账号和权限管理_用户名_16

与组账号相关的配置文件也有两个,分别是/etc/group和/etc/gshadow。前者用于保存组账号名称、GID号、组成员等基本信息,后者用于保存组账号的加密密码字串等信息(但是很少使用到)。某一个组账号包含哪些用户成员,将会在 group文件内最后一个字段中体现出来(基本组对应的用户账号默认可能不会列出),多个组成员之间使用","(逗号)分隔

grep "^root" /etc/group/    检索root组包括哪些用户,

grep "root" /etc/group/     检索哪些组包括root用户

2.3.2  创建组用户名groupadd 命令

     groupadd [-g GID] 组账号名

  示例:

Linux账号和权限管理_用户名_17

查看组信息:groups 组名

  组名不能加数字

2.3.3  添加、修改组成员 gpasswd  命令

Linux账号和权限管理_用户名_18

gpasswd命令

-a:添加用户到组

-d:从组删除用户

-A:指定管理员

-M:指定组成员和-A的用途差不多

-r:删除密码

-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组

示例:

useradd mike

gpasswd -a mike root          

groups mike    #确认mike 用户已加入root组

gpasswd -d webmaster root   

#//确认webmaster用户已退出 root 组正在将用户"webmaster”从"root”组中删除

gpasswd -M aa,bb,cc  nj  

将aa  bb  cc用户一起放到nj组中

2.3.4  删除组账号 groupdel 命令

     groupdel组账户名

    删除组账户时需要把组内成员都先删除

  2.4  查询账号相关信息的命令

groups、id、finger、w(w|cat)who、users

Linux账号和权限管理_用户账号_19Linux账号和权限管理_用户名_20

w、who、users结合查看登录时间和用户名

Linux账号和权限管理_用户名_21

User:登录用户名

TTY:登录后系统分配的终端号From:远程主机名,即从哪登录的login@:何时登录

IDLE:用户空闲时间。这是个计时器,一旦用户执行任何操作,改计时器就会被重置。JCPU:和终端连接的所有进程占用时间。包括当前正在运行的后台作业占用时间

PCPU:当前进程所占用时间

WHAT:当前正在运行进程的命令行

pts说明是用远程工具连接的,比如1xshell,后面的数字代表登录的时间顺序,越小证明登录的越早

  2.6  设置目录与文件权限

Linux账号和权限管理_用户名_22

Linux账号和权限管理_用户账号_23

Linux账号和权限管理_用户名_24

Linux账号和权限管理_用户名_25

2.7  设置目录与文件归属

Linux账号和权限管理_用户名_26示例:设置abc目录的宿主为ftp

Linux账号和权限管理_用户名_27

修改abc的属主为root,属组为ftp

Linux账号和权限管理_字段_28

权限反掩码:

Linux账号和权限管理_用户账号_29

示例:

Linux账号和权限管理_用户名_30

Linux账号和权限管理_用户名_31

 总结:

Linux账号和权限管理_用户名_32