1. Linux文件权限简介

Linux中的文件或目录的权限和用户及用户组的关联很大,

Linux一共九位权限,三位为一组,

  1. 前三位为属主权限位(用户权限位)
  2. 中间三位为属组权限位(用户组权限位)
  3. 后三位为其它用户权限位

权限对应数值如下:

  1. r read 对应数字 4
  2. w write 对应数字 2
  3. xExecute 可执行权限)对应数字 1
  4. - (没有权限) 对应数字0

2. Linux文件权限实战

1.创建测试文件

  1. [root@jason ~]# mkdir /test
  2. [root@jason ~]# echo "xmh linux" >/test/xmh.sh

2.权限结论

  1. [root@jason ~]# ll /test/xmh.sh
  2. -rw-r--r-- 1 root root 10 Jan 20 22:33 /test/xmh.sh
  3. //root用户对于xmh.sh拥有rw权限
  4. //root用户组对于xmh.sh拥有r权限
  5. //其它用户对于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 [数字组合] {文件名|目录名}

  1. chmod 755 a.txt #将a.txt文件权限改为rwxr-xr-x
  2. chmod 644 b.txt #将b.txt文件权限改为rw-r--r--
  3. chmode 777 /data #只对/data目录权限改为rwxrwxrwx
  4. chmode -R 777 /data #对/data目录即以下的所有文件/子目录权限修改为rwxrwxrwx
  5. 权限对应的数字:
  6. r 4
  7. w 2
  8. x 1
  9. - 0

Note:如果改变的只是打开目录的权限,使用chmod命令时不用加任何参数,但是要把所有文件或子目录也同时改变,需要使用-R参数

2.字符表达式
chmode [字符组合] {文件名|目录名}

  1. chmod u-x a.txt #取消a.txt文件用户的执行权限
  2. chmod u-w,g+w b.txt #取消b.txt文件用户的读权限,增加用户组的读权限
  3. chmod ugo=rw /data #为/data目录的用户、用户组、其它用户权限改为rw
  4. 用户类型 操作字符 权限字符
  5. uuser +(增加) r
  6. ggroup -
  7. oothers -(减少) w
  8. aall =(设置) x

Note:安全权限的临界点:目录755,文件644,并且用户为root,组为root

4. chown

修改文件/目录属主/组
chown 语法
chown [选项]. .. [所有者] [:[组]] 文件…
其中的冒号“:”可以用点好“.”替代。
要授权的用户和组名,必须是Linux系统里实际存在的

参数:-R 递归目录或子目录,文件修改用户或组

  1. chown xmh.xmh a.txt #将a.txt的用户和用户组改为xmh
  2. chown -R xmh.xmh /data #递归将/data目录的用户和用户组改为xmh

5. umask

Linux 控制系统默认权限的命令umask

1.根据umask计算出系统默认的权限

  1. [root@jason /]# umask
  2. 0022
  3. //文件最大权限 666,(只有脚本才会给x,)
  4. //目录最大权限 777
  5. //文件:666 - 022=644 (根据umask计算文件的默认权限)
  6. //目录:777 - 022=755 (根据umask计算文件的目录权限)

2.修改umask为032(临时生效)

  1. [root@jason /]# umask 032
  2. //文件:666 - 032=634+01(偶数位)0=644
  3. //目录:777 - 032=745
  4. [root@jason /]# mkdir dir032
  5. [root@jason /]# ls -ld *032
  6. drwxr--r-x 2 root root 4096 Nov 14 23:33 dir032
  7. -rw-r--r-- 1 root root 0 Nov 14 23:33 file032 #这里还是644,为何不是634?
  8. 根据umask计算出系统默认权限的规则
  9. 1.对于目录 777 直接减去umask的值
  10. 2.对于文件 666 减去umask的值,如果umask某一个位上面是奇数,减完umask之后,奇数位需要+1
  11. 提示:实验完记得把umask改回022

3.umask永久生效

  1. [root@jason /]# sed -n '61,65p' /etc/profile
  2. if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
  3. umask 002
  4. else
  5. umask 022
  6. 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目录。

  1. chattr 修改文件/目录隐藏属性
  2. lsattr 查看文件/目录隐藏的权限/属性

与chmod命令相比:

chmod只是改变文件的读写、执行权限,更底层的属性控制是由chattr来改变的

注意:这两个命令是用来查看和改变文件、目录属性的。

2.chattr和lsattr实践
1.为文件追加i属性,防止文件被删除和修改

  1. [root@xmh ~]# chattr +i xmh.txt
  2. [root@xmh ~]# lsattr xmh.txt
  3. ----i----------- xmh.txt
  4. //删除不了文件
  5. [root@xmh ~]# rm -rf xmh.txt
  6. rm: cannot remove xmh.txt’: Operation not permitted
  7. //不能往文件追加内容,也无法使用vim编辑保存
  8. [root@xmh ~]# echo "123" >> xmh.txt
  9. -bash: xmh.txt: Permission denied
  10. //解锁,取消文件i属性
  11. [root@xmh ~]# chattr -i xmh.txt

2.为文件追加a属性,防止文件被删除

  1. [root@xmh ~]# chattr +a xmh.txt
  2. [root@xmh ~]# lsattr xmh.txt
  3. -----a---------- xmh.txt
  4. //无法删除文件
  5. [root@xmh ~]# rm -rf xmh.txt
  6. rm: cannot remove xmh.txt’: Operation not permitted
  7. //可以为文件追加内容,但无法使用vim编辑保存
  8. [root@xmh ~]# echo "123" >> xmh.txt
  9. //解锁,取消文件a属性
  10. [root@xmh ~]# chattr -a xmh.txt