1. Linux文件权限简介
Linux中的文件或目录的权限和用户及用户组的关联很大,
Linux一共九位权限,三位为一组,
- 前三位为属主权限位(用户权限位)
- 中间三位为属组权限位(用户组权限位)
- 后三位为其它用户权限位
权限对应数值如下:
r (read) 读 对应数字 4
w (write) 写 对应数字 2
x(Execute 可执行权限)对应数字 1
- (没有权限) 对应数字0
2. Linux文件权限实战
1.创建测试文件
[root@jason ~]# mkdir /test
[root@jason ~]# echo "xmh linux" >/test/xmh.sh
2.权限结论
[root@jason ~]# ll /test/xmh.sh
-rw-r--r-- 1 root root 10 Jan 20 22:33 /test/xmh.sh
//root用户对于xmh.sh拥有rw权限
//root用户组对于xmh.sh拥有r权限
//其它用户对于xmh.sh拥有r权限
Linux普通文件的读、写、执行权限说明:
可读r
:表示具有读取\阅读文件内容的权限;可写w
:表示具有新增、修改文件内容的权限;- w修改文件的内容,如果没有r(可读权限)配合,那么vi编辑文件会提示无法编辑(但可强制编辑wq!,会清空文件内容),echo可以重定向或追加
- 特别提示:删除文件(修改文件名等)的权限是受父目录的权限(至少需要wx)控制,和文件本身权限无关。
可执行x
:表示具有执行文件的权限- 文件本身要能够给执行
- 普通用户同时还需要具备r的权限才能执行, 当你不知道文件的内容的时候就算有x权限也没办法执行
- root特殊,只要有x的权限就能执行
Linux目录的读、写、执行权限说明:
可读
r:表示具有浏览目录下面文件及子目录的权限,即ls dir;
需要和x配合(x不但可以进入目录,还可以查看属性信息)- 如果没有x权限,不能进到目录里(没办法访问目录下的文件属性信息),即无法cd dir;
- 如果没有x权限,ls列表时可以看到所有文件名,但是会提示无权访问目录下的文件。
- 如果ls -l列表,所有的属性会带有问号,也会提示无权访问目录下文件,但是可以看到所有文件名。
可写w
:表示具有正在目录中创建、删除文件、重命名文件(一般文件名)的权限(需要x权限配合);可执行x
:表示具有进入到目录的权限,并且和文件属性有关;例如:cd dir但是没有r无法列出文件及目录,没有w也无法新建和删除
Note:在linux删除一个文件,跟文件本身的权限毫无关系,要看你对这个文件所在的目录是否有wx权限。
3. chmod
用来改变文件或目录的权限的命令,但只有文件属主和超级用户root才有这种权限
两种改变方法:
1)通过权限字母和操作符表达式的方法来设置权限
2)使用数字方式来设置权限(常用)
1.数字方式修改文件/目录权限
chmode [数字组合] {文件名|目录名}
chmod 755 a.txt #将a.txt文件权限改为rwxr-xr-x
chmod 644 b.txt #将b.txt文件权限改为rw-r--r--
chmode 777 /data #只对/data目录权限改为rwxrwxrwx
chmode -R 777 /data #对/data目录即以下的所有文件/子目录权限修改为rwxrwxrwx
权限对应的数字:
r 4
w 2
x 1
- 0
Note:如果改变的只是打开目录的权限,使用chmod命令时不用加任何参数,但是要把所有文件或子目录也同时改变,需要使用-R参数
2.字符表达式
chmode [字符组合] {文件名|目录名}
chmod u-x a.txt #取消a.txt文件用户的执行权限
chmod u-w,g+w b.txt #取消b.txt文件用户的读权限,增加用户组的读权限
chmod ugo=rw /data #为/data目录的用户、用户组、其它用户权限改为rw
用户类型 操作字符 权限字符
u(user) +(增加) r
g(group) -
o(others) -(减少) w
a(all) =(设置) x
Note:安全权限的临界点:目录755,文件644,并且用户为root,组为root
4. chown
修改文件/目录属主/组
chown 语法
chown [选项]. .. [所有者] [:[组]] 文件…
其中的冒号“:”可以用点好“.”替代。
要授权的用户和组名,必须是Linux系统里实际存在的
参数:-R 递归目录或子目录,文件修改用户或组
chown xmh.xmh a.txt #将a.txt的用户和用户组改为xmh
chown -R xmh.xmh /data #递归将/data目录的用户和用户组改为xmh
5. umask
Linux 控制系统默认权限的命令umask
1.根据umask计算出系统默认的权限
[root@jason /]# umask
0022
//文件最大权限 666,(只有脚本才会给x,)
//目录最大权限 777
//文件:666 - 022=644 (根据umask计算文件的默认权限)
//目录:777 - 022=755 (根据umask计算文件的目录权限)
2.修改umask为032(临时生效)
[root@jason /]# umask 032
//文件:666 - 032=634+01(偶数位)0=644
//目录:777 - 032=745
[root@jason /]# mkdir dir032
[root@jason /]# ls -ld *032
drwxr--r-x 2 root root 4096 Nov 14 23:33 dir032
-rw-r--r-- 1 root root 0 Nov 14 23:33 file032 #这里还是644,为何不是634?
根据umask计算出系统默认权限的规则
1.对于目录 777 直接减去umask的值
2.对于文件 666 减去umask的值,如果umask某一个位上面是奇数,减完umask之后,奇数位需要+1
提示:实验完记得把umask改回022
3.umask永久生效
[root@jason /]# sed -n '61,65p' /etc/profile
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi
6. 特殊权限位
Linux 系统基本权限位为9位权限,但是还有额外3位权限位,共12位权限;
suid s(有x)S 4 用户对应的权限位(用户对应的3位上)
sgid s(有x)S 2 用户组对应的权限位(用户组对应的3位上)
sticky t (有x) T 1 其他用户对应的权限位
1.文件隐藏属性 chattr
命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的linux系统都是2.6以上内核了。通过chattr
命令修改属性能够提高系统的安全性
,但是它并不适合所有的目录。chattr
命令不能保护/、/dev、/tmp、/var目录。
chattr 修改文件/目录隐藏属性
lsattr 查看文件/目录隐藏的权限/属性
与chmod命令相比:
chmod只是改变文件的读写、执行权限,更底层的属性控制是由chattr来改变的
注意:这两个命令是用来查看和改变文件、目录属性的。
2.chattr和lsattr实践
1.为文件追加i
属性,防止文件被删除和修改
[root@xmh ~]# chattr +i xmh.txt
[root@xmh ~]# lsattr xmh.txt
----i----------- xmh.txt
//删除不了文件
[root@xmh ~]# rm -rf xmh.txt
rm: cannot remove ‘xmh.txt’: Operation not permitted
//不能往文件追加内容,也无法使用vim编辑保存
[root@xmh ~]# echo "123" >> xmh.txt
-bash: xmh.txt: Permission denied
//解锁,取消文件i属性
[root@xmh ~]# chattr -i xmh.txt
2.为文件追加a
属性,防止文件被删除
[root@xmh ~]# chattr +a xmh.txt
[root@xmh ~]# lsattr xmh.txt
-----a---------- xmh.txt
//无法删除文件
[root@xmh ~]# rm -rf xmh.txt
rm: cannot remove ‘xmh.txt’: Operation not permitted
//可以为文件追加内容,但无法使用vim编辑保存
[root@xmh ~]# echo "123" >> xmh.txt
//解锁,取消文件a属性
[root@xmh ~]# chattr -a xmh.txt