一、相关概念
1、用户与角色分类
超级用户:拥有对系统的最高管理权限,默认是root用户。
普通用户:只能对自己目录下的文件进行访问和修改,具有登录系统的权限,例如www用户、ftp用户等。
虚拟用户:也叫“伪”用户,这类用户最大的特点是不能登录系统,它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。例如系统默认的bin、adm、nobody用户等。
2、用户和组以及关系
一对一、一对多、多对一、多对多
3、用户和组相关的配置文件
/etc/passwd文件:系统用户配置文件,是用户管理中最重要的一个文件。这个文件记录了Linux系统中每个用户的一些基本属性,并且对所有用户可读。
/etc/shadow文件:用户影子文件,由于/etc/passwd文件是所有用户都可读的,这样就导致了用户的密码容易出现泄露,因此,linux将用户的密码信息从/etc/passwd中分离出来,单独的放到了一个文件中,这个文件就是/etc/shadow,该文件只有root用户拥有读权限。
/etc/group文件:用户组配置文件,用户组的所有信息都存放在此文件中。
/etc/login.defs文件:用来定义创建一个用户时的默认设置,比如指定用户的UID和GID的范围,用户的过期时间、是否需要创建用户主目录等等。
/etc/default/useradd文件:定义了新建用户的一些默认属性,比如用户的主目录、使用的shell等等,通过更改此文件,可以改变创建新用户的默认属性值。
/etc/skel文件:目录定义了新建用户在主目录下默认的配置文件,更改/etc/skel目录下的内容就可以改变新建用户默认主目录的配置文件信息。
二、相关命令
1、添加、切换、删除用户组命令
(1)groupadd命令 用来新建一个用户组。语法格式为:
groupadd -g gid #groupname -g:指定新建用户组的GID号,该GID号必须唯一,不能和其它用户组的GID号重复。
(2)newgrp命令 如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限,newgrp主要用于在多个用户组之间进行切换。
(3)groupdel命令 表示删除用户组,语法格式为:
groupdel [群组名称] #当需要从系统上删除用户组时,可用groupdel指令来完成这项工作。如果该用户组中仍包括某些用户,则必须先删除这些用户后,然后才能删除用户组。
2、添加、修改和删除用户命令
(1)useradd的使用语法:
useradd [-u uid ] [-g group] [-G group,...] [-d home] [-s shell] name
各个选项具体含义如下:
-u uid:即用户标识号,此标识号必须唯一。
-g group:指定新建用户登录时所属的默认组,或者叫主组。此群组必须已经存在。
-G group:指定新建用户的附加组,此群组必须已经存在。附加组是相对与主组而言的,当一个用户同时是多个组中的成员时,登录时的默认组成为主组,而其它组称为附加组。
-d home:指定新建用户的默认主目录,如果不指定,系统会在/etc/default/useradd文件指定的目录下创建用户主目录。
-s shell:指定新建用户使用的默认shell,如果不指定,系统以/etc/default/useradd文件中定义的shell作为新建用户的默认shell。
(2)usermod用来修改用户的账户属性信息,使用语法如下:
usermod [-u uid] [-g group] [-G group,...] [-d 主目录 ] [-s shell] [-L|-U] Name
各个选项具体含义如下:
-u uid:指定用户新的UID值,此值必须为唯一的ID值,除非用-o选项。
-g group:修改用户所属的组名为新的用户组名,此用户组名必须已经存在。
-G group:修改用户所属的附加组。
-d 主目录:修改用户登录时的主目录。
-s shell:修改用户登录系统后默认使用的shell
-L:锁定用户密码,使密码无效。
-U:解除密码锁定。 userdel的使用语法 Userdel用来删除一个用户,若指定“-r”参数不但删除用户,同时删除用户的主目录以及目录下的所有文件。语法格式为: userdel [-r][用户帐号]
3、chown改变属主和属组
chown就是change owner的意思,主要作用就是改变文件或者目录的所有者,而所有者包含用户和用户组,其实chown就是对文件所属的用户和用户组进行的一系列设置。 chown使用的一般语法为:
chown [-R] 用户名称 文件或目录
chown [-R] 用户名称:用户组组名称 文件或目录
参数说明: -R : 进行递归式的权限更改,也就是将目录下的所有文件、子目录都更新成为指定的用户组权限。常常用于变更某一目录的情况。
4、chmod改变访问权限
chmod用于改变文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的字符设定法;另一种是包含数字的数字设定法。
(1)字符设定法 使用语法为:
chmod [who] [+ | - | =] [mode] 文件名
who表示操作对象,可以是下面字母中的任何一个或者它们的组合。
u 表示“用户(user)”,即文件或目录的所有者。
g 表示“用户组(group)”,即文件或目录所属的用户组。
o 表示“其他(others)用户”。
a 表示“所有(all)用户”。它是系统默认值。
操作符号含义如下: “+”表示添加某个权限。“-”表示取消某个权限。“=”表示赋予给定的权限,同时取消文档以前的所有权限。
mode表示可以执行的权限,可以是“r“(只读)、“w”(可写)和“x”(可执行),以及它们的组合。
(2)数字设定法 使用语法为:
chmod [属主权限的数字组合] [用户组权限的数字组合] [其它用户权限的数字组合] 文件名
0表示没有任何权限 1表示有可执行权限,与上面字符表示法中的“x”有相同的含义。
2表示有可写权限,与“w”对应
4表示有可读权限,对应与“r“
三、 Linux用户与环境变量
当一个用户创建完毕,与之相关的环境变量也就创建了起来。
1、常见系统环境变量
PATH、PWD、BASH、LANG、USER、HOSTNAME、HOME、SHELL
我们常用 echo $[环境变量名] 来查看对应的环境变量信息,从下面的图我们也可以看出:PATH作用是指定命令的搜索路径;PWD是用来查看当前目录;SHELL是看当前Shell;HOSTNAME是查看主机名;LANG是默认语言。
2、定义环境变量
ENVIRON-VARIABLE=value #环境变量赋值
export ENVIRON-VARIABLE #声明环境变量
注意:环境变量可以在命令行中设置,但用户注销时这些值将丢失,环境变量均为大写,要让系统识别必须用export命令导出。
3、清除环境变量
unset 环境变量名
4、显示环境变量内容
env命令可以列出已经定义的环境变量
echo命令: echo $环境变量名
5、环境变量与配置文件
/etc/profile属于全局环境变量配置文件
.bash_profile和.bashrc属于用户环境变量文件,此两个文件位于用户根目录下。
当某Linux用户登录时,Shell会首先执行系统默认的配置文件/etc/profile,然后会自动执行.bash_profile文件,如果.bash_profile文件不存在,接着读取~/.bashrc文件。
Bash的初始化环境变量文件顺序:
环境变量配置文件使用原则:
跟用户相关的环境变量配置均配置到用户目录下面的配置文件中(.bash_profile、.bashrc),需要对全局生效的环境变量配置,都配置到/etc/profile文件中。
6、演示
(1)怎么在现有路径上去添加一个新的路径,我们配置一个用户的环境变量,vi 进入.bash_profile文件,将定义的环境变量写入其中,保存退出。
(2) 配置文件环境变量文件后,执行source命令马上生效。这样我们就可以在任意路径下去执行JAVA_HOME/bin路径下对应的二进制文件了。
四、sudo命令的使用
1 、用途
类似 su 命令切换用户,但sudo的使用相比su命令更加灵活,试问在一个多人办公的情况下,如果每个人都需要使用root用户去执行管理员操作,那密码还有存在的必要么?在用户权限维护方面sudo使用会更多。
2、sudo相关权限文件配置
1、sudo命令的配置文件为/etc/sudoers,编辑这个文件有个单独的命令visudo(这个文件最好不要使用vim命令来打开),因为一旦语法写错会造成严重的后果,这个工具会替你检查你写的语法,这个文件的语法遵循以下格式:
who where whom command(指定哪个用户,在什么地方,以哪个用户的身份来执行,去执行什么命令)
2、/etc/sudoers文件默认给 root 用户定义了一条规则:
root ALL=(ALL) ALL #root用户可以在任何主机以任何人的身份来执行所有的命令。
root表示 root 用户。
ALL表示从任何的主机上都可以执行,也可以这样 192.168.100.0/24。
(ALL)是以谁的身份来执行,ALL就代表root可以任何人的身份来执行命令。
ALL 表示任何命令。
3、一些例子:
iivey 192.168.10.0/24=(root) /usr/sbin/useradd
上面的配置只允许iivey在 192.168.10.0/24 网段上连接主机并且以root权限执行useradd 命令。
www ALL=(root) NOPASSWD:ALL,!/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,!/bin/su
允许www用户执行所有命令,除了passwd后加任意字符、passwd root和su这三类操作。
%wheel ALL=(ALL) ALL
centos7默认已经开放组%wheel这一行,之前的centos版本没有启用。(批量设定权限,wheel是自带的一个组)。
%wheel ALL=(ALL) NOPASSWD: ALL NOPASSWD: ALL
不输入密码执行任何命令 。
3、演示
(1)我们在root 用户下修改用户huoserver的权限,用 sudo 命令。
(2) 我们给huoserver用户在任何地方都赋予了root用户的任何权限。
(3)接下来我们切到huoserver用户下,在根目录下执行创建目录操作,发现权限不够;但是我们使用sudo命令,并且输入用户的密码,便可以成功执行在root用户下才可以执行的操作。