一、文件基本权限

1) 基本权限的修改

第一位“-”为文件类型(-代表文件;d代表目录;l代表软链接文件即快捷方式),后面每3位一组。

-rw-r--r--

rw-   u所有者

r--   g所属组(相同身份、相同权限)

r--   o其他人

r读 w写 x执行

1、 chmod命令

chmod [选项] 模式 文件名

选项

-R:递归

           模式

                            [ugoa][+-=][rwx]

                            [mode=421]

2、 修改权限的方式

chmod  u+x test.txt(给所有者执行权限)

chmod g+w,o+w test.txt(给所属组和其他人写权限。)

chmod a=rwx text.txt(给所有全部的人读、写、执行权限。)

chmod u-x cangls.av(取消所有者的执行权限。)

chmod g-w,o-w cangls.av(取消所属组和其他人的写权限。)

3、 权限的数字表示

r----4

w----2

x----1

rwxr-xr-x

7  5  5

2) 权限的作用

1、权限对文件的作用

r:读取文件内容(cat  more  tail  head)

w:编辑、新增、修改文件内容(vi  echo)

#但是不包括删除文件

x:可执行

注:

为什么文件有写权限不代表有删权限?因为文件名存在目录储存块(block)里(Linux中一切皆文件),文件数据存在文件储存块里,要删除文件数据,意味着要删除文件名,而文件名储存位置在更高一级(目录中),所以没有删除权限。要想进行删除操作,必须对目录储存块进行操作。

文件夹<----文件<----文件数据

2、权限对目录的作用

r:可以查询目录下文件名  (ls)

w:具有修改目录结构的权限。如新建文件和目录,删除此目录下文件和目录,重命名此目录下文件和目录,剪切(touch rm mv cp)

x: 可以进入目录   (cd)

总结:

对文件来讲 最高权限是x

对目录来讲 最高权限是w

注:对目录来讲赋予权限,就只有0,5,7,赋其他的权限没有意义。因为只有执行权限才可以进入这个目录,不赋予执行权限其他权限都没有意义,例如:赋4,1,6都是没有意义的权限

3) 其他权限命令

1、 修改文件的所有者

chown 用户名 文件名

例如:chown ds abc.txt

2、 修改文件的所属组

chgrp 组名 文件名

例如:chgrp group1 abc.txt

chown root:root 123

等价于

chown root 123  chgrp root 123

分配文件基本权限时,核心原则:在最小权限情况下能够实现要求即可。

 

二、文件默认权限

1) 查看默认权限的命令

umask

查看默认权限

0022

第一位0:文件特殊权限

022:文件默认权限

2) 文件的默认权限

#文件默认不能建立为执行文件,必须手工赋予执行权限

#所以文件默认权限最大为666

#默认权限需要换算成字母再相减

#建立文件之后的默认权限,为666减去umask值

例如:

文件默认最大权限666  umask值022

-rw-rw-rw-  减去  -----w--w-  等于  -rw-r--r--

例如:

文件默认最大权限666  umask值033

-rw-rw-rw-  减去  -----wx-wx  等于  -rw-r--r--

3) 目录的默认权限

#目录默认权限最大为777

#默认权限需要换算成字母再相减

#建立文件之后的默认权限,为777减去umask值

例如:

文件默认最大权限777  umask值022

-rwxrwxrwx  减去  -----w--w-  等于  -rw-r--r--

4) 修改umask值

临时修改

[root@localhost ~]# umask 0002

永久修改

[root@localhost ~]# vi /etc/profile(该文件称为环境变量配置文件)

三、ACL权限

1) ACL权限简介与开启

1、 ACL权限简介

在linux中文件和文件夹的用户身份就这三个:

所有者、所属组、其他权限。

有时候三个身份不够用,这时候就需ACL权限用来解决用户身份不足的问题。

2、 查看分区ACL权限是否开启

首先我们查看有哪些分区

