目录
一. chmod
Linux chmod (英文全拼:change mode) 命令是控制用户对文件的权限的命令。
Linux/Unix 的文件调用权限分为三级:文件所有者 (0wner)、用户组 (Group)、其它用户 (Other Users)。
只有文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。
使用权限:所有使用者
语法:
chmod [-cfvR] [--help] [--version] mode file...
参数说明:
mode : 权限设定字串,格式如下 :
[ugoa...][[+-=][rwxX]...][,...]
其中:
- u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
- + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
- r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
其他参数说明:
- -c : 若该文件权限确实已经更改,才显示其更改动作
- -f : 若该文件权限无法被更改也不要显示错误讯息
- -v : 显示权限变更的详细资料
- -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
- --help : 显示辅助说明
- --version : 显示版本
由于Linux是一个多人多任务的系统,因此经常会出现同一台机器同时有多个人进行操作,为了考虑每个人的隐私权以及每个人喜好的工作环境,所以文件的权限归属就至关重要。
为了保障系统的安全性和文件的隐私性,一个文件针对不同权限的账户有着不同的权限,如下图:
如图所示,文件权限是由一个字符串所表示,其所代表的含义为:
其中,文档类型有如下表示方法:
- d - 目录,例如上表档名为 [.gconf] 的那一行;
- - - 文档,例如上表档名为 [install.log] 那一行;
- l - 连结档(link file);
- b - 装置文件里面的可供储存的接口设备(可随机存取装置);
- c - 装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
权限由rwx三个字幕表示,分别表示为可读、可写、可执行,如果没有该权限,则用 “ - ” 表示,对于目录来说,必须有x权限,否则无法读取目录内容。
如果文件名前面有“.”,则表示这个文档或目录是隐藏的。
二. ACL
2.1 什么是ACL权限
ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。它在UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。它被设计为UNIX文件权限管理的一个补充。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。
思考如何实现如下的权限控制:
- 每个项目成员在有一个自己的项目目录,对自己的目录有完全权限
- 项目组中的成员对项目目录也有完全权限
- 其他人对项目目录没有任何权限
- 对于被分配进入项目的临时人员,只有读和执行权限,不能修改
2.2 操作步骤
2.2.1 添加测试目录、用户、组,并将用户添加到组
[root@localhost ~]# mkdir /project
[root@localhost ~]# useradd zs
[root@localhost ~]# useradd ls
[root@localhost ~]# groupadd tgroup
[root@localhost ~]# gpasswd -a zs tgroup
正在将用户“zs”加入到“tgroup”组中
[root@localhost ~]# gpasswd -a ls tgroup
正在将用户“ls”加入到“tgroup”组中
查看组是否正常建立
[root@localhost ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
...
tgroup:x:1003:zs,ls
2.2.2 修改目录的所有者和所属组
[root@localhost ~]# chown root:tgroup /project
[root@localhost ~]# ll -d /project
drwxr-xr-x. 2 root tgroup 6 8月 23 18:35 /project
2.2.3 设定权限
输入chmod 770 /project
[root@localhost ~]# chmod 770 /project
[root@localhost ~]# ll -d /project
drwxrwx---. 2 root tgroup 6 8月 23 18:35 /project
2.2.4 为临时用户分配权限 r-x
1. 添加临时用户
[root@localhost ~]# useradd tempuser
[root@localhost ~]# passwd tempuser
2. 为临时用户分配特定权限
输入 getfacl /project 查看/project的详细控制信息
[root@localhost ~]# setfacl -m u:tempuser:rx /project
[root@localhost ~]# getfacl /project
getfacl: Removing leading '/' from absolute path names
# file: project
# owner: root
# group: tgroup
user::rwx
user:tempuser:r-x
group::rwx
mask::rwx
other::---
3. 查看目录权限,注意+,表示文件或目录有acl权限
[root@localhost ~]# ll -d /project
drwxrwx---+ 2 root tgroup 6 8月 23 18:35 /project
2.2.5 验证acl权限
1. 切换到临时用户tempuser
[root@localhost ~]# su tempuser
[tempuser@localhost root]$
2. 验证可以进入project目录
[tempuser@localhost root]$ cd /project
[tempuser@localhost project]$
3. 验证不能在project中创建文件
[tempuser@localhost project]$ touch test.txt
touch: 无法创建"test.txt": 权限不够
2.2.6 控制组的acl权限
1. 创建一个temp组
[tempuser@localhost project]$ su root
密码:
[root@localhost project]# groupadd temp
2. 设置组的acl
[root@localhost project]# setfacl -m g:temp:rx /project
3. 查看设置后acl
[root@localhost project]# getfacl /project
getfacl: Removing leading '/' from absolute path names
# file: project
# owner: root
# group: tgroup
user::rwx
user:tempuser:r-x
group::rwx
group:temp:r-x
mask::rwx
other::---
4. 创建一个用户,并将该用户设置为temp组
[root@localhost project]# useradd tempu02
[root@localhost project]# passwd tempu02
更改用户 tempu02 的密码:
新的 密码:
5. 将用户添加到temp组中
[root@localhost project]# gpasswd -a tempu02 temp
正在将用户“tempu02”加入到“temp”组中
6. 验证
[root@localhost project]# su tempu02
# 可以进入目录
[tempu02@localhost project]$ cd /project
[tempu02@localhost project]$ ls
# 不能创建文件
[tempu02@localhost project]$ touch aa.txt
touch: 无法创建"aa.txt": 权限不够