文章目录
前言
Linux作为一个多任务,多用户的服务器操作系统,Linux提供了严格的权限管理机制,主要从用户身份,文件权限两方面对资源访问进行控制。
一:用户账号和组账号概述
Linux系统中的用户账号和组账号的作用在本质上和Windows是一样的,都是基于用户身份来控制对资源的访问。但是在个别细节和表现形式方面还是有些许差异的。
1.1:用户账号概述
Linux系统中,根据系统管理的需要,将用户账号分为不同的类型,其拥有的权限,担任的角色也各不相同。
1.2:组账号概述
对于用户账号来说,对应的组账号可以分为基本组(私有组)和附加组(公共组)两种。每一个用户账号可以是多个组账号的成员,但是其基本组账号只有一个。在”/etc/passwd“文件中第四个字段记录的即为该用户的基本组GID号。而对于该用户还属于那些附加组,需要在对应组账号文件中才被体现。
1.3:UID号和GID号
Linux系统中的每一个用户账号和组账号都有一个数字形式的身份标记,称为UID(User IDentity,用户标识号)和GID(Group IDentify,组标识号)。对于系统核心来说,UID是作为区分用户的基本依据,原则上每个用户的UID号应该是唯一的。
1.4:用户账号文件
Linux系统中的用户账号,密码等信息均保存在相对应的 配置文件中,直接修改这些文件或者使用用户管理命令都可以对用户账号进行管理。
与用户账号相关的配置文件主要有两个,分别是/etc/passwd, /etc/shadow、前者用于保存用户名称,宿主目录,登录Shell等基本信息,后者用于保存用户的密码,账号有效期等信息。
在这两个配置文件中,每一行对应一个用户账号,不同的配置项之间使用冒号“:”进行分隔。
1.4.1:用户账号文件/etc/passwd
系统中所有用户的账号信息都保存在“/etc/passwd”文件中,该文件是文本文件,任何用户都可以读取文件中的内容。
系统中新增加的用户账号信息会保存到passwd文件的末尾。
基于系统运行和管理的需要,所有用户都可以访问passwd文件中的内容,但是只有root用户才能进行更改。在早期的UNIX操作系统中,用户账号的密码信息也是保存在passwd文件中的,但是可以被不法用户暴力破解,因此后来将信息转存入专门的shadow文件中,而passwd文件中仅保留密码占位符“x”。
例如:查看passwd文件头两行内容(每一行对应一个用户的账号记录)
[root@localhost ~]# head -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
passwd文件的每一行内容中,包含了七个用冒号“:”分隔的配置字段,我们需要了解其含义。
字段 解释
1.4.2:用户账号文件/etc/shadow
shadow文件又被称为“影子文件”,其中保存有各种用户账号的密码信息,因此默认只有root用户能够读取文件中的内容,而不允许直接编辑改文件中的内容。
查看头两行shadow文件内容
[root@localhost ~]# head -2 /etc/shadow
root:$6$mH8hzgaq7mY/pNmy$L.P3c2kw1EYGn7upTEcckuVE88wOb4XdGqf0qxMq3cml.W0ewoF0m6fGmXnGWn3jCkPRNGEo6xXCcPjtKmKSo0::0:99999:7:::
bin:*:17110:0:99999:7:::
shadow文件的每一行内容中,包含了九个用冒号“:”分隔的配置字段,我们需要了解其含义。
1.5:组账号文件
1.5.1:/etc/group 和 /etc/gshadow
组账号文件也有两个,分别是/etc/group, /etc/gshadow。与用户账号文件非常类似。前者用于保存组账号名称,GID号,组成员等基本信息,后者用于保存组账号的加密密码字符串等信息(但是很少使用到)。
某一个组账号包含哪些用户成员,将会在group文件内最后一个字段中体现出来(基本组对应的用户账号默认可能不会列出),多个组成员之间使用逗号“,”分隔。
例如:查看root组包括哪些用户成员,哪些组中包含root用户。
检索root组包括哪些用户
[root@localhost ~]# grep "^root" /etc/group
root:x:0:
检索哪些组包括root用户
[root@localhost ~]# grep "root" /etc/group
root:x:0:
二:用户账号和组帐号管理
2.1:用户账号管理
切换用户:su 用户,保持路径不变
su - 用户,切换到当前用户的家目录
grep “bash$” /etc/passwd 查看当前可用用户
用户被锁定后,可以从高权限用户切换到普通用户,但是不可以用普通用户登录
2.1.1:useradd命令–添加用户账号
基本命令格式如下
useradd [选项] 用户名
常用选项有:
-u 指定用户的UID号,要求UID号码未被其他用户使用
-d 指定用户的宿主目录位置(当与 -M 一起使用时,不生效)
-e 指定用户的账户失效时间,可以使用YYYY-MM-DD的日期格式
-g 指示基本组
-G 指示附加组
-M 不建立宿主目录,即使/etc/login.defs系统配置中已设置要建立宿主目录
-s 指定用户的登录shell
例如:创建一个名为66的FTP账号(禁止终端登录),该账号将于2020.12.31失效。
[root@localhost ~]# useradd -e 2020-12-31 -s /sbin/nologin 66
/sbin/nologin后用户无法直接登录和被切换登录
2.1.2:passwd命令–设置/更改用户口令
创建一个用户,并设置密码且只输入一次,此功能在脚本中常用
useradd test1
echo “密码” | passwd --stdin test1 '免交互方式创建密码(stdin:输入)'
通过useradd创建一个账户后还需要设置密码才能够正常使用,使用passwd命令可以设置或修改密码。
passwd命令除了可以修改账号的密码外,还能欧股对用户账号进行锁定,解锁,也可以将用户的密码设置为空(无需密码即可登录)。
使用命令基本格式
passwd [选项] 用户名
常用选项
-d 清空指定用户的密码,仅使用用户名即可登录系统
-l 锁定用户账户
-S(大S) 查看用户账户是否被锁定
-u 解锁用户账户
通过passwd命令锁定的用户账号,将无法再登录系统(shadow文件中的对应密码子串前将添加“!!”字符),只能由管理员来解除锁定。(还可以从root用户切换登录)
root用户有权限管理其他账号的密码(指定账号名称作为参数即可),不指定用户名时,修改当前账号的密码。普通用户只能执行单独的“passwd”命令修改自己的密码。
例如:执行“passwd 66“命令可以为66账号设置登录密码
[root@localhost ~]# passwd 66
对于普通用户自行设置的密码,要求具有一定的复杂性(如不要直接使用英文单词,长度保持在六位以上)否则系统可能拒绝进行设置。普通用户设置自身的登录密码时,需要先输入旧的密码进行验证。
例如,普通用户设置自身的密码
[66@55~]$passwd
2.1.3:usermod命令–修改用户账号的属性
对于系统中已经存在的用户账号,可以使用usermod命令重新设置各种属性。usermod命令同样需要指定账号名称作为参数。
命令使用基本格式
usermod [选项] 用户名
常用选项
-l 更改用户账号的登录名称(Login Name)
-L 锁定用户账户
-U 解锁用户账户
-u 修改用户的UID号
-d 修改用户的宿主目录位置
-e 修改用户的账户失效时间,可以使用YYYY-MM-DD的日期格式
-s 指定用户的登录shell
我们发现,usermod命令大部分和useradd命令的选项时相对应的,作用也相似。
PS:usermod两个选项“-L”’-U’分别用于锁定,解锁用户账户
passwd两个选项’-l’ '-u’也分别用于锁定,解锁用户账户 两者存在大小写区别
2.1.4:userdel命令–删除用户账号
命令使用基本格式
userdel [-r] 用户名
添加-r选项时,表示连用户的宿主目录删除
2.1.5:用户账号的初始配置文件
添加一个新的用户账号后,useradd会在该用户的宿主目录中建立一些初始配置文件。这些文件来自账号模板目录’/etc/skel’,基本上都是隐藏文件。
因此,在’.bashrc’等文件中,我们可以添加自定义的可执行语句(Linux命令行,脚本控制语句等)来自动完成相应的任务。
2.2:组帐号管理
2.2.1:groupadd命令 --添加组账号
需要指定GID号时,可以使用’-g’选项。
命令执行基本格式
groupadd [-g GID] 组账号名
[root@33 ~]# groupadd -g 1000 market
2.2.2:gpasswd命令–添加删除组成员
设置组账号密码(极少用),添加/删除组成员
命令使用基本格式
gpasswd [选项] 组账号名
常用选项
-a 向组内添加一个用户
-d 从组中删除一个用户成员
-M 定义组成员列表,以逗号分隔
例如:向组内添加一个用户
[root@33 ~]# gpasswd -a 12
例如:从组内删除一个用户
[root@33 ~]# gpasswd -d 12
例如:添加多个用户
[root@33 ~]# gpasswd -M a,b,c,d
一定注意:如果用了-M,就是对组列表的覆盖。
-M需要首次使用,后面不能再次使用。
首次使用了-M后,再次添加用户需要使用-a
2.2.3:groupdel命令–删除组账号
使用命令基本格式
groupdel 组账号名
例如
[root@33 ~]# groupdel market
2.2.4:查询账号信息
在用户管理工作中,虽然直接查看用户账号,组账号的配置文件也可以查询相关信息,但不是很乐观。在Linux系统中,还可以使用几个常用的命令查询工具。
id命令:查询用户账号的身份标识
使用id命令可以快速查看指定用户账号的UID,GID等表示信息。
id命令基本格式
id [用户名] 查询用户身份标识
groups命令:查询用户账号所属的组
groups命令可以查看指定的用户账号属于哪些组
groups命令使用格式
groups [用户名] 查询用户所属的组
finger命令:查询用户账号的详细信息
finger命令可以查询指定的账号的登录属性等详细信息,包括登录名称,完整名称,宿主目录,登录shell等。
finger命令使用格式
finger [用户名] 查询用户账号的详细信息
w命令:查询一登录到主机的用户信息
使用w命令可以查询当前主机中用户登录的情况,列出登录账号名称,所在终端,登录时间,来源地点等信息。
[root@33 ~]# w
12:16:47 up 2:27, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.197.1 09:51 7.00s 0.10s 0.02s w
~]#lastb 查看最近登录的历史记录
1
三:文件/目录的权限和归属
3.1:访问权限和归属(所有权)
3.1.1:访问权限
3.1.2:归属(所有权)
3.2:查看文件/目录的权限和归属
理解权限字段-rw-r–r–的含义
我们可以使用-rwxrwxrwx来表示权限也可以用777来表示权限。
rwx采用累加数字形式表示成 7 , r-x 表示成 5 , rwxr-xr-x 表示成755,rw-r–r–表示成644
数字固定不会变,一个普通的数据文件没有执行权限。
3.3:设置文件/目录的权限和归属
3.3.1:chmod命令–设置文件和目录权限
chmod命令使用基本格式
chmod [ugoa] [+-=] [rwx] 文件或目录 (不常用) (u,g,o,a分别表示属主,属组,其他用户,所有用户)(+-=分别表示增加,去除,设置权限)
或
chmod nnn 文件或目录 (最常用) (nnn表示三位八进制数字,如刚刚提到的 777,755,644等)
常用选项
-R 递归修改指定目录下所有子项的权限
3.3.2:chown命令–设置文件和目录的归属
chown命令使用基本格式
chown 属主 文件或目录
chown:属组 文件或目录
chown 属主:属组 文件或目录
常用选项
-R 递归修改指定目录下所有文件,子目录的归属
3.3.4:权限掩码 umask
umask设置命令格式
umask 000(000指数字)
umask查看
umask
umask的分数指的是“该默认值需要减掉的权限,”因此,如果执行“umask 022”,代表group和other被拿掉了权限“2”,也就是被拿掉了写的权限。
如果执行命令“umask 000”,代表文件的默认权限是“777”
-R 递归修改指定目录下所有文件,子目录的归属
如何修改Umask值呢?
1、临时修改 umask 066 (这个066根据的根据的需求定,可以理解成反子网掩码,这个是临时的)
2、vi /etc/bashrc 最后一样插入umask 066 (这个是永久生效的)
[root@localhost tmp]# vim /etc/profile
/etc/bashrc或/etc/profile
立即在当前系统生效
[root@lewis ~]# source /etc/profile
[root@lewis ~]# source /etc/bashrc
新建目录权限 等于 777-umask
新建文件权限等于 666-umask