[zm@localhost ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda3              16G  2.4G   13G  16% /

tmpfs                 935M  228K  935M   1% /dev/shm

/dev/sda1             291M   37M  240M  14% /boot

/dev/sda2             251M   45M  165M  23% /home

其中tmpfs是一种基于内存的文件系统。根分区是sda3

[root@localhost ~]# dumpe2fs -h /dev/sda3

#dumpe2fs命令时查询指定分区详细文件系统信息的命令

选项:

-h  仅显示超级块中信息,而不显示磁盘块的详细信息。

执行中该命令,显示出来的超级块中可以看到有一行

Default mount option :user_xattr acl

从中可以看到包含了acl权限,说明分区支持ACL权限,可以使用ACL命令

3、 临时开启分区ACL权限

[root@localhost ~]# mount -o remount,acl /

#重新挂载根分区,并挂载加入acl权限

4、 永久开启分区ACL权限

[root@localhost ~]# vi /etc/fstab

#该文件会影响linux系统的启动,千万谨慎修改。

UUID=c2ca6f57-b15c-43ea=bca0-f239083d8bd2  /  ext4

Defaults,acl  1(启动是否需要检测) 1(启动是否需要备份)

#加入acl

 

[root@localhost ~]# mount -o remount /

#重新挂载文件系统或重启系统,使修改生效

2) 查看与设定ACL权限

1、 查看ACL命令

[root@localhost ~]# getfacl 文件名     //查看acl权限

# file:av

# owner:tony

# group:stu

user::rwx(所有者)

user:lw:r-x

group::rwx(所属组)

mask::rwx

other::---(其它人)

2、 设定ACL权限的命令

[root@localhost ~]# setfacl 选项 文件名     //设定ACL权限的命令;

选项:

-m:设定ACL权限;

-x:删除指定的ACL权限;

-b:删除所有的ACL权限;

-d:设定默认ACL权限;

-k:删除默认ACL权限;

-R:递归设定ACL权限;

3、 给用户设定ACL权限

[root@localhost ~]# useradd tony

[root@localhost ~]# groupadd stu

[root@localhost ~]# mkdir /av

[root@localhost ~]# chown tony:stu /av

[root@localhost ~]# chmod 770 /av

[root@localhost ~]# useradd lw

[root@localhost ~]# setfacl –m u:lw:rx /av

#给用户st赋予r-x权限,使用“u:用户名:权限”格式

4、 给用户组设定ACL权限

[root@localhost ~]# groupadd tgroup2(添加一个组)

[root@localhost ~]# setfacl -m g:tgroup2:rwx /av

#为组tgroup2分配ACL权限。使用“g:组名:权限”格式

3) 最大有效权限与删除ACL权限

1、 最大有效权限mask

mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和

mask的权限“相与”(逻辑与运算)才能得到用户的真正权限

#逻辑与运算:

A

B

and

r

r

r

r

-

-

-

r

-

-

-

-

 

2、 修改最大有效权限

[root@localhost ~]# setfacl -m m:rx 文件名

#设定mask权限为r-x。使用“m:权限”格式

3、 删除ACL权限

[root@localhost ~]# setfacl -x u:用户名 文件名

#删除指定用户的ACL权限

[root@localhost ~]# setfacl -x g:组名 文件名

#删除指定用户组的ACL权限

[root@localhost ~]# setfacl -b 文件名

#删除文件所有的ACL权限

4) 默认ACL权限和递归ACL权限

1、 递归ACL权限

①    递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。

②    setfacl -m u:用户名:权限 -R 目录名。

③    递归权限仅能赋予目录,不能赋予文件。

2、 默认ACL权限

①    默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。

②    setfacl -m d:u:用户名:权限 -R目录名。

 

四、文件特殊权限

1) SetUID

1、 功能

#只有可以执行的二进制程序才能设定SUID权限

#命令执行者队该程序拥有x(执行)权限

#命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件属主)

#SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

#如果对这个文件没有执行权限,然后赋予SetUID权限,s会变成大S。

[root@localhost ~]# chmod 4644 abc

[root@localhost ~]# ll

-rwSr--r--. 1 root root  1498  7月 1  12:02  abc

#在SetUID权限里,大S是不能正确使用的。

