文章目录
Linux系统用户和权限
一. Linux用户
1.1. 创建用户
[useradd命令]:用于建立用户帐号。
useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>][-u <uid>][用户帐号]
或者
useradd -D [-b][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>]
// 参数说明:
-c<备注> 加上备注文字。备注文字会保存在passwd的备注栏位中。
-d<登入目录> 指定用户登入时的起始目录。
-e<有效期限> 指定帐号的有效期限。
-f<缓冲天数> 指定在密码过期后多少天即关闭该帐号。
-g<群组> 指定用户所属的群组。
-G<群组> 指定用户所属的附加群组。
-s<shell> 指定用户登入后所使用的shell。
-u<uid> 指定用户ID。
-D 变更预设值.
-m 制定用户的登入目录。
-M 不要自动建立用户的登入目录。
-n 取消建立以用户名称为名的群组.
-r 建立系统帐号。
-
下面演示创建一个ShaXiang的用户(本操作实在root用户下进行操作)。
[root@VM-8-14-centos lesson]# sudo useradd ShaXiang // 新增用户
// 查看是否创建成功用户
[root@VM-8-14-centos home]# ls // ShaXiang就是创建的新用户
lighthouse ShaXiang
[root@VM-8-14-centos home]# pwd // 所在的目录下
/home
-
给新的用户创建密码(本操作实在root用户下进行操作)
[root@VM-8-14-centos home]# sudo passwd ShaXiang // 创建密码
Changing password for user ShaXiang // 第一次密码
New password:
BAD PASSWORD: The password is shorter than 8 characters // 第二次密码
Retype new password:
passwd: all authentication tokens updated successfully.
// 切换用户
[root@VM-8-14-centos home]# su ShaXiang
[ShaXiang@VM-8-14-centos home]$ whoami // 查看当前用户
ShaXiang
1.2. 删除用户
[userdel命令]:命令用于删除用户帐号。
userdel [-r][用户帐号]
// 参数说明:
-r 删除用户登入目录以及目录中所有文件。
-
userdel命令可以用于删除用户帐号及相关档案。
userdel [-r] 用户名
[shaxiang@VM-8-14-centos home]$ whoami # 当前用户是shaxiang
shaxiang
[shaxiang@VM-8-14-centos home]$ cd liuxiang/
bash: cd: liuxiang/: Permission denied # 无权限访问
[shaxiang@VM-8-14-centos home]$ sudo userdel -r liuxiang # 删除liuxiang用户
userdel: user 'liuxiang' does not exist
二. Linux权限
2.1. Linux权限概念
Linux下有两种用户:超级用户(root)、普通用户
-
超级用户:可以再linux系统下做任何事情,不受限制。
-
普通用户:在linux下做有限的事情。
-
超级用户的命令提示符是“#”,普通用户的命令提示符是“$” 。
[lx@huaweiyun ~]$ whoami // 当前用户是lx
lx
[lx@huaweiyun ~]$ su // su是切换root用户
Password:
[root@huaweiyun lx]# whoami // 当前用户是root用户
root
[lx@huaweiyun ~]$ pwd // 当前的目录还是在原来的目录下,如果使用su -,那么目录就会切换为家目录。
/home/lx
[root@huaweiyun lx]# exit // 直接输入exit或者按下Ctrl+d都可以直接切换为原有的用户
[lx@huaweiyun ~]$ whoami
lx
[lx@huaweiyun ~]$ su - // su - 切换为root用户,就会切换目录
Password:
Last login: Sat Mar 9 23:33:51 CST 2024 on pts/0
[root@huaweiyun ~]# pwd
/root
// 下面的测试,普通用户需要密码才能切换为root用户,而root用户不需要密码就可以切换为任何一个普通用户。
[lx@huaweiyun ~]$ whoami
lx
[lx@huaweiyun ~]$ su - // 切换为root用户需要输入root密码
Password:
Last login: Sat Mar 9 23:38:18 CST 2024 on pts/0
[root@huaweiyun ~]# su lx // root切换为普通用户不需要任何密码
[lx@huaweiyun ~]$
不切换用户,就想让普通用户以root的用户执行指令:配置普通用户的sudo提权
-
第一步:切换成超级用户。
su 或者 su -
-
第二步:打开/etc/sudoers文件。
vim /etc/sudoers
# 这里如果没有切换到超级用户,就查看不了sudoers里的内容。
-
第三步:将用户添加到文件里。
这样就得配置完成了......
2.2. Linux权限管理
2.3. 文件访问者分类
-
文件和文件目录的所有者: u---User(中国平民 法律问题)。
-
文件和文件目录的所有者所在的组的用户: g---Group(不多说)。
-
其它用户: o---Others (外国人) 。
2.4. 文件类型和访问权限
-
文件类型
# 文件夹(目录文件)
d 开头
# 普通文件(源代码、库文件、可执行文件、文件压缩包等)
- 开头
# 软链接(类似Windows的快捷方式)
l 开头
# 块设备文件(例如硬盘、光驱等)
b 开头
# 管道文件
p 开头
# 字符设备文件(例如屏幕等串口设备)(键盘、显示器)
c 开头
# 套接口文件
s 开头
-
基本权限
# i.读(r/4) Read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。
# ii.写(w/2) Write 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限。
# iii.执行(x/1) execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限iv.“—”表示不具有该项权限 。
2.5. 文件权限值的表示方法
drwxr-xr-x 2 root root 4096 Oct 4 11:29 dir
-rw-r--r-- 1 root root 218967 Oct 1 19:42 file.txt
// 对于当前下:
dir:是一个文件夹(-d) 拥有者(读/写/可执行) 所属组(无读/写/可执行)其他人(无读/可写/无执行)
file:是一个文件(-) 拥有者(读/写/无执行) 所属组(读/无写/无执行) 其他人(读/无写/无执行)
2.6. 文件访问权限设置方法
2.6.1. chmod命令
chmod:(英文全拼:change mode)命令是控制用户对文件的权限的命令。
chmod [-cfvR] [--help] [--version] mode file...
// 参数说明
mode : 权限设定字串,格式如下: [ugoa...][[+-=][rwxX]...][,...]
其中:
u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
其他参数说明:
-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
2.6.2. chmod符号模式
使用符号模式可以设置多个项目:who(用户类型),operator(操作符)和 permission(权限),每个项目的设置可以用逗号隔开。 命令 chmod 将修改 who 指定的用户类型对文件的访问权限,用户类型由一个或者多个字母在 who 的位置来说明,如 who 的符号模式表所示:
who | 用户类型 | 说明 |
---|---|---|
u | user | 文件所有者 |
g | group | 文件所有者所在组 |
o | others | 所有其他用户 |
a | all | 所有用户, 相当于 ugo |
operator 的符号模式表:
Operator | 说明 |
---|---|
+ | 为指定的用户类型增加权限 |
- | 去除指定用户类型的权限 |
= | 设置指定用户权限的设置,即将用户类型的所有权限重新设置 |
permission 的符号模式表:
模式 | 名字 | 说明 |
---|---|---|
r | 读 | 设置为可读权限 |
w | 写 | 设置为可写权限 |
x | 执行权限 | 设置为可执行权限 |
X | 特殊执行权限 | 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行 |
s | setuid/gid | 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限 |
t | 粘贴位 | 设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位 |
// 1、将文件的拥有者、所属组、other的权限全部解除
-rwxr--r-- 1 root root 218967 Oct 1 19:42 file.txt
[root@VM-8-14-centos lesson]# chmod u-rwx file.txt // 解除拥有者的权限
[root@VM-8-14-centos lesson]# chmod g-r // 解除所属组的权限
[root@VM-8-14-centos lesson]# chmod o-r file.txt // 解除other的权限
[root@VM-8-14-centos lesson]# ll
---------- 1 root root 218967 Oct 1 19:42 file.txt // 查看结果
// 2、将文件的拥有者、所属组、other的权限全部增加
---------- 1 root root 218967 Oct 1 19:42 file.txt
[root@VM-8-14-centos lesson]# chmod u+rwx,g+rwx,o+rwx file.txt // 增加多个人所有权限。
[root@VM-8-14-centos lesson]# ll
-rwxrwxrwx 1 root root 218967 Oct 1 19:42 file.txt
// 3、all对所有的用户进行增加和删除权限
-rwxrwxrwx 1 root root 218967 Oct 1 19:42 file.txt
[root@VM-8-14-centos lesson]# chmod a-rwx file.txt // 对所有人员删除权限
[root@VM-8-14-centos lesson]# ll
---------- 1 root root 218967 Oct 1 19:42 file.txt
---------- 1 root root 218967 Oct 1 19:42 file.txt
[root@VM-8-14-centos lesson]# chmod a+rw file.txt
[root@VM-8-14-centos lesson]# ll
-rw-rw-rw- 1 root root 218967 Oct 1 19:42 file.txt // 对所有人员增加 读和写权限。
2.6.3. chmod8进制模式
chmod命令可以使用八进制数来指定权限。文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。
# | 权限 | rwx | 二进制 |
---|---|---|---|
7 | 读 + 写 + 执行 | rwx | 111 |
6 | 读 + 写 | rw- | 110 |
5 | 读 + 执行 | r-x | 101 |
4 | 只读 | r-- | 100 |
3 | 写 + 执行 | -wx | 011 |
2 | 只写 | -w- | 010 |
1 | 只执行 | --x | 001 |
0 | 无 | --- | 000 |
// 三位8进制数字
-rw-rw-rw- 1 root root 218967 Oct 1 19:42 file.txt
[root@VM-8-14-centos lesson]# chmod 000 file.txt // 8进制更改
[root@VM-8-14-centos lesson]# ll
total 216
---------- 1 root root 218967 Oct 1 19:42 file.txt // 所有的权限都没了。
[root@VM-8-14-centos lesson]# chmod 777 file.txt // 8进制更改权限
[root@VM-8-14-centos lesson]# ll
total 216
-rwxrwxrwx 1 root root 218967 Oct 1 19:42 file.txt //恢复所有人的权限
2.6.4. chown修改拥有者
权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
-
功能:修改文件的拥有者。
-
格式:chown [参数] 用户名 文件名。
-rw-rw-r-- 1 ShaXiang ShaXiang 0 Oct 4 12:51 file.txt
[root@VM-8-14-centos lesson]# chown root file.txt // 将拥有者权限给root
[root@VM-8-14-centos lesson]# ll
total 0
-rw-rw-r-- 1 root ShaXiang 0 Oct 4 12:51 file.txt
// 递归式的将文件下所有的权限给他人
[lx@huaweiyun test]$ ll
total 8
drwxr-xr-x 4 root root 4096 Mar 10 02:07 root_test
-rw-r--r-- 1 root root 0 Mar 10 02:04 root_test.cpp
drwxrwxr-x 2 lx lx 4096 Mar 10 00:48 test
-rw-rw-r-- 1 lx lx 0 Mar 10 00:32 test.cpp
[lx@huaweiyun test]$ sudo chown -R lx root_test // -R就是递归式修改权限
[sudo] password for lx:
[lx@huaweiyun test]$ ll
total 8
drwxr-xr-x 4 lx root 4096 Mar 10 02:07 root_test
-rw-r--r-- 1 root root 0 Mar 10 02:04 root_test.cpp
drwxrwxr-x 2 lx lx 4096 Mar 10 00:48 test
-rw-rw-r-- 1 lx lx 0 Mar 10 00:32 test.cpp
[lx@huaweiyun test]$ cd root_test
[lx@huaweiyun root_test]$ ll
total 8
drwxr-xr-x 2 lx root 4096 Mar 10 02:07 AAA
-rw-r--r-- 1 lx root 0 Mar 10 02:07 aaa.txt
drwxr-xr-x 2 lx root 4096 Mar 10 02:07 BBB
-rw-r--r-- 1 lx root 0 Mar 10 02:07 bbb.txt
2.6.5. chgrp命令
chgrp [-cfhRv][--help][--version][所属群组][文件或目录...] 或 chgrp [-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]
参数说明
-c 或 --changes:效果类似"-v"参数,但仅回报更改的部分。
-f 或 --quiet 或 --silent:不显示错误信息。
-h 或 --no-dereference:只对符号连接的文件作修改,而不改动其他任何相关文件。
-R 或 --recursive:递归处理,将指定目录下的所有文件及子目录一并处理。
-v 或 --verbose:显示指令执行过程。
--help:在线帮助。
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
--version:显示版本信息。
2.6.7. chgrp修改所属组
Linux chgrp(英文全拼:change group)命令用于变更文件或目录的所属群组。
-
功能:修改文件或目录的所属组。
-
格式:chgrp [参数] 用户组名 文件名。
-
常用选项:-R 递归修改文件或目录的所属组。
[root@VM-8-14-centos lesson]# chgrp root file.txt // 将所属组权限给root
[root@VM-8-14-centos lesson]# ll
total 0
-rw-rw-r-- 1 root root 0 Oct 4 12:51 file.txt
[root@VM-8-14-centos lesson]# chown ShaXiang:ShaXiang file.txt // 在root下退还权限
[root@VM-8-14-centos lesson]# ll
total 0
-rw-rw-r-- 1 ShaXiang ShaXiang 0 Oct 4 12:51 file.txt
三. file 指令
Linux file命令用于辨识文件类型。
file [-bcLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...]
// 参数:
-f<名称文件> 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
-m<魔法数字文件> 指定魔法数字文件。
-L 直接显示符号连接所指向的文件的类别。
-b 列出辨识结果时,不显示文件名称。
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-v 显示版本信息。
-z 尝试去解读压缩文件的内容。
[文件或目录...] 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
[ShaXiang@VM-8-14-centos lesson]$ file file.txt // file.txt是一个空文件。
file.txt: empty
四. umask 指令
-
为什么系统要有权限呢?答:权限的存在是便于我们对系统进行安全管理。
-
为什么我们创建的目录或者说普通文件,默认权限是我们所看到的样子呢?
drwxrwxr-x 2 ShaXiang ShaXiang 4096 Oct 4 13:02 dir
-rw-rw-r-- 1 ShaXiang ShaXiang 0 Oct 4 12:51 file.txt
-
Linux规定 目录的起始权限是从666开始的,文件的起始权限是从777开始的。
-
系统默认会配置好umask权限掩码:凡是在umask中出现的权限,都必须在起始权限中抹去。
[ShaXiang@VM-8-14-centos lesson]$ umask
0002
-----------------------------------------------------------------------------------------
[shaxiang@VM-8-14-centos lesson]$ touch file.txt
-rw-rw-r-- 1 shaxiang shaxiang 0 Apr 4 23:34 file.txt
-----------------------------------------------------------------------------------------
# 解释上面的默认创建文件的权限:
Linux规定:
目录的默认权限是 777=111 111 111 umask=0002 -> 111 111 101 -> 775 -> rwx rwx r-x
文件的默认权限是 666=111 111 111 umask=0002 -> 110 110 100 -> 664 -> rw- rw- r--
# 更改一下umask的值,我们看一下。
[ShaXiang@VM-8-14-centos lesson]$ umask 0111
[ShaXiang@VM-8-14-centos lesson]$ umask
0111
[ShaXiang@VM-8-14-centos lesson]$ touch file.txt
[ShaXiang@VM-8-14-centos lesson]$ ll
-rw-rw-rw- 1 ShaXiang ShaXiang 0 Oct 4 13:12 file.txt
[ShaXiang@VM-8-14-centos lesson]$ mkdir dir
[ShaXiang@VM-8-14-centos lesson]$ ll
drw-rw-rw- 2 ShaXiang ShaXiang 4096 Oct 4 13:12 dir
-rw-rw-rw- 1 ShaXiang ShaXiang 0 Oct 4 13:12 file.txt
# 这样权限就更改了。
umask权限的与文件的最终权限计算规则
五. 目录的特殊权限
-
可执行权限: 如果目录没有可执行权限, 则无法cd到目录中。
-
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容。
-
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。
六. 粘滞位
-
在Linux系统中,我们需要在一个公共的目录下,进行临时文件操作(增删查改)。
[ShaXiang@VM-8-14-centos /]$ ls // ls - 显示文件
bin boot data dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[ShaXiang@VM-8-14-centos /]$ ll tmp // tmp就是临时文件
total 4
-rw-r--r-- 1 root root 0 Oct 21 22:30 stargate.lock
drwx------ 3 root root 4096 Sep 29 22:14 systemd-private-eb98fd0a440c478092db31f0f9c0168b-ntpd.service-IXYGxE
[root@VM-8-14-centos //]# ls
bin boot data dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@VM-8-14-centos //]# sudo mkdir mytmp // 根目录下创建一个mytmp
[root@VM-8-14-centos //]# ls
bin boot data dev etc home lib lib64 lost+found media mnt mytmp opt proc root run sbin srv sys tmp usr var
[root@VM-8-14-centos //]# chmod 777 mytmp/ // 将文件提升到打开所有权限
drwxrwxrwx 2 root root 4096 Oct 28 09:00 mytmp // 所有权限都已打开
让一个公共的目录,大家各自可以进行rwx操作,但是要禁止大家相互删除对方,要对目录设置粘滞位。
// 对于粘滞位的添加也需要root进行设置、
bin boot data dev etc home lib lib64 lost+found media mnt mytmp opt proc root run sbin srv sys tmp usr var
[root@VM-8-14-centos /]# chmod +t mytmp // mytmp添加粘滞位
drwxrwxrwt 2 root root 4096 Oct 28 09:14 mytmp // t就是粘滞位权限。
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由。
-
超级管理员删除。
-
该目录的所有者删除。
-
该文件的所有者删除 。
八. 关于权限的总结
-
目录的可执行权限是表示你可否在目录下执行命令。
-
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
-
而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限
-
所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档 。