特殊权限



特殊权限

 

  1. 特殊权限及文件系统访问控制列表

     

    引入: [root@zhg ~]# ls -l `which passwd`

    显示结果:-rwsr-xr-x. 1 root root 30768 2月  22 2012 /usr/bin/passwd

    备注:重点看s

    特殊权限有3

    SUID 运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者(启动者可以临时拥有root权限)

    格式: chmod u+s FILE

    chmod u-s FILE

    注意: 如果FILE本身原来就有执行权限,则SUID显示为s(小写),否则显示为S(大写)

    举例: [root@zhg ~]# ls -l /bin/cat

    显示结果: -rwxr-xr-x. 1 root root 45224 1122 2013 /bin/cat

    [root@zhg ~]# ls -l /etc/shadow

    显示结果: ----------. 1 root root 797 2月  14 00:41 /etc/shadow

     

    [root@zhg ~]# useradd hadoop

    [root@zhg ~]# su - hadoop

    [hadoop@zhg ~]$ cat /etc/shadow

    显示结果: cat: /etc/shadow: 权限不够

     

    [root@zhg ~]# chmod u+s /bin/cat

    [root@zhg ~]# ls -l /bin/cat

    显示结果: -rwsr-xr-x. 1 root root 45224 1122 2013 /bin/cat

     

    备注:添加临时借调的权利。

    [root@zhg ~]# su - hadoop

    [hadoop@zhg ~]$ whoami

    显示结果: hadoop

    [hadoop@zhg ~]$ cat /etc/shadow

    备注:这样就可以看到了

     

    注意: 我们发现一个文件的属主是root,又给了他SUID,这带来的风险是极大的!

    如果这个文件其他人还有编辑权限就会更加麻烦,随便往里面编辑一条命令,比如rm -rf /,系统就完蛋了!

    另:

    [root@zhg ~]# ls -l /usr/bin/passwd

    显示结果: -rwsr-xr-x. 1 root root 30768 2月  22 2012 /usr/bin/passwd

     

    备注: 大家会发现默认就有s权限,因为普通用户也能自己密码

    实例: 写了一个脚本,如果需要获取系统属性,此时必须要有s权限。

    以前网站后台用perl语言写的脚本都需要有s权限获取信息,这样的网站很容易被入侵。

    SGID 运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组

    格式: chmod g+s FILE

    chmod g-s FILE

    注意: 如果FILE本身原来就有执行权限,则SUID显示为s(小写),否则显示为S(大写)

    举例常见场景:

    公司内部有个开发团队develop team

    有三个人hadoophbasehive,他们有共同的使用目录/tmp/project

    要求三个用户都能在这个目录下创建文件

    由于三个用户创建的文件都属于同一个项目,所以三个用户都能查看和编辑对方的文件。

    如何来实现?

    [root@zhg ~]# useradd hive

    [root@zhg ~]# useradd hbase

    [root@zhg ~]# useradd hadoop

    [root@zhg ~]# mkdir /tmp/project

    [root@zhg ~]# groupadd developteam

     

     

    [root@zhg ~]# chown -R :developteam /tmp/project/

    [root@zhg ~]# usermod -a -G developteam hadoop

    [root@zhg ~]# usermod -a -G developteam hbase

    [root@zhg ~]# usermod -a -G developteam hive

     

    [root@zhg ~]# id hadoop

    显示结果: uid=502(hadoop) gid=502(hadoop) =502(hadoop),503(developteam)

     

    下面切换至hadoop用户

    [root@zhg ~]# su - hadoop

    [hadoop@zhg ~]$ cd /tmp/project/

    [hadoop@zhg project]$ ls -ld .

    显示结果: drwxr-xr-x 2 root developteam 4096 3月   8 16:30 .

     

    备注:发现属组没有写的权限

    退出至root用户添加developteam组的写入权限

    [hadoop@zhg project]$ exit

    [root@zhg ~]# chmod g+w /tmp/project/

    [root@zhg ~]# su - hadoop

    [hadoop@zhg ~]$ cd /tmp/project/

    [hadoop@zhg project]$ touch a.hadoop

     

    [hadoop@zhg project]$ exit

    [root@zhg ~]# su - hbase

    [hbase@zhg ~]$ cd /tmp/project/

    [hbase@zhg project]$ touch a.hbase

     

    [hbase@zhg project]$ ls -l

    显示结果: -rw-rw-r-- 1 hadoop hadoop 0 3月   8 16:43 a.hadoop

    -rw-rw-r-- 1 hbase  hbase  0 3月   8 16:44 a.hbase

     

    备注:现在为止用户都可以创建文件,但是不能相互查看修改,该如何做呢?

    [hbase@zhg project]$ exit

    [root@zhg ~]# chmod g+s /tmp/project/

    [root@zhg ~]# ls -ld /tmp/project/

    显示结果: drwxrwsr-x 2 root developteam 4096 3月   8 16:44 /tmp/project/

     

    备注:此时组有了s权限,下面分别使用hadoophbase登录创建文件查看结果

    [root@zhg ~]# su - hadoop

    [hadoop@zhg ~]$ cd /tmp/project/

    [hadoop@zhg project]$ touch b.hadoop

     

    [hadoop@zhg project]$ exit

    [root@zhg ~]# su - hbase

    [hbase@zhg ~]$ cd /tmp/project/

    [hbase@zhg project]$ touch b.hbase

    [hbase@zhg project]$ ls -l

    显示部分结果:

    -rw-rw-r-- 1 hadoop developteam 0 3月   8 16:52 b.hadoop

    -rw-rw-r-- 1 hbase  developteam 0 3月   8 16:52 b.hbase

     

    备注:这样就能实现三个用户都能查看和编辑对方的文件

     

    注意: 现在出现一个很大问题,三个用户都能查看和编辑对方的文件

    但是还能删除对方文件

    [hbase@zhg project]$ rm b.hadoop

    [hbase@zhg project]$ ls -l

    此时应该怎么办呢?引出下面内容

    Sticky

    解释: 在一个公共目录,每个人都可以创建文件,删除自己的文件,但是不能删除别人的文件

    格式: chmod o+t DIR(针对目录)

    chmod o-t DIR(针对目录)

    举例: [root@zhg ~]# su - hadoop

    [hadoop@zhg ~]$ cd /tmp/project/

    [hadoop@zhg project]$ touch b.hadoop

    备注: 先还原刚被hbase用户删除的b.hadoop文件

    [hadoop@zhg project]$ exit

    [root@zhg ~]# chmod o+t /tmp/project/

    [root@zhg ~]# ls -ld /tmp/project/

    显示结果: drwxrwsr-t 2 root developteam 4096 3月   8 17:08 /tmp/project/

     

    备注: 现在有了t

    [root@zhg ~]# su - hbase

    [hbase@zhg ~]$ cd /tmp/project/

    [hbase@zhg project]$ ls -l

    显示部分结果:

    -rw-rw-r-- 1 hadoop developteam 0 3月   8 17:08 b.hadoop

    -rw-rw-r-- 1 hbase  developteam 0 3月   8 16:52 b.hbase

    [hbase@zhg project]$ rm b.hadoop

    显示结果: rm: 无法删除"b.hadoop": 不允许的操作 //实验结束

    注意: 不能删除别人的,但是可以删除自己的文件

     

    总结: 使用方式: 三位可以一起使用

    举例: chmod 1755 /back/test //包含Sticky

    chmod 2755 /back/test //包含SGID

    chmod 3755 /back/test //包含SGIDSticky

    chmod 4755 /back/test //包含SUID

    chmod 5755 /back/test //包含SUIDSticky

    chmod 6755 /back/test //包含SUIDSGID

    chmod 7755 /back/test //包含SUIDSGIDSticky

    备注: 此时大家应该理解为什么umask4位了。

     

    2.文件系统访问控制列表

    案例引入: 系统中有两个用户TomJerryTom在公共目录中希望让Jerry访问(读写),你作为管理员应该如何实现?

    讲解引入: Tom用户创建的文件的属主和属组(基本组)都是Tom,这就意味着Jerry不属于Tom的基本组,就不能应用于组权限,

    此时Jerry访问时会应用其他other权限,如果要让Jerry能够实现读写,那必须给other权限,这样就很不安全了!

    我们还可以把Tom文件的属主改为Jerry,但是普通用户是没有权限更改的

    [root@xiaoke ~]# useradd tom

    [root@xiaoke ~]# useradd jerry

    [root@xiaoke ~]# su - tom

    [tom@xiaoke ~]$ cd /tmp/

    [tom@xiaoke tmp]$ touch a.tom

     

    [tom@xiaoke tmp]$ exit

    [root@xiaoke ~]# su - jerry

    [jerry@xiaoke ~]$ cd /tmp/

     

     

    [jerry@xiaoke tmp]$ chown jerry:jerry a.tom

    这怎么办呢?这就体现了文件系统访问控制列表的意义了!

     

    解决方法:

    FACL Filesystem Access Control List

    意义: 利用文件扩展属性,保存了额外的访问控制权限

    命令:

    setfacl:设置facl

    -m:设定额外权限

    格式: -m u:UID:perm //设定用户为perm权限

    -m g:GID:perm //设定组为perm权限

    -m d:u:UID:perm //主要针对目录操作,将目录扩展权限向下继承

    -m d:g:GID:perm //主要针对目录操作,将目录扩展权限向下继承

    -x:取消额外权限

    格式: -x u:UID

    -x g:GID

    getfacl:获取facl

    举例: [root@xiaoke ~]# mkdir /backup

    [root@xiaoke ~]# cd /backup/

    [root@xiaoke backup]# cp /etc/inittab ./

    [root@xiaoke backup]# getfacl inittab

    显示结果: # file: inittab

    # owner: root

    # group: root

    user::rw-

    group::r--

    other::r--

     

    另一案例:设置用户hadoop对文件inittab读写权限

    [root@xiaoke ~]# useradd hadoop

    [root@xiaoke ~]# su - hadoop

    [hadoop@xiaoke ~]$ cd /backup/

    [hadoop@xiaoke backup]$ echo 123 > inittab

    显示结果:-bash: inittab: 权限不够

     

     

    解决方法:

    [root@xiaoke backup]# setfacl -m u:hadoop:rw inittab

    [root@xiaoke backup]# getfacl inittab

    显示结果: # file: inittab

    # owner: root

    # group: root

    user::rw- //冒号中间为空,代表是默认属主

    user:hadoop:rw- //额外指定用户

    group::r--

    mask::rw-

    other::r--

     

    验证: [root@xiaoke backup]# su - hadoop

    [hadoop@xiaoke ~]$ echo 123 >> /backup/inittab

     

    [hadoop@xiaoke ~]$ tail -2 /backup/inittab

    显示结果: id:3:initdefault:

    123

     

    同样的对属组设置也是类似

    [root@xiaoke backup]# setfacl -m g:mygroup:rw inittab

    [root@xiaoke backup]# getfacl inittab

    显示结果: # file: inittab

    # owner: root

    # group: root

    user::rw-

    user:hadoop:rw-

    group::r--

    group:mygroup:rw- //注意组要事先存在

    mask::rw-

    other::r--

    注意: [root@xiaoke backup]# ls -l

    显示结果: -rw-rw-r--+ 1 root root 888 3月   9 06:41 inittab

    备注: 一个文件要是有扩展属性的话,ls -l显示结果会看到+这个符号

    注意: 一个有着扩展属性的文件,通过复制或归档一个文件时,这个扩展属性很可能不能归档,除非使用特定选项或命令。

    取消权限:

    1.取消用户权限

    [root@xiaoke backup]# setfacl -x u:hadoop inittab

    [root@xiaoke backup]# getfacl inittab

     

    2.取消组权限

    [root@xiaoke backup]# setfacl -x g:mygroup inittab

    [root@xiaoke backup]# getfacl inittab

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值