2、 设定SetUID的方法

  • 4代表SUID

         #chmod 4755 文件名

         #chmod u+s 文件名(u代表所有者,s代表SetUID)

         #chmod 0755 文件名(取消SUID权限)

         #chmod u-s 文件名

  • u所有者

g所属组(相同身份、相同权限)

o其他人

u+s:SUID权限

g+s:GUID权限

o+s:SBIT

3、 举例

[root@localhost ~]# ll /etc/shadow   (保存所有用户密码的文件)

----------. 1 root root  1498  7月 1  12:02  /etc/shadow

#权限都为零,可见只有root用户和超级用户才能查看、修改这个文件。

#但普通用户可以修改自己的密码,shadow权限又是零,是怎么做到的呢?

[root@localhost ~]# ll /usr/bin/passwd 

-rwsr-xr-x. 1 root root /usr/bin/passwd

#原因就是passwd这个指令有SetUID权限,权限范围可以看出任何用户都有执行权限。任何用户在执行该命令的时候,会以root身份或者所有者身份来执行。

#也就是说,只有文件具有SetUID权限,命令执行时当前用户身份才会切换到文件的所有者身份(类似灵魂附体)

#既然这样,那不就能修改其他用户的密码了吗?

#实际上linux限制了 passwd后面不能加其他参数,只有根用户才能指定用户名称。普通用户输入passwd 直接回车,修改当前用户的密码

 

                 #cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容

                 [root@localhost ~]# ll /bin/cat

-rwxr-xr-x 1 root root  47976  6月 22  2017  / bin/cat

4、 危险的SetUID

#关键目录应严格控制写权限。比如“/”、“/usr”等

#用户的密码设置要严格遵守密码三原则(复杂性、易记忆性、时效性)

#对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限

参考下面SUID与SGID检测脚本:

#!/bin/bash

find / -perm -4000 -o -perm -2000 > /tmp/setuid.check

#搜索系统中所有拥有SUID和SGID的文件,并保存到临时目录中

for i in $(cat /tmp/setuid.check)

#做循环,每次循环取出临时文件中的文件名

do

    grep $i /root/suid.log > /dev/null

    #比对这个文件名是否在模板文件中

    if[ "$?" != "0" ]

    #检测上一个命令的返回值,如果不为0,证明上一个命令报错

then

    echo "$i isn't in listfile!" >> /root/suid_log_$(data+%F)

    #如果文件名不在模板文件中,则输出错误信息,并把错误写到日志中

 

     fi

done

 

rm -rf /tmp/setuid.check

#删除临时文件

 

 

2) SetGID

1、 SetGID针对文件的作用

只有可执行二进制程序才能设定SGID权限

命令执行者要对该程序拥有x(执行)权限

命令执行执行程序时,组身份升级为该程序文件的属组

SetGID权限只在程序执行过程中有效

[root@localhost ~]# ll /usr/bin/locate 

-rwx--s--x 1 root slocate   /usr/bin/locate

 

[root@localhost ~]# ll /var/lib/mlocate/mlocate.db 

-rw-r----- 1 root slocate   /var/lib/mlocate/mlocate.db

#/usr/bin/locate是可执行二进制程序,可以赋予SGID

#执行用户lamp对/usr/bin/locate命令拥有执行权限

#执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对

/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库

#命令结束,lamp用户的组身份返回为lamp组

2、 SetGID针对目录的作用

普通用户必须对此目录必须拥有r和x权限,才能进入此目录

普通用户在此目录中的有效组会变成此目录的属组

若普通用户对此目录拥有w权限,新建的文件的默认属组是这个目录的属组

3、 设定SetGID

  • 2代表SGID

chmod g+s 文件名

chmod 2755 文件名

4、 取消SetGID

chmod g-s 文件名

chmod 0755 文件名

3) Sticky BIT

1、 SBIT粘着位作用

  • 粘着位目前只对目录有效
  • 普通用户对该目录拥有w和x权限,即普通用户可以在此目录有写入权限
  • 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了root可以删除所有文件,普通用户就算有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件

