Linux是一个多用户的操作系统,引入用户,可以更加方便管理Linux服务器,系统默认需要以一个用户的身份登入,而且在系统上启动进程也需要以一个用户身份去运行,用户可以限制某些进程对特定资源的权限控制。
本章向读者介绍Linux系统如何管理创建、删除、修改用户角色、用户权限配置、组权限配置及特殊权限深入剖析。
5.1 Linux用户及组
Linux操作系统对多用户的管理,是非常繁琐的,所以用组的概念来管理用户就变得简单,每个用户可以在一个独立的组,每个组也可以有零个用户或者多个用户。
Linux系统用户是根据用户ID来识别的,从默认ID编号从0开始,但是为了和老式系统兼容,用户ID限制在60000以下,Linux用户分总共分为三种,分别如下:
root用户 (ID 0)
系统用户 (ID 1-499)
普通用户 (ID 500以上)
Linux系统中的每个文件或者文件夹,都有一个所属用户及所属组,使用id命令可以显示当前用户的信息,使用passwd命令可以修改当前用户密码。
# passwd :进行更改密码
Linux操作系统用户的特点如下:
每个用户拥有一个UserID,操作系统实际读取的是UID,而非用户名;
每个用户属于一个主组,属于一个或多个附属组,一个用户最多有31个附属组;
每个组拥有一个GroupID;
每个进程以一个用户身份运行,该用户可对进程拥有资源控制权限;
每个可登陆用户拥有一个指定的Shell环境。
⭐5.2 Linux用户管理
Linux用户在操作系统可以进行日常管理和维护,涉及到的相关配置文件如下:
# /etc/passwd 保存用户信息
# /etc/shdaow 保存用户密码(以加密形式保存)
# /etc/group 保存组信息
# /etc/login.defs 用户属性限制,密码过期时间,密码最大长度等限制
# /etc/default/useradd 显示或更改默认的useradd配置文件
5.2.1 用户创建流程
如需创建新用户,可以使用命令useradd,执行命令useradd jfedu1即可创建jfedu1用户,同时会创建一个同名的组jfedu1,默认该用户属于jfedu1主组。
Useradd jfedu1命令默认创建用户jfedu1,会根据如下步骤进行操作:
1、读取/etc/default/useradd,根据配置文件执行创建操作;
2、 在/etc/passwd文件中添加用户信息;
3、如使用passwd命令创建密码,密码会被加密保存在/etc/shdaow中;
4、为jfedu1创建家目录:/home/jfedu1;
5、将/etc/skel中的.bash开头的文件复制至/home/jfedu1家目录;
6、创建与用户名相同的jfedu1组,jfedu1用户默认属于jfeud1同名组;
7、Jfedu1组信息保存在/etc/group配置文件中。
5.2.2 useradd
useradd-adduser-命令—建立用户账户
在系统可以使用useradd或者adduser命令来新建用户账户,其命令格式如下:
# useradd [选项] 用户名
useradd命令各选项及功能说明,如表3.3所示。
表3.3 useradd命令各选项及功能说明
选项 | 功能说明 |
---|---|
-c comment | 用户的注释性信息,如:全名、办公电话等 |
-d home_dir | 设置用户的主目录,默认值“/home/用户名” |
-e YYYY-MM-DD | 设置账户的有效日期,此日期以后,用户将不能使用该账户 |
-f days | 设置账户过期多少天后用户账户被禁用,如果为0,账户过期后将立刻被禁用;如果为-1,账户过期后,将不被禁用 |
-g group | 用户所属主组群的组群名称或者GID |
-G group-list | 用户所属的附属组群列表,多个组群之间用逗号分隔 |
-m | 自动建立用户的主目录 |
-M | 不要自动建立用户的主目录 |
-n | 不要为用户创建用户私人组群 |
-p passwd | 加密的口令 |
-r | 建立系统账号 |
-s shell | 指定用户的登录所使用的shell,默认为/bin/bash |
-u UID | 指定用户UID,它必须是唯一的 |
【实例1】使用useradd命令,新建用户user01,UID为2000,用户主目录为/home/user01,用户的shell为/bin/bash,admin@123为账户密码,用户账户永不过期。
[root@localhost ~]# useradd -u 2000 -d /home/user01 -s /bin/bash -p admin@123 -f -1 user01
[root@localhost ~]# tail -1 /etc/passwd //查看新建用户信息
user01:x:2000:2000::/home/user01:/bin/bash
[root@localhost ~]#
如果新建用户已经存在,那么执行useradd命令时,系统会提示该用户已经存在,执行命令如下:
[root@localhost ~]# useradd user01 # 一般会先查看用户是否存在 ip user01
useradd:用户“user01”已存在
[root@localhost ~]#
Useradd案例演示:
新建jfedu用户,并加入到jfedu1,jfedu2附属组
# useradd -G jfedu1,jfedu2 jfedu
新建jfedu3用户,并指定新的家目录,同时指定其登陆的SHELL;
# useradd jfedu3 -d /tmp/ -s /bin/bash
5.2.3 passwd
passwd命令—设置用户账户口令密码
passwd命令可以修改用户账户的口令密码,超级用户可以为自己和其他用户设置口令密码,而普通用户账户只能为自己设置口令密码,其命令格式如下:
# passwd [选项] 用户名
passwd命令各选项及功能说明,如表3.4所示。
表3.4 passwd命令各选项及功能说明
选项 | 功能说明 |
---|---|
-d | 删除已命名帐号的密码-只有根用户才能进行此操作- |
-l | 锁定指名帐户的密码-仅限root用户- |
-u | 解锁指名账户的密码-仅限root用户- |
-e | 终止指名帐户的密码-仅限root用户- |
-f | 强制执行操作 |
-x | 密码的最长有效时限-只有根用户才能进行此操作- |
-n | 密码的最短有效时限-只有根用户才能进行此操作- |
-w | 在密码过期前多少天开始提醒用户-只有根用户才能进行此操作- |
-i | 当密码过期后经过多少天该帐号会被禁用-只有根用户才能进行此操作- |
-S-大写字母- | 报告已命名帐号的密码状态-只有根用户才能进行此操作- |
sh【实例2】使用passwd命令,修改超级用户root和用户user01的口令密码。
[root@localhost ~]# passwd //root用户修改自己的口令密码,直接回车即可
更改用户 root 的密码 。
新的密码:
无效的密码:密码少于8个字符 //提示无效的密码,密码位数不少于8个字符
新的密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]#
[root@localhost ~]# passwd user01 //修改user01口令密码
更改用户 user01 的密码 。
新的密码:
无效的密码: 密码未通过字典检查 - 它基于字典单词
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]#
5.2.4 usermod
usermod命令—修改用户账户
usermod命令用于修改的属性,其命令格式如下:
usermod [选项] 用户名
前文已经反复强调,Linux系统中的一切都是文件,因此在系统中创建用户也就是修改配置文件的过程,用户的信息保存在/etc/passwd文件中,可以直接用文本编辑器来修改其中的用户参数项目,也可以用usermod命令修改已经创建的用户信息,如:用户的UID、用户组、默认终端等,usermod命令各选项及功能说明,如表3.6所示。
表3.6 usermod命令各选项及功能说明
选项 | 功能说明 |
---|---|
-d | 用户的新主目录 |
-e | 设定帐户过期的日期 |
-f | 过期INACTIVE天数后,设定密码为失效状态 |
-g | 强制使用GROUP为新主组,变更所属用户组 |
-G | 新的附加组列表GROUPS,变更扩展用户组 |
-a | 将用户追加至上边-G中提到的附加组中,并不从其它组中删除此用户 |
-h | 显示此帮助信息并推出 |
-l | 新的登录名称 |
-L | 锁定用户帐号 |
-m | 将家目录内容移至新位置-仅于-d一起使用- |
-o | 允许使用重复的-非唯一的-UID |
-p | 将加密过的密码 -PASSWORD-设为新密码 |
-R | chroot到的目录 |
-s | 用户帐号的新登录 shell |
-u | 用户帐号的新UID |
-U | 解锁用户帐号 |
-Z | 用户账户的新SELinux用户映射 |
【实例4】使用usermod命令,维护用户账户以及禁用和恢复用户账户。
大家不要被这么参数难倒,我们先来看一下用户账户user01的默认信息:
[root@localhost ~]# id user01
uid=2000-user01- gid=2000-user01- 组=2000-user01-
[root@localhost ~]#
将用户user01加入root用户组中,这样扩展组列表中会出现root用户组的字样,而基本组不会受影响:
[root@localhost ~]# usermod -G root user01
[root@localhost ~]# id user01
uid=2000-user01- gid=2000-user01- 组=2000-user01-,0-root-
[root@localhost ~]#
可以使用-u参数修改user01用户的UID号码值,操作命令如下:
[root@localhost ~]# usermod -u 5000 user01
[root@localhost ~]# id user01
uid=5000-user01- gid=2000-user01- 组=2000-user01-,0-root-
[root@localhost ~]#
修改用户user01的主目录为/var/user01,把启动shell修改为/bin/tabs,完成后恢复到初始状态,操作命令如下
[root@localhost ~]# usermod -d /var/user01 -s /bin/tabs user01
[root@localhost ~]# tail -2 /etc/passwd
csg:x:1000:1000:root:/home/csg:/bin/bash
user01:x:5000:2000::/var/user01:/bin/tabs
[root@localhost ~]# usermod -d /var/user01 -s /bin/bash user01
5.2.5 userdel
userdel命令—删除用户账户
要想删除一个账户,可以直接删除/etc/passwd和etc/shadow文件中要删除的用户所对应的行,也可以使用userdel命令进行删除,其命令格式如下:
userdel [选项] 用户名
userdele命令各选项及功能说明,如表3.7所示。
表3.7 userdel命令各选项及功能说明
选项 | 功能说明 |
---|---|
-h | 显示此帮助信息并推出 |
-r | 删除主目录和以及目录中的所有文件 |
-R | chroot 到的目录 |
-Z | 为用户删除所有的 SELinux 用户映射 |
【实例5】使用userdel命令删除账户,首先创建用户账户user02和user03,查看用户目录相关信息,删除用户账户user03,查看用户主目录的变化。
[root@localhost ~]# useradd -p 123456 user02 //新建用户账户user02,密码:123456
[root@localhost ~]# useradd -p 123456 user03 //新建用户账户user03,密码:123456
[root@localhost ~]# ls /home //查看目录情况
csg user01 user02 user03
[root@localhost ~]# tail -4 /etc/passwd //查看用户信息
csg:x:1000:1000:root:/home/csg:/bin/bash
user01:x:5000:1::/var/user01:/bin/bash
user02:x:5001:0::/home/user02:/bin/bash
user03:x:5002:0::/home/user03:/bin/bash
[root@localhost ~]# userdel -r user03 //删除用户账户user03
[root@localhost ~]# ls /home //查看目录情况
csg user01 user02
[root@localhost ~]#
5.3 Linux组管理
所有的Linux或者Windows系统都有组的概念,通过组可以更加方便的管理用户,组的概念应用于各行行业,例如企业会使用部门、职能或地理区域的分类方式来管理成员,映射在Linux系统,同样可以创建用户,并用组的概念对其管理。
Linux组有如下特点:
每个组有一个组ID;
# 组信息保存在/etc/group中;
每个用户至少拥有一个主组,同时还可以拥有31个附属组。
# groupadd [选项] 组群名
groupadd命令各选项及功能说明,如表3.10所示。
5.3.1 groupadd
表3.10 groupadd命令各选项及功能说明
选项 | 功能说明 |
---|---|
-f | 如果组已经存在则成功退出并且如果GID已经存在则取消-g |
-g | 为新组使用 GID |
-h | 显示此帮助信息并推出 |
-k | 不使用/etc/login.defs中的默认值 |
-o | 允许创建有重复GID的组 |
-p | 为新组使用此加密过的密码 |
-r | 创建一个系统账户 |
-R | chroot到的目录 |
【实例8】使用groupadd命令创建用户组,相关命令如下:
[root@localhost ~]# ls /home
csg user01 user02 user03
[root@localhost ~]# groupadd workgroup //创建用户组workgroup
[root@localhost ~]# tail -5 /etc/group
csg:x:1000:
user01:x:2000:
user02:x:5001:
user03:x:5002:
workgroup:x:5003:
[root@localhost ~]# tail -5 /etc/gshadow
csg:!::
user01:!::
user02:!::
user03:!::
workgroup:!::
[root@localhost ~]#
-------------------------------------------------------
Groupadd案例演示:
(1) groupadd创建jingfeng组
groupadd jingfeng
(2) groupadd创建jingfeng组,并指定GID为1000;
groupadd -g 1000 jingfeng
(3) groupadd创建一个system组,名为jingfeng组
groupadd -r jingfeng
Groupmod案例演示:
(4) groupmod修改组名称,将jingfeng组名,改成jingfeng1;
groupmod -n jingfeng1 jingfeng
(5) groupmod修改组GID号,将原jingfeng1组gid改成gid 1000;
groupmod –g 1000 jingfeng1
5.4 Linux用户及组案例
Useradd主要用于新建用户,而用户新建完毕,可以使用usermod来修改用户及组的属性,如下为usermod详细参数:
groupmod命令是用来在Linux系统中更改组群识别码或名称,其命令格式如下:
# groupmod [选项] 组群名
groupmod命令各选项及功能说明,如表3.12所示。
表3.12 groupmod命令各选项及功能说明
选项 | 功能说明 |
---|---|
-g | 将组ID改为GID |
-h | 显示此帮助信息并推出 |
-n | 改名为 NEW_GROUP |
-o | 允许使用重复的GID |
-p | 将密码更改为-加密过的-PASSWORD |
-R | chroot 到的目录 |
【实例10】使用groupmod命令更改组群识别码或名称,将workgroup-1组群ID修改为3000,同时将组群名称修改为workgroup-student,并显示相关结果,相关命令如下:
[root@localhost ~]# groupmod -g 3000 -n workgroup-student workgroup-1
[root@localhost ~]# tail -6 /etc/group
csg:x:1000:
user01:x:2000:
user02:x:5001:
user03:x:5002:
workgroup:x:5003:
**workgroup-student:x:3000:**
[root@localhost ~]#。
Usermod案例演示:
(1) 将jfedu用户属组修改为jfedu1,jfedu2附属组;
usermod -G jfedu1,jfedu2 jfedu
(2) 将jfedu用户加入到jfedu3,jfedu4附属组,-a为添加新组,原组保留
usermod –a -G jfedu3,jfedu4 jfedu
(3) 修改jfedu用户,并指定新的家目录,同时指定其登陆的SHELL;
usermod -d /tmp/ -s /bin/sh jfedu
(4) 将jfedu用户名修改为jfedu1;
usermod -l jfedu1 jfedu
(5) 锁定jfedu1用户及解锁jfedu1用户方法;
usermod –L jfedu1usermod -U jfedu1
Userdel案例演示:
使用userdel可以删除指定用户及其用户的邮箱目录或者Selinux映射环境:
userdel jfedu1 保留用户的家目录;
userdel -r jfedu1 删除用户及用户家目录,用户login系统无法删除;
userdel -rf jfedu1 强制删除用户及该用户家目录,不论是否login系统。
5.5 ⭐Linux权限管理
Linux权限是操作系统用来限制对资源访问的机制,权限一般分为读、写、执行。系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户或用户组可以对特定文件进行相应的操作。
Linux每个进程都是以某个用户身份运行,进程的权限与该用户的权限一样,用户的权限越大,则进程拥有的权限就越大。
Lnux中有的文件及文件夹都有至少权限三种权限,常见的权限如表5-1所示:
权限 | 对文件的影响 | 对目录的影响 |
---|---|---|
r(读取) | 可读取文件内容 | 可列出目录内容 |
w(写入) | 可修改文件内容 | 可在目录中创建删除内容 |
x(执行) | 可作为命令执行 | 可访问目录内容 |
目录必须拥有x权限,否则无法查看其内容 |
表5-1 Linux 文件及文件及权限
Linux权限授权,默认是授权给三种角色,分别是user、group、other,Linux权限与用户之间的关联如下:
U代表User,G代表Group,O代表Other;
每个文件的权限基于UGO进行设置;
权限三位一组(rwx),同时需授权给三种角色,UGO;
每个文件拥有一个所属用户和所属组,对应UGO,不属于该文件所属用户或所属组使用O来表示;
在Linux系统中,可以通过ls –l查看jfedu.net目录的详细属性,如图5-1所示:
drwxrwxr-x 2 jfedu1 jfedu1 4096 Dec 10 01:36 jfedu.net
jfedu.net目录属性参数详解如下:
drwxrwxr-x 2 jfedu1 jfedu1 4096 Dec 10 01:36 jfedu.net
d 表示目录,同一位置如果为-则表示普通文件;
rwxrwxr-x 表示三种角色的权限,每三位为一种角色,依次为u,g,o权限,如上则表示user的权限为rwx,group的权限为rwx,other的权限为r-x;
2表示文件夹的链接数量,可理解为该目录下子目录的数量;
从左到右,第一个jfedu1表示该用户名,第二个jfedu1则为组名,其他人角色默认不显示;
4096表示该文件夹占据的字节数; # 这里指的文件夹里面的文件名字!!! 不是文件大小就是纯名字的大小
Dec 10 01:36 表示文件创建或者修改的时间;
Jfedu.net 为目录的名,或者文件名。
5.6 Chown属主及属组
修改某个用户、组对文件夹的属主及属组,用命令chown实现,案例演示如下:
(1) 修改jfedu.net文件夹所属的用户为root,其中-R参数表示递归处理所有的文件及子目录。
chown -R root jfedu.net
(2) 修改jfedu.net文件夹所属的组为root。
chown -R :root jfedu.net或者chgrp –R root jfedu.net
(3) 修改jfedu.net文件夹所属的用户为root,组也为root。
chown -R root:root jfedu.net
5.7 Chmod用户及组权限
修改某个用户、组对文件夹的权限,用命令chmod实现,其中以代指ugo,、-、=代表加入、删除和等于对应权限,具体案例如下:
(1) 授予用户对jfedu.net目录拥有rwx权限
chmod –R u+rwx jfedu.net
(2) 授予组对jfedu.net目录拥有rwx权限
chmod –R g+rwx jfedu.net
(3) 授予用户、组、其他人对jfedu.net目录拥有rwx权限
chmod –R u+rwx,g+rwx,o+rwx jfedu.net
(4) 撤销用户对jfedu.net目录拥有w权限
chmod –R u-w jfedu.net
(5) 撤销用户、组、其他人对jfedu.net目录拥有x权限
chmod –R u-x,g-x,o-x jfedu.net
(6) 授予用户、组、其他人对jfedu.net目录只有rx权限
chmod –R u=rx,g=rx,o=rx jfedu.net
5.8 Chmod二进制权限
Linux权限默认使用rwx来表示,为了更简化在系统中对权限进行配置和修改,Linux权限引入二进制表示方法,如下代码:
Linux权限可以将rwx用二进制来表示,其中有权限用1表示,没有权限用0表示;Linux权限用二进制显示如下:rwx=111r-x=101rw-=110r–=100依次类推,转化为十进制,对应十进制结果显示如下:rwx=111=4+2+1=7r-x=101=4+0+1=5rw-=110=4+4+0=6r–=100=4+0+0=4得出结论,用r=4,w=2,x=1来表示权限。
使用二进制方式来修改权限案例演示如下,其中默认jfedu.net目录权限为755:
(1) 授予用户对jfedu.net目录拥有rwx权限
chmod –R 755 jfedu.net
(2) 授予组对jfedu.net目录拥有rwx权限
chmod –R 775 jfedu.net
(3) 授予用户、组、其他人对jfedu.net目录拥有rwx权限
chmod –R 777 jfedu.net
(4) 撤销用户对jfedu.net目录拥有w权限
chmod –R 555 jfedu.net
(5) 撤销用户、组、其他人对jfedu.net目录拥有x权限
chmod –R 644 jfedu.net
(6) 授予用户、组、其他人对jfedu.net目录只有rx权限
chmod –R 555 jfedu.net