Linux系统中一切都是文件,文件和目录的所属与权限——来分别规定全部者、全部组、其他人的读,写,执行权限。算法
读(read),写(write),执行e(execute)简写即为(r,w,x),亦可用数字(4,2,1)表示vim
例以下图中的文件全部者(属主)为root,全部组(属组)为root,文件名为instsall.log,权限位的第一个减号”–“表明的是文件类型:-:普通文件,d:目录文件,l:连接文件,b:块设备文件,c:字符设备文件,p:管道文件ide
文件的权限为r w -r - -r- -也就是分别表示全部者(属主)有读写权限,全部组(属组)有读权限,其他人也仅有读权限。测试
权限的相关知识:ui
三种权限:spa
权限3d |
英文代号日志 |
数字代号orm |
文件权限说明blog |
目录权限说明 |
读read |
r |
4 |
能用cat、head、vi查看文件内容 |
能用ls命令查看 |
写write |
w |
2 |
能用echo、vi、vim添加内容到文件中 即容许修改文件内容 |
能用mkdir、touch执行建立操做 |
执行exec |
x |
1 |
命令、程序、脚本必须得有x执行权限,才能运行 |
能用cd命令打开此目录 |
7=4+2+1=rwx 5=4+1=r-x 6=4+2=rw- 4=r 777=rwx rwx rwx 755=rwx r-x r-x 644=rw- r—r-- 600=rw- --- --- |
权限中的三类用户:
用户类别 |
英文代号 |
权限的范围 |
用户本身user |
u |
权限中的前3位 |
本组用户group |
g |
权限中的中间3位 |
其余用户other |
o |
权限中的最后3位 |
全部用户all |
a |
会影响到权限中的9位 |
chmod命令
说明:chmod是change mode的缩写。用whatis chmod和whereis chmod可分别查询chmod命令的相关信息。
功能:修改权限的命令:chmod [选项] 权限 文件名或目录名
经常使用选项:--help
-v 显示执行过程
-R 递归修改目录及其子目录的全部文件权限。
权限修改中的代号:
u |
g |
o |
a |
+ |
- |
= |
用户 |
组 |
其余用户 |
全部用户 |
添加权限 |
减掉权限 |
设置新的权限 |
实例:用head命令将/etc/passwd文件中的前3行导入到/b.txt文件中,而后执行如下权限修改操做。
head -3 /etc/passwd > /b.txt (>大于号是重定向覆盖输出,即将本来显示在屏幕上的信息覆盖写入到>指定的文件中)
cat /b.txt
ls -l /b.txt
chmod -v 0 /b.txt 清除文件的全部权限
chmod -v u+rw /b.txt 给文件的属主(user)权限设置成rw可读可写
chmod -v g+r /b.txt 给文件的属组(group)权限设置成r可读
chmod -v o+r /b.txt 给文件的其余(other)用户权限设置成r可读
chmod -v a+x /b.txt 给文件的全部(all)用户设置x可执行权限
chmod -v u=rw,g=r,o=r /b.txt 或chmod -v 644 /b.txt 给文件的属主、属组、其余人从新受权
chmod -v a-r /b.txt 给文件的全部用户减掉r可读的权限
rm -f /b.txt 删除/b.txt文件
chown命令
说明:chown是change owner的缩写。用whatis chown和whereis chown可分别查询chown命令的相关信息。
功能:修改文件的拥有者(属主)和拥有组(属组):chown [选项] 用户名:组名 文件名
经常使用选项:--help
-v 显示操做过程
-R 递归修改目录及其子目录的全部属主、属组。
实验1:在根目录下建立一个文件/a.mp3,而后查看文件的详细信息,修改文件的属主为bin,再修改文件的属组为adm,最后同时修改文件的属主和属组为root,删除此/a.mp3文件。
cd / 进入根目录
touch a.mp3 在当前目录建立a.mp3文件
ls -l /a.mp3 查/a.mp3文件的权限
chown -v bin /a.mp3 修改/a.mp3文件的属主为bin
ll a.mp3
chown -v :adm /a.mp3 修改/a.mp3文件的属组为adm
chown -v root.root /a.mp3
rm -f /a.mp3
umask命令
文件权限的掩码:umask [权限]
umask默认值:root用户的是022,普通用户的是002。
umask的功能:会影响到用户建立的新文件、目录的最终权限。
实验测试:用mkdir在根目录下建立/dir目录,用touch建立文件/file,而后分别查看/dir、/file的详细信息,最后删除文件和目录。
umask 查看当前的umask值,它表示要去掉的权限
mkdir /dir
touch /file
ls -ld /dir 查看/dir目录的详细信息,也能够ll -d /dir
ls -l /file 查看/file文件的详细信息,也能够ll /file
rm -rf /dir /file
文件、目录最终权限的算法:满权限-umask权限=最终权限
目录的默认满权限:777 例如:777-022=755 777-031=746 rwx rwx rwx
文件的默认满权限:666 例如:666-022=644 666-031=646 rw- rw- rw-
777 |
666 |
666 |
|
umask |
022 |
022 |
031 |
计算过程
|
777-022 rwx rwx rwx --- -w- -w- |
666-022 rw- rw- rw- --- -w- -w- |
666-031 rw- rw- rw- 满权限 --- -wx --x 要去掉的权umask限 |
权限结果 |
rwx r-x r-x 即755 |
rw- r-- r-- 即644 |
rw- r-- rw- 即646 |
---------------------
UGO权限管理中必须会的内容:
一、熟悉r读、w写、x执行权限
二、熟悉ls -l和ls -ld查看文件、目录属性中的权限
三、用chmod修改u、g、o权限
四、用chown修改文件的属主和属组
五、明白umask的做用,熟悉权限值是如何计算的
FACL:文件访问控制列表file access control list,控制文件和目录访问权限的一种方式,FACL的级别高于普通的UGO权限(即用chmod设置的权限)。
facl应用场合:A用户建立的某个文件,精确到只想让B、C用户读写,就能够用FACL权限实现。
getfacl命令
查看文件、目录的FACL权限:getfacl 文件名
例如:getfacl /etc/passwd
说明:文件和目录的默认ACL权限跟UGO权限的值相同。
setfacl命令
设置文件的ACL权限:setfacl [选项] 权限 文件名
经常使用选项:
选项 |
功能 |
选项 |
功能 |
--help |
显示命令帮助 |
-k |
删除默认的ACL权限 |
-m |
即modify,设置或修改ACL权限 |
-R |
递归设置ACL权限(对目录及其子文件) |
-x |
删除指定用户的文件的ACL权限 |
-d |
即default,设置默认的ACL权限(仅用于目录,目录中新建立的文件会继承ACL权限) |
-b |
删除全部的ACL权限 |
setfacl案例
需求:进入当前用户的家目录,在当前目录中建立a.txt文件,对a.txt文件设置ACL权限,让adm用户对此文件有rw-权限,让lp组对此文件有r--权限。查看a.txt文件的ACL权限。最后删除a.txt文件。
功能 |
命令操做 |
进入当前用户的家目录 |
cd 或 cd ~ |
在当前目录下建立a.txt文件 |
touch a.txt |
查a.txt文件的ACL权限 |
getfacl a.txt |
在a.txt文件上添加adm用户的ACL权限 |
setfacl -m u:adm:rw- a.txt |
在a.txt文件上添加bin组的ACL权限 |
setfacl -m g:bin:rw- a.txt |
查a.txt文件的ACL权限 |
getfacl a.txt |
强制删除a.txt文件 |
rm -f a.txt |
注意:若是ACL权限不起做用,说明分区挂载时没有用acl选项来启动文件系统的ACL权限功能。
功能:让命令的执行者临时拥有命令的属主(root)权限(仅对有可执行权限的二进制程序[即命令]有效)
设置suid权限的方法:chmod u+s 文件名
例1:依次查看/bin/cat、/etc/shadow文件的属性,切换到u1用户,用cat 查看/etc/shadow文件,exit退出u1的登陆。
功能:在该目录中建立的文件自动继承此目录的组属性(只能够对目录设置),一般用于作文件共享时对某个目录设置g+s权限
设置SGID权限:chmod g+s 目录名
好比咱们将某个部门的工做目录给予了SGID权限,这样全部人建立的文件都归相同的工做组,这样方便之后的管理。
chmod命令用于修改文件或目录的权限,格式为:”chmod [参数] 权限 文件或目录名称”。
chown命令用于修改文件或目录的所属主与所属组,格式为:“chown [参数] 所属主:所属组 文件或目录名称”。
chmod与chown的命令参数很简单记——对于文件不加参数,遇到目录加大写-R(递归,修改目录内全部文件的属性)。
建立工做目录并给予SGID权限:
mkdir /d1
chmod -v 777 /d1
chmod -v g+s /d1
切换至普通用户u1,在该目录建立文件:
su - u1
touch /d1/a
ll -d /d1/a 验证此文件的属组是哪一个组,会发现a文件的属组跟/d1目录相同,都是属于root组。
exit 退出u1用户的登陆
rm -rfv /d1 删除/d1目录
功能:只容许root和文件的属主删除目录中的文件(仅对目录有效,一般用于作文件共享的目录)
添加t权限的方法:chmod o+t 目录
通常老师但愿学生能够将做业上传到某个特定目录——但为了不某些小破坏份子,想禁止删除其余人文件的话,那就要设置SBIT位了,固然也能够叫作特殊权限位之粘滞位(粘着位)。
案例:查看/tmp目录的权限,建立用户u一、u2,临时切换到u1用户,建立文件/tmp/u1f,设置u1f文件权限为777,退出u1用户的登陆,而后切换到u2用户,用u2用户删除/tmp/u1f文件,看是否能删除。
查看/tmp目录的属性:ls -ld /tmp 发现/tmp目录有t权限
建立用户u1:useradd u1
建立用户u2:useradd u2
切换到u1用户: su - u1
建立文件/tmp/u1f: touch /tmp/u1f
修改/tmp/u1f权限为777: chmod -v 777 /tmp/u1f
退出u1用户的登陆:exit
切换到u2用户:su - u2
查看/tmp/u1f文件的属性:ll /tmp/u1f
删除/tmp/u1f文件:rm -f /tmp/u1f 会提示“没法删除”(由于/tmp目录有t权限)。
退出u2用户的登陆:exit
强调:删除该文件时会提示错误,即使权限很充足,但由于特殊权限SBIT的缘故,一样会有没法删除其余人的文件的状况。
问题:如何让root也没法删除某个文件?
答:给这个文件用chattr设置i或a属性便可。这样能够防止root用户误删除重要文件。
问题:文件权限除了读写执行与SUID、SGID、SBIT外还有一种隐藏属性,例如明明有权限删除某个文件却报错了,或者仅能为某个文件追加内容而不能减小内容,遇到这种很“奇怪”的文件,就要怀疑是文件被设置隐藏属性了。
chattr命令用于设置文件的隐藏属性(特殊属性),格式为:“chattr [选项] 文件”。
选项 |
做用 |
+/-i |
将没法对文件内容进行修改,若对目录设置后则仅能修改子文件而不能新建或删除。 |
+/-a |
仅容许补充(追加)内容.没法覆盖/删除(Append Only)。一般用于日志文件。 |
S |
文件内容变动后当即同步到硬盘(sync)。 |
s |
完全从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)。 |
A |
再也不修改这个文件的最后访问时间(atime)。 |
b |
再也不修改文件或目录的存取时间。 |
D |
检查压缩文件中的错误。 |
d |
当使用dump命令备份时忽略本文件/目录。 |
c |
默认将文件或目录进行压缩。 |
u |
当删除此文件后依然保留其在硬盘中的数据,方便往后恢复。 |
t |
让文件系统支持尾部合并(tail-merging)。 |
X |
能够直接访问压缩文件的内容。 |
lsattr命令用于显示文件的隐藏权限,格式为:“lsattr [选项] 文件”。
选项 |
做用 |
a |
显示全部文件和目录。 |
l |
显示隐藏属性的全称(默认简写成一个字母)。 |
R |
递归处理,将指定目录下的全部文件及子目录一并处理。 |
d |
若目标文件为目录,请加此参数。 |
任务:用root用户体验文件的隐藏权限i、a。
功能 |
命令操做 |
将echo命令后的字符覆盖写入到/a.txt文件中 |
echo hello > /a.txt |
查看/a.txt文件内容 |
cat /a.txt |
查看/a.txt文件的 |
lsattr /a.txt |
给文件添加隐藏权限a |
chattr +a /a.txt |
将echo后的字符追加写入到/a.txt文件中 |
echo hi >> /a.txt |
查看文件内容 |
cat /a.txt |
删除/a.txt文件,此时没法删除,由于有a权限 |
rm -f /a.txt |
给/a.txt文件去掉a权限 |
chattr -a /a.txt |
删除/a.txt文件,此时正常删除 |
rm -f /a.txt |