2、 设置粘着位

chmod 1755 目录名

chmod o+t 目录名

3、 取消粘着位

chmod 0777 目录名

chmod o-t 目录名

注:如果没有特殊需求,特殊权限尽量少修改,特别是SetUID和SetGID。

 

五、不可改变位权限

1) chattr命令

charrt [+-=] [选项] 文件名或目录名

[+-=]

+:增加权限

-:删除权限

=:等于某权限

[选项]:常用的选项包括i和a

i(insert):将此文件锁定

如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不能建立和删除文件。

a(append):冻结此文件

如果对文件设置a属性,那么只能在文件中增加数据,但不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但不允许删除。(添加内容只能用 echo >>输出重定向到文件中;禁止用vi,因为不能判断是修改还是增删内容)

2) 查看文件系统属性

lsattr 选项 文件名

选项:

-a 显示所有文件和目录

-d 若目标是目录,仅列出目录本身的属性,而不是子文件的

六、sudo权限

1) sudo权限

1、root把本来只能超级用户执行的命令赋予普通用户执行

2、sudo的操作对象是系统命令

2) sudo使用

1、[root@localhost ~]# visudo  

#实际修改的是/etc/sudoers文件

 

2、运行上述命令,其中有这么一句话

##Allow root to run any commands anywhere

##Allows people in group wheel to run all commands

root  ALL=(ALL)  ALL

#用户名 被管理主机的地址=(可使用的身份)授权命令(绝对路径)

3、 举例1

普通用户(如usr1)是不能执行shutdown命令的。授权普通用户可以重启服务器

[root@localhost ~]# visudo

#在最后面添加以下命令,保存退出

user1  ALL=(ALL) /sbin/shutdown –r now(写的越详细,权限越小)

[root@localhost ~]# su -user1

[root@localhost ~]$ sudo -l(查看可用的sudo命令)

[user1@localhost ~]$ sudo /sbin/shutdown -r now

#普通用户执行sudo赋予的命令

举例2

授权普通用户可以添加其它用户

[root@localhost ~]# visudo

#在最后面添加以下命令,保存退出。授予用户设定密码的权限

user1  ALL=(ALL) /usr/sbin/useradd

user1  ALL=(ALL) /usr/sbin/passwd

                 [user1@localhost ~]$ sudo /usr/sbin/useradd 用户名

                 [user1@localhost ~]$ sudo /usr/sbin/passwd 用户名

           这样授予的权限是很危险的,如果passwd后面不加用户名会以root身份执行

命令,需写详细点,如:

user1 All=/usr/bin/passwd

[A-Za-z]*,  !/usr/bin/passwd "",  !/usr/bin/passwd  root

#该命令中间注意空格,顺序不能颠倒。第一个是正则表达式,第二个感叹号是

取反的意思,双引号里面空格是表达passwd后面不能有空格。

4、# %wheel  ALL=(ALL)  ALL

#%组名 被管理主机的地址=(可使用的身份)授权命令(绝对路径)

