系列文章导航:01_Linux基础操作CentOS7学习笔记-CSDN博客
文章目录
- Linux 文件权限与管理命令
-
- 一、Linux 文件类型
- 二、用户/组管理
-
- 用户相关文件
- 用户信息解析
- 用户密码管理:`shadow` 阴影文件解析
- 用户管理命令
-
-
- **`useradd`**:添加新用户
-
- **`usermod`**:修改用户信息
-
- **`userdel`**:删除用户
-
- **`chage`**:用户密码管理
-
- **`passwd`**:更改用户密码
-
- **`id`**:显示用户 ID 信息
-
- **`su`**:切换用户身份
-
- **`w`**:显示当前登录用户信息
-
- **`who`**:显示系统中的用户信息
-
- **`whoami`**:显示当前用户名称
-
- 组管理命令
-
-
- **`groupadd`**:添加新组
-
- **`groupmod`**:修改组信息
-
- **`groupdel`**:删除组
-
- **`groupmems`**:组成员设置命令
-
- **`gpasswd`**:管理组密码
-
- **`groups`**:显示用户所属的组
-
- 三、权限管理
-
- 文件权限
-
-
- chmod - 改变文件模式
-
- chown - 改变文件所有者
-
- chgrp - 改变文件组
-
- 特殊权限
-
-
- setuid、setgid、sticky - 特殊权限
-
- umask - 设置文件创建屏蔽字
-
- setfacl - 设置文件访问控制列表
-
- getfacl - 获取文件访问控制列表
-
- chattr - 改变文件属性
-
- lsattr - 显示文件属性
-
Linux 文件权限与管理命令
在 Linux 系统中,文件权限和用户/组管理是保证系统安全性和数据完整性的重要机制。本章将详细介绍 Linux 中用于管理文件权限和用户/组的相关命令。
一、Linux 文件类型
在 Linux 系统中,文件类型是多样化的,包括普通文件、目录文件、块设备文件等。我们可以通过 file
命令来查看文件的具体类型:
shell
file 文件名 # 查看文件类型
常见的文件类型包括:
- b:块设备文件
- c:字符设备文件
- d:目录文件
- p:管道文件
- -:普通文件/文本文件
- l:链接文件
- s:套接字文件
二、用户/组管理
用户相关文件
在 Linux 系统中,用户信息被存储在多个关键文件中,包括:
-
/etc/login.defs
: 用户建立的模板 决定默认调用useradd的一些选项 -
/etc/passwd
: 存储用户信息(决定一个用户是否存在) -
/etc/shadow
: 存储密码信息 -
/etc/group
:存储组信息 -
/etc/gshadow
:存储组密码信息,当前没有启用组密码功能 -
$HOME
:用户的家目录 /home/user01 /root -
~/.bash_profile
: 环境变量 -
~/.bashrc
: bash配置文件 -
~/.bash_logout
: 注销用户执行的脚本 -
/etc/skel/*
: 用户环境配置文件模板(建立用户家目录后,拷贝skel目录下所有文件到用户家)
用户信息解析
/etc/passwd
文件中的用户信息由多个字段组成,以冒号分隔:
shell
username:x:UID:GID:GECOS:Home_Directory:Shell
例如:
shell
cen2333:x:1000:1000:cen2333:/home/cen2333:/bin/bash
1.cen2333用户名
2.x 密码占未符 如果此为空 登陆无需密码
3.1000 用户uid
4.1000 用户组gid
5.cen2333用户的注释信息
6./home/cen2333 用户家目录
7./bin/bash 用户登陆shell
/etc/passwd文件的 密码中 x 代表所有密码存放到 /etc/shadow (把用户密码分离)
shell
用户密码分离 --> Linux 中 shadow 功能定义
shadow 定义方法
authconfig-tui 设定 [*] use shadow passwords
使用 shadow --> 密码存放到 /etc/shadow
不使用 shadow --> 密码存放 /etc/passwd (不推荐使用)
假如把 /etc/passwd 中密码部分删除 (x 去掉) ,登陆不校验密码
用户登录为管理员或者用户切换 ( su - root ) 都不需要密码
用户密码管理:shadow
阴影文件解析
Linux 系统通过 shadow
功能增强密码的安全性,将密码信息存储在 /etc/shadow
文件中,以提供更细粒度的密码策略控制。以下是 /etc/shadow
文件中记录的字段详解:
shell
username:hashed_password:last_change:minimum:maximum:warning:inactive:expire:
以一个实例来说明这些字段的含义:
shell
user1001:$1$SefNk95S$OY4g7fMVcRNvcxLJWwW.91:14940:0:99999:7:0:14950:
-
用户名 (
user1001
): 这是账户的用户名。管理员可以通过usermod -l otherName user1001
来更改用户名。 -
加密密码 (
$1$SefNk95S$OY4g7fMVcRNvcxLJWwW.91
): 这是经过加密的密码。如果这一字段为空,表示该用户不需要密码即可登录。密码可以通过passwd user1001
命令来更改。 -
密码最后修改时间 (
14940
): 这是自1970年1月1日以来的天数,表示密码最后被修改的时间。如果设置为0,则用户在下次登录时将被强制修改密码。可以通过chage -d 0 user1001
来设置。 -
密码最小修改间隔 (
0
): 这是用户两次密码修改之间的最小天数。如果设置为0,用户可以随时更改密码。可以通过chage -m 3 user1001
来设置为3天。 -
密码最大有效期限 (
99999
): 这是密码的最大有效天数。如果设置为15天,则用户必须每15天更改一次密码。可以通过chage -M 15 user1001
来设置。 -
密码过期前警告天数 (
7
): 这是在密码过期前系统开始警告用户的天数。可以通过chage -W 7 user1001
来设置。 -
密码过期后账户锁定天数 (
0
): 这是密码过期后用户账户被锁定的天数。如果设置为0,表示账户不会被锁定。可以通过chage -I 3 user1001
来设置为3天。 -
账户过期时间 (
14950
): 这是账户过期的绝对时间,表示自1970年1月1日以来的天数。账户过期后,用户将无法登录。可以通过chage -E 2019-07-22 user1001
来设置。 -
保留标志 (通常为空): 这个字段目前没有被使用,保留以备将来使用。
通过这些字段,系统管理员可以精确控制用户的密码策略,包括密码的加密方式、修改间隔、有效期、警告期和账户锁定策略,从而增强系统的安全性。
用户管理命令
1. useradd
:添加新用户
Linux useradd 命令用于建立用户帐号。
useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码。而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。
语法
shell
useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>][-u <uid>][用户帐号]
或
shell
useradd -D [-b][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>]
参数说明:
- -c<备注> 加上备注文字。备注文字会保存在passwd的备注栏位中。
- -d<登入目录> 指定用户登入时的起始目录。
- -D 变更预设值.
- -e<有效期限> 指定帐号的有效期限。
- -f<缓冲天数> 指定在密码过期后多少天即关闭该帐号。
- -g<群组> 指定用户所属的群组。
- -G<群组> 指定用户所属的附加群组。
- -m 制定用户的登入目录。
- -M 不要自动建立用户的登入目录。
- -n 取消建立以用户名称为名的群组.
- -r 建立系统帐号。
- -s 指定用户登入后所使用的shell。
- -u 指定用户ID。
实例
添加一般用户
shell
# useradd tt
为添加的用户指定相应的用户组
shell
# useradd -g root tt
创建一个系统用户
shell
# useradd -r tt
为新添加的用户指定home目录
shell
# useradd -d /home/myd tt
建立用户且制定ID
shell
# useradd caojh -u 544
2. usermod
:修改用户信息
Linux usermod命令用于修改用户帐号。
usermod可用来修改用户帐号的各项设定。
语法
shell
usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]
参数说明:
- -c<备注> 修改用户帐号的备注文字。
- -d登入目录> 修改用户登入时的目录。
- -e<有效期限> 修改帐号的有效期限。
- -f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。
- -g<群组> 修改用户所属的群组。
- -G<群组> 修改用户所属的附加群组。
- -l<帐号名称> 修改用户帐号名称。
- -L 锁定用户密码,使密码无效。
- -s 修改用户登入后所使用的shell。
- -u 修改用户ID。
- -U 解除密码锁定。
实例
更改登录目录
shell
# usermod -d /home/hnlinux root
改变用户的uid
shell
# usermod -u 777 root
3. userdel
:删除用户
Linux userdel命令用于删除用户帐号。
userdel可删除用户帐号与相关的文件。若不加参数,则仅删除用户帐号,而不删除相关文件。
语法
shell
userdel [-r][用户帐号]
参数说明:
- -r 删除用户登入目录以及目录中所有文件。
实例
删除用户账号
shell
# userdel hnlinux
4. chage
:用户密码管理
chage
命令用于更改用户账户的密码政策信息,如密码的有效期、密码修改间隔、密码过期警告期等。以下是 chage
命令的一些关键功能和用法:
主要功能
- 修改用户密码的有效期
- 设置密码必须更改的最小和最大时间间隔
- 配置密码过期前的警告期
- 规定密码过期后账户锁定的时间
命令语法
shell
chage [选项] 用户名
选项说明
-d
:设置密码最后修改时间。如果设置为0
,则用户在下次登录时必须更改密码。-M
:设置密码的最大有效期限(天数)。例如,设置为30
表示密码每 30 天必须更改一次。-m
:设置密码的最小修改间隔(天数)。例如,设置为3
表示用户可以在至少 3 天后更改密码。-W
:设置密码过期前警告用户的天数。例如,设置为7
表示在密码过期前 7 天开始警告用户。-I
:设置密码过期后账户被锁定的天数。例如,设置为1
表示密码过期后 1 天账户将被锁定。-E
:设置账户的过期日期。
示例
以下是如何使用 chage
命令来设置用户 cen233
的密码策略,以满足特定需求的示例:
需求:
- 新建用户
cen233
,初始密码为redhat
- 第一次登录时强制修改密码
- 每隔 30 天更新密码
- 更新提示前 3 天提醒
- 延期 1 天
- 用户使用期限为 2 年
shell
# 创建用户 "cen233"
useradd cen233
# 设置初始密码为 "redhat"
echo "redhat" | passwd --stdin cen233
# 使用 chage 命令设置密码策略
chage -d 0 -M 30 -W 3 -I 1 -E 2025-07-12 cen233
-d 0
:强制用户在第一次登录时修改密码。-M 30
:设置密码的最大使用天数为 30 天。-W 3
:在密码过期前 3 天提醒用户更新密码。-I 1
:设置用户密码过期后延期 1 天禁用账户。-E 2025-07-12
:设置用户的使用期限为到 2025 年 7 月 12 日。
通过这些设置,您可以确保用户的密码定期更新,同时在密码过期前给予用户适当的警告,以维护系统的安全性。
黑客帐号 复制root ID号 并 不使用密码 直接登录
shell
echo "hk01::0:0::/root:/bin/bash" >> /etc/passwd
5. passwd
:更改用户密码
shell
passwd 设置密码
-d 去掉密码(危险)
-l 锁定用户
-u 解锁
-S 了解用户密码信息状态
# passwd ---给当前用户设置密码
# passwd abc ---给abc设置密码,只有root用户才有权限给其他用户设置密码
使用非交互模式设置密码: ( | 管道,进程间通信的机制 )
bash
echo "123456" | passwd --stdin abc
6. id
:显示用户 ID 信息
Linux id命令用于显示用户的ID,以及所属群组的ID。
id 会显示用户以及所属群组的实际与有效 ID,若两个 ID 相同,则仅显示实际 ID,若仅指定用户名称,则显示目前用户的 ID。
该命令会显示用户的 UID(User ID)、GID(Group ID)以及附属于用户的所有组 ID。
语法
shell
id [-gGnru][--help][--version][用户名称]
参数说明:
- -g 或 --group 显示用户所属群组的ID。
- -G 或 --groups 显示用户所属附加群组的ID。
- -n 或 --name 显示用户,所属群组或附加群组的名称。
- -r 或 --real 显示实际ID。
- -u 或 --user 显示用户ID。
- -help 显示帮助。
- -version 显示版本信息。
实例
显示当前用户信息:
shell
[root@lianghui ~]# id
uid=0(root) gid=0(root) groups=0(root)
显示用户群组的 ID:
shell
# id -g
0
显示所有群组的 ID:
shell
# id -G
0 1 2 3 4 5 6 10
显示指定用户信息
shell
[root@lianghui ~]# id redhat
uid=1002(redhat) gid=1002(redhat) groups=1002(redhat),1(bin),12(mail),2234(itgrp)
7. su
:切换用户身份
Linux su(英文全拼:switch user)命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。
使用权限:所有使用者。su 切换用户 '-' 指切换用户时加载该用户的环境变量配置。
语法
shell
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]
参数说明:
- -f 或 --fast 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
- -m -p 或 --preserve-environment 执行 su 时不改变环境变数
- -c command 或 --command=command 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
- -s shell 或 --shell=shell 指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell
- --help 显示说明文件
- --version 显示版本资讯
-
- -l 或 --login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root
- USER 欲变更的使用者帐号
- ARG 传入新的 shell 参数
实例
变更帐号为 root 并在执行 ls 指令后退出变回原使用者
shell
su -c ls root
变更帐号为 root 并传入 -f 参数给新执行的 shell
shell
su root -f
变更帐号为 clsung 并改变工作目录至 clsung 的家目录(home dir)
shell
su - clsung
切换用户
shell
hnlinux@runoob.com:~$ whoami //显示当前用户
hnlinux
hnlinux@runoob.com:~$ pwd //显示当前目录
/home/hnlinux
hnlinux@runoob.com:~$ su root //切换到root用户
密码:
root@runoob.com:/home/hnlinux# whoami
root
root@runoob.com:/home/hnlinux# pwd
/home/hnlinux
切换用户,改变环境变量
shell
hnlinux@runoob.com:~$ whoami //显示当前用户
hnlinux
hnlinux@runoob.com:~$ pwd //显示当前目录
/home/hnlinux
hnlinux@runoob.com:~$ su - root //切换到root用户
密码:
root@runoob.com:/home/hnlinux# whoami
root
root@runoob.com:/home/hnlinux# pwd //显示当前目录
/root
8. w
:显示当前登录用户信息
Linux w命令用于显示目前登入系统的用户信息。
执行这项指令可得知目前登入系统的用户有哪些人,以及他们正在执行的程序。
单独执行 w 指令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。
语法
shell
w [-fhlsuV][用户名称]
参数说明:
- -f 开启或关闭显示用户从何处登入系统。
- -h 不显示各栏位的标题信息列。
- -l 使用详细格式列表,此为预设值。
- -s 使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间。
- -u 忽略执行程序的名称,以及该程序耗费CPU时间的信息。
- -V 显示版本信息。
实例
显示当前用户
shell
// 显示当前用户登录信息及执行的命令
[root@lianghui ~]# w
13:31:37 up 2:15, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 11:17 2:14m 0.03s 0.03s -bash
root pts/0 192.168.100.1 11:17 1.00s 0.97s 0.00s w
不显示登录位置
shell
[root@lianghui ~]# w -f
13:31:41 up 2:15, 2 users, load average: 0.00, 0.01, 0.05
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root tty1 11:17 2:14m 0.03s 0.03s -bash
root pts/0 11:17 5.00s 0.98s 0.00s w -f
以精简模式显示
shell
[root@lianghui ~]# w -s
13:31:52 up 2:15, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM IDLE WHAT
root tty1 2:14m -bash
root pts/0 192.168.100.1 0.00s w -s
不显示标题
shell
[root@lianghui ~]# w -h
root tty1 11:17 2:14m 0.03s 0.03s -bash
root pts/0 192.168.100.1 11:17 4.00s 0.98s 0.00s w -h
M LOGIN@ IDLE JCPU PCPU WHAT
root tty7 :0 Thu12 31:39m 10:10 0.60s gnome-session
root pts/0 :0.0 17:09 2:18m 15.26s 0.15s bash
root pts/1 192.168.1.17 18:51 1.00s 1.24s 0.14s -bash
root pts/2 192.168.1.17 19:48 60.00s 0.05s 0.05s -bash
9. who
:显示系统中的用户信息
Linux who命令用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等。
使用权限:所有使用者都可使用。
语法
shell
who - [husfV] [user]
参数说明:
- -H 或 --heading:显示各栏位的标题信息列;
- -i 或 -u 或 --idle:显示闲置时间,若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串;
- -m:此参数的效果和指定"am i"字符串相同;
- -q 或--count:只显示登入系统的帐号名称和总人数;
- -s:此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题;
- -w 或-T或--mesg或--message或--writable:显示用户的信息状态栏;
- --help:在线帮助;
- --version:显示版本信息。
实例
显示当前登录系统的用户
shell
[root@lianghui ~]# who
root tty1 2023-07-23 11:17
root pts/0 2023-07-23 11:17 (192.168.100.1)
显示标题栏
shell
# who -H
显示用户登录来源
shell
# who -l -H
显示终端属性
shell
[root@lianghui ~]# who -T -H
NAME LINE TIME COMMENT
root + tty1 2023-07-23 11:17
root + pts/0 2023-07-23 11:17 (192.168.100.1)
只显示当前用户
shell
[root@lianghui ~]# who -m -H
NAME LINE TIME COMMENT
root pts/0 2023-07-23 11:17 (192.168.100.1)
精简模式显示
shell
[root@lianghui ~]# who -q
root root
# users=2
10. whoami
:显示当前用户名称
Linux whoami命令用于显示自身用户名称。
显示自身的用户名称,本指令相当于执行"id -un"指令。
语法
shell
whoami [--help][--version]
参数说明:
- --help 在线帮助。
- --version 显示版本信息。
实例
显示用户名
shell
# whoami
root
组管理命令
1. groupadd
:添加新组
groupadd 命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。
相关文件:
- /etc/group 组账户信息。
- /etc/gshadow 安全组账户信息。
- /etc/login.defs Shadow密码套件配置。
语法
groupadd 命令 语法格式如下:
shell
groupadd [-g gid [-o]] [-r] [-f] group
参数说明:
- -g:指定新建工作组的 id;
- -r:创建系统工作组,系统工作组的组 ID 小于 500;
- -K:覆盖配置文件 /etc/login.defs;
- -o:允许添加组 ID 号不唯一的工作组。
- -f,--force: 如果指定的组已经存在,此选项将失明了仅以成功状态退出。当与 -g 一起使用,并且指定的 GID_MIN 已经存在时,选择另一个唯一的 GID(即 -g 关闭)。
实例
创建一个新的组,并添加组 ID。
shell
#groupadd -g 344 runoob
此时在 /etc/group 文件中产生一个组 ID(GID)是 344 的项目。
2. groupmod
:修改组信息
Linux groupmod命令用于更改群组识别码或名称。
需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作。
语法
shell
groupmod [-g <群组识别码> <-o>][-n <新群组名称>][群组名称]
参数:
- -g <群组识别码> 设置欲使用的群组识别码。
- -o 重复使用群组识别码。
- -n <新群组名称> 设置欲使用的群组名称。
实例
修改组名
shell
[root@lianghui ~]# groupadd linuxso
[root@lianghui ~]# tail -1 /etc/group
linuxso:x:500:
[root@lianghui ~]# tail -1 /etc/group
linuxso:x:500:
[root@lianghui ~]# groupmod -n linux linuxso
[root@lianghui ~]# tail -1 /etc/group
linux:x:500:
3. groupdel
:删除组
Linux groupdel命令用于删除群组。
需要从系统上删除群组时,可用groupdel(group delete)指令来完成这项工作。倘若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
语法
shell
groupdel [群组名称]
实例
删除一个群组
shell
# groupdel hnuser
4. groupmems
:组成员设置命令
groupmems
命令用于管理 Linux 系统中组的成员。以下是该命令的常用选项及示例:
-
-a
:将某个用户加入指定组shell# 将用户 it01 加入 itgrp 组 groupmems -a it01 -g itgrp # 将用户 it03 加入 itgrp 组 groupmems -a it03 -g itgrp # 将用户 it05 加入 itgrp 组 groupmems -a it05 -g itgrp
-
-d
:将某个用户从指定组移除shell# 从 itgrp 组中移除用户 it03 groupmems -d it03 -g itgrp
-
-p
:清空指定组的所有成员shell# 清空 itgrp 组的所有成员 groupmems -p -g itgrp
-
-l
:查询指定组中的成员shell# 查询 itgrp 组中的所有成员 groupmems -l -g itgrp
通过使用 groupmems
命令,可以方便地管理用户组的成员,确保组的成员信息保持最新。
5. gpasswd
:管理组密码
gpasswd
是一个用于管理 Linux 系统工作组文件 /etc/group
和 /etc/gshadow
的工具,它允许将用户添加到组或从组中删除用户。
语法
shell
gpasswd [选项] 组名
可选项参数
-a
:添加用户到组。-d
:从组删除用户。-A
:指定可以管理该组的管理员。-M
:指定组成员列表,与-A
类似。-r
:删除组的密码。-R
:限制只有组内的成员可以使用newgrp
命令加入该组。
实例
- 为
groupname
组设置密码,使得知道该组密码的用户可以临时加入该组:
shell
gpasswd groupname
- 将用户
peter
设置为users
组的管理员,这样peter
就可以将其他用户添加到users
组:
shell
gpasswd -A peter users
peter
作为管理员,将mary
和allen
添加到users
组:
shell
gpasswd -a mary users
gpasswd -a allen users
- 如果您想添加一个用户到一个组并保留他们之前所属的所有组,可以使用以下命令:
shell
gpasswd -a user_name group_name
注意:使用 usermod -G group_name user_name
命令添加用户到指定组会清空用户之前所属的所有组。
6. groups
:显示用户所属的组
groups
命令用于显示当前用户所属的所有用户组。
语法格式
shell
groups [选项] [用户]
常用参数
-g
:仅显示用户所属的主组 ID。-n
:显示用户及其所属组的名称,而不是 ID。-o
:与-n
选项结合使用,仅显示用户及其所属组的名称。用户
:指定要显示所属组的用户。如果未指定用户,则显示当前用户所属的组。
参考示例
- 显示当前用户所属的所有组:
shell
groups
- 显示指定用户所属的所有组:
shell
groups username
- 显示当前用户的主组 ID:
shell
groups -g
- 显示当前用户及其所属组的名称:
shell
groups -n
- 仅显示当前用户及其所属组的名称:
shell
groups -n -o
补充介绍 :Linux 系统中,每个用户可以属于多个用户组,这些组通常用来控制文件和目录的访问权限。groups
命令可以帮助您确定当前用户所属的所有组,从而更好地管理和维护文件系统的安全性。
三、权限管理
文件权限
Linux 文件权限分为三级:文件所有者、用户组、其他用户。权限包括读(r)、写(w)和执行(x)。
1. chmod - 改变文件模式
chmod
命令用于更改文件或目录的访问权限。权限分为三级:文件所有者(Owner)、用户组(Group)、其他用户(Other Users)。权限可以通过八进制数字模式或符号模式来设置。
语法:
shell
chmod [-cfvR] mode file...
参数说明:
mode
:权限设定字串,如[ugoa...][[+-=][rwxX]...]
ugo
:分别代表用户(user)、组(group)、其他(others)+
增加权限,-
取消权限,=
唯一设定权限r
读,w
写,x
执行,X
当文件是个目录或者已经设定为可执行时,表示可执行
示例:
shell
chmod u+x file # 给文件所有者增加执行权限
chmod 755 file # 设置文件权限为所有者可读写执行,组和其他用户可读可执行
2. chown - 改变文件所有者
chown
命令用于更改文件或目录的所有者和/或所属组。只有超级用户(root)或文件所有者可以执行此命令。
语法:
shell
chown [-cfhvR] user[:group] file...
参数说明:
user
:新的文件所有者group
:新的文件所属组-c
:仅显示更改的部分-f
:忽略错误信息-R
:递归处理目录
示例:
shell
chown user:group file # 更改文件的所有者和组
chown -R user:group dir # 递归更改目录及其子目录的所有者和组
3. chgrp - 改变文件组
chgrp
命令用于更改文件或目录的所属组。与chown
不同,普通用户也可以更改文件的组,只要他们是该组的成员。
语法:
shell
chgrp [-cfhRv] group file...
参数说明:
group
:新的文件所属组-c
:仅显示更改的部分-f
:忽略错误信息-R
:递归处理目录
示例:
shell
chgrp group file # 更改文件的所属组
chgrp -R group dir # 递归更改目录及其子目录的所属组
特殊权限
4. setuid、setgid、sticky - 特殊权限
setuid
:设置文件的冒险位,执行文件时临时具有文件所有者的权限。setgid
:设置目录的强制位,新创建的文件继承父目录的组。sticky
:设置目录的粘滞位,用户只能删除自己的文件。
示例:
shell
chmod u+s file # 设置文件的setuid位
chmod g+s dir # 设置目录的setgid位
chmod o+t dir # 设置目录的sticky位
5. umask - 设置文件创建屏蔽字
umask
命令用于设置文件创建时的默认权限屏蔽字。
示例:
shell
umask 0022 # 设置默认的文件屏蔽字,新文件默认权限为644
6. setfacl - 设置文件访问控制列表
setfacl
命令用于设置文件或目录的访问控制列表(ACL),允许更精细的权限管理。
语法:
shell
setfacl [选项] file/directory
参数说明:
-m
:修改现有的ACL-x
:移除现有的ACL-R
:递归应用ACL
示例:
shell
setfacl -m u:user:rwx file # 设置用户对文件的权限
setfacl -R -m u:user:rwx dir # 递归设置用户对目录及其子目录的权限
7. getfacl - 获取文件访问控制列表
getfacl
命令用于显示文件或目录的访问控制列表(ACL)。
示例:
shell
getfacl file # 显示文件的ACL
8. chattr - 改变文件属性
chattr
命令用于改变文件的属性,如设置文件为只读或不可变。
语法:
shell
chattr [+-=] attribute file
参数说明:
+
:开启属性-
:关闭属性=
:设置属性
示例:
shell
chattr +i file # 设置文件为不可变
9. lsattr - 显示文件属性
lsattr
命令用于显示文件的属性。
示例:
shell
lsattr file # 显示文件的属性
通过这些命令和设置,Linux 系统管理员可以有效地管理文件权限和用户/组,确保系统的安全性和数据的完整性。