一、文件基本权限

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. Ubuntu16.04+Apache虚拟主机配置详解

    在window下,Apache的配置文件是httpd.conf,但在Linux下安装了Apache后发现其配置并不像window下那么简单,Linux下Apache将各个设置项分在了不同的配置文件中, ...

  2. 洛谷P1171 售货员的难题【状压DP】

    题目描述 某乡有n个村庄(1 输入格式: 村庄数n和各村之间的路程(均是整数). 输出格式: 最短的路程. 输入样例: 3 0 2 1 1 0 2 2 1 0 输出样例 3 说明 输入解释 3 {村庄 ...

  3. SQL SERVER FOR LINUX初体验

    今天得空,就在Ubuntu17.04上安装了SQL SERVER 2017体验下,总体来说还是不错的. 在Ubuntu上安装SQL SERVER 2017还是比较方便的,只需几条命令即可: curl ...

  4. Ubantu16.04 redis安装

    通过FTP方式将redis的安装包从windows上传到linux上 解压命令:$sudo tar -zxf ~/Downloads/redis-3.2.7.tar.gz -C /usr/local ...

  5. centos/linux下的安装git

    1.下载git wget https://github.com/git/git/archive/v2.14.1.zip 2.安装依赖 sudo yum -y install zlib-devel op ...

  6. 手把手教你树莓派实现简易室内监控系统(C)之BOA服务器的搭建

    本篇主要讲利用BOA服务器做室内监控系统的服务器端. 古人云:万事开头靠百度,实在不行就Google.小编也是一步一步的,亲自搭建成功,不能说是万全之策,仅仅是给大家一个参考就满足了. 第一步: 1. ...

  7. DxPackNet 1.打开摄像头

    好久没写博客了 ,这个系列将给大家介绍.net下一个非常好用的视频控件 ------ DxPackNet, 用这个控件大家可以轻松开发出 视频会议,视频监控,远程桌面,远程教学,远程白板,视频直播,视 ...

  8. 1.10 tuple 元组

    元组(tuple)属于不可变序列 tuple特性: 特性一:可包含任意对象的有序集合 特性二:通过下标索引访问元素 特性三:固定长度,异质,可任意嵌套 特性四:不支持原位改变 特性五:存储机制:对象引 ...

  9. POJ - 2387 最短路

    思路:用dijkstra算法,是无向图. AC代码: #include <cstdio> #include <cmath> #include <cctype> #i ...

  10. AES对称加密

    import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.Secre ...