Linux之权限管理的更多相关文章

  1. linux用户管理,linux用户口令管理,linux用户组管理,linux用户权限管理详解

    linux用户管理 http://www.qq210.com/shoutu/android 用户账号的添加(新加用户需添加用户口令) :增加用户账号就是在/etc/passwd文件中为新用户增加一条记 ...

  2. Linux目录权限管理

    Linux目录权限管理   实验目标: 通过本实验掌握centos7/rhel7目录权限的管理.包括配置目录的所属组.SGID.读/写/执行权限等. 实验步骤: 1.创建目录/home/instruc ...

  3. Linux 文件权限管理

    1.文件权限的概述 在Linux系统下,使用权限来保护资源的安全将是一种不错的选择.系统中每个文件的权限都有可读(r).可写(w)和可执行(x)这三种权限,它们分别对应权限数值4.2 和1.系统为每个 ...

  4. Linux系统文件权限管理(6)

    Linux操作系统是多任务(Multi-tasks)多用户(Multi-users)分时操作系统,linux操作系统的用户就是让我们登录到linux的权限,每当我们使用用户名登录操作系统时,linux ...

  5. Linux命令--权限管理

    chmod命令 Linux/Unix 的文件调用权限分为三级 : 文件拥有者.群组.其他.利用 chmod 可以藉以控制文件如何被他人所调用. 使用权限 : 所有使用者 语法 chmod [-cfvR ...

  6. Linux的权限管理操作-Linux从入门到精通第七天(非原创)

    文章大纲 一.权限概述二.权限设置三.属主与属组设置四.扩展五.学习资料下载六.参考文章 一.权限概述 总述:Linux系统一般将文件可存/取访问的身份分为3个类别:owner.group.other ...

  7. [Linux] 010 权限管理命令 chmod

    1. 权限管理命令:chmod 命令名称:chmod 命令英文原意:change the permissions mode of a file 命令所在路径:/bin/chmod 执行权限:所有用户 ...

  8. 一个故事看懂Linux文件权限管理

    前情回顾: 我通过open这个系统调用虫洞来到了内核空间,又在老爷爷的指点下来到了sys_open的地盘,即将开始打开文件的工作. 详情参见:内核地址空间大冒险:系统调用 open系统调用链 我是一个 ...

  9. Linux chmod权限管理需要小心的地方

    档案的权限管理和简单,比如chmod 775 /tmp/test.sh 另外使用chmod +w /tmp/test.sh,会给档案的拥有者,群组,其他人的权限都加上了可编辑.这样就有安全隐患了.所以 ...

  10. chmod g+s 、chmod o+t 、chmod u+s:Linux高级权限管理

    关于linux下权限操作chmod的一些说明!比rxw高级内容! 转载自http://blog.chinaunix.net/uid-26642180-id-3378119.html Set uid, ...

随机推荐

  1. 51Nod 1225 余数之和 [整除分块]

    1225 余数之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 F(n) = (n % 1) + (n % 2) + (n % 3) + ... ...

  2. 2018/1/28 RocketMq学习笔记

    RocketMq是支持Topic模式的MQ中间件,它的传输格式为topic(主题,一个product对应一个主题,),Tag(标签,其实就是副标题,是为了更好的支持集群模式而出现的,这样客户端可以指定 ...

  3. XSD详解一 - 基本概念

    本分类下的文章主要是对W3School的文档进行整理:http://www.w3school.com.cn/x.asp XML Schema 是基于 XML 的 DTD 替代者. XML Schema ...

  4. 使用 RxJS 实现一个简易的仿 Elm 架构应用

    使用 RxJS 实现一个简易的仿 Elm 架构应用 标签(空格分隔): 前端 什么是 Elm 架构 Elm 架构是一种使用 Elm 语言编写 Web 前端应用的简单架构,在代码模块化.代码重用以及测试 ...

  5. Composer 结合 Git 创建 “服务类库”

    Composer 结合 Git 创建 "服务类库" 我一直认为,现在的 PHP 已经进展到了工程化的领域.以前的 PHP 开发者,以快为美,速度和规模永远都是矛盾体.现在的 PHP ...

  6. struct stat结构体简介

    在使用这个结构体和方法时,需要引入: <sys/types.h> <sys/stat.h> struct stat这个结构体是用来描述一个linux系统文件系统中的文件属性的结 ...

  7. 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码

    洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...

  8. angular-file-upload封装为指令+图片尺寸限制

    不了解angular-file-upload基础使用 请先参考http://blog.csdn.net/lai_xu/article/details/49535847 博客地址 下文如果有更好的建议请 ...

  9. php环境下所有的配置文件以及作用

    以下主要是针对linux下的目录(windows也是一样,文件名都一样) Apache:etc/httpd.conf PHP:etc/php.ini   (Apache 正在运行的 PHP 版本) M ...

  10. 基于gmap.net制作离线地图下载器

    网上已有大量文章介绍gamp.net和离线下载相关的文章了.我就不在介绍gmap相关的文章了,这里着重介绍一下下载相关原理.其实gmap.net本身已自带下载工能,只是离线图片下载到sqlit中,现将 ...