普通权限
Linux权限基于UGO模型进行控制:U代表User属主,G代表Group属组,O代表Other其他用户
每一个权限由文件所有者,文件所属组,其他用户3部分组成,每一部分都有读写执行3项权限,设置时可用数字表示
Linux权限分为:读(R)权限,设置时可用数字4表示
写(w)权限,设置时可用数字2表示
可执行(x)权限,设置时可用数字1表示
Linux的特殊权限
Linux的特殊权限是为了让一般用户在执行某些程序的时候,能够暂时具有该程序拥有者的权限
SUID:是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
SGID:暂时拥有属主的权限
SBIT:用户只能删除自己的文件通常对目录设置
suid 4 针对文件
sgid 2 针对目录
sticky 粘滞位 针对目录
文件类型的表示:
Linux系统中一切都是文件,但是每个文件的类型不尽相同,因此Linux系统使用了不同的字符来
-: 普通文件
d: 目录
l: 符号连接文件
b: 块文件
c: 字符设备文件
p: 管道文件
设置和修改权限
用chown更改文件的属主,属组
chown linux file1 更改file1的属主为linux,且linux这个用户必须存在
chown .alice file2 更改file2的属组为alice,且alice这个组必须存在
chown linux:alice file3 同时更改file3的属主和属组
用chgrp更改文件的属组(chgrp)
chgrp alice file4 更改file4的属组
chgrp -R alice /dir1 更改dir1目录下的所有文件和目录
用chmod更改权限
chmod u+r 文件名 给属主加读权限
chmod a+x 文件名 给所有用户和其他人加执行权限
chmod g-w file1 file1的属组去掉写权限)
chmod o=x 文件名 其他用户只有执行权限
chmod a=- 文件名 去除所有用户的权限
chmod ug=rw,o=r file 给属主属组读写权限,给其他用户读权限
chmod 644 file 给属组读写权限,其他用户和属组为读权限)
r w x 权限对文件和目录的意义
权限 针对文件 针对目录
r 可以读取文件的内容 可以列出目录的内容 需配合x使用
w 可以更改文件的内容 可以创建或删除目录中的任一文件 需配合x使用
x 可以作为命令执行文件 可以访问目录的内容(取决于目录中文件的权限)
再给目录单独设置读写权限的时候必须设置x权限否则仍会显示权限不够
测试方法:创建一个用户useradd Tony
创建一个目录mkdir -p /home/dir
并在此目录下创建一个文件echo 123 >> /home/dir/file
将目录的O部分的权限设为0:chmod 750 /home/dir
转换到Tony用户:su - Tony
转到/home/dir目录下:cd /home/dir
进行查看看能否出现file:ls
转到root用户:su - root 给/home/dir添加r权限chmod o+r /home/dir再转到Tony用户下进行查看,同理进行其他权限的测试
Linux Umask 预设权限
umask命令用来设置限制新建文件权限的掩码 umask #结果是八进制掩码,转换后则为022,oct(0022)
文件最大权限为 rwx rwx rwx (777)
umask 为022 — -w- -w
目录权限为 rwx r-x r-x (755)
文件权限 rw- r– r– (644)
修改shell umask (临时)
umask 000
在创建文件时需手动添加执行权限否则系统会自动去除文件的执行权限
修改shell umask (永久生效)
vim /etc/profile 进行修改
Linux ACL访问控制列表
如果你有一个目录,需要给多人使用,每个人或每个群组所需要的权限并不相同时,传统的 Linux 三种身份的三种权限是无法达到的, 因为传统的 Linux 权限只能针对一个用户、一个群组及非此群组的其他人设置权限而已,无法针对单一用户或个人来设计权限,ACL主要用在与提供传统的UGO的读写执行权限之外进行更细致的权限设置,可以针对单一文件,单一用户,单 一目录来进行权限设置
查询ACL功能是否启用(默认都启用)
cat /boot/config-3.10.0-693.el7.x86_64 | grep -i ext4 #centos6
如手工创建的文件系统,需要手工开启ACL功能
cat /boot/config-3.10.0-693.el7.x86_64 | grep -i xfs #centos7
基于文件的设置
useradd alice
touch acl_file1
ll acl_file1
setfacl -m u:alice:rx acl_file1
ll acl_file1
setfacl -m u::rxw acl_file1
ll acl_file1 #acl用户默认权限
查看文件的设置
getfacl acl_file1
基于组的设置
setfacl -m g:group1:rx acl_file1 getfacl acl_file1
基于mask的设置
setfacl -m m:r acl_file1
getfacl acl_file1
#file: acl_file1
#owner: root
#group: root
user::rw
user:alice:r-x #effective:r–(有效权限)使用者或群组所设置的权限必须要存 在于 mask 的权限设置范围内才会生效
group::r–
group:group1:r-x #effective:r-mask::r–
other::r-
#用户只有r权限,并没有x权限!mask的意义
在一个已经设置了acl目录下,增加文件或目录时,该文件或目录是否能够具有 ACL 的设置? 以上问题如何解决?
setfacl -m d:u:alice:rx /project #使用默认权限设置目录未来文件的 ACL 权限继承
“ d:[u|g]: [user|group]:权限 ”
取消权限
setfacl -x g:hr /home/text.txt 删除组hr的ACL权限
setfacl -x u:u1 /home/text.txt 删除用户u1的ACL权限
setfacl -b /home/text.txt 删除所有ACL权限
ACL权限是添加某一用户或者某一个组对于文件的权限
查看ACL权限,ll /home/text.txt 会显示出-rw-rw-r–+ 如果后面有一个+,说明这是有ACL设置的用户权限,并且中间的rw-显示的不是属组的权限,是mask权限
-rw-rwxr–+ 1 u77 u77 0 5月 10 15:45 file90 此时看到的中间三个权限是mask的权限
例题:
在/opt/里创建的新文件自动属于g1组,组 g2的成员如:alice能对这些新文件有读写权限,组g3 的成员 如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹
思路:
1.创建需要的目录:mkdir -p /opt/dir
2.创建需要的组: groupadd g1 && groupadd g2 && groupadd g3
3.将alice分配到g2:useradd -G g2 alice
4.将tom分配到g3: useradd -G g3 tom
5.将dir目录的属组设为g1:chgrp g1 /opt/dir
6.为dir目录添加s权限:chmod g+s /opt/dir (其下所创建的目录和文件都享有该目录权限,即在/opt/里创建的新文件自动属于g1组)
7.将目录o权限设置为0:chmod o= /opt/dir (其他用户无法访问)
8.为g2成员添加读写权限:setfacl -Rm d:g:g2:rw /opt/dir (g2成员对这些文件有读写权限)
9.为g3成员添加只读权限:setfacl -Rm d:g:g3:r /opt/dir (g3成员对文件有读权限)