Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 419|回复: 0

linux中强制位与冒险位

[复制链接]
  • TA的每日心情
    开心
    2023-3-18 00:22
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2013-3-11 23:21:03 | 显示全部楼层 |阅读模式

    除了读写执行权限以外,ext3文件系统还支持强制位(setuid 和setgid)与冒险位(sticky)的特别权限针对u,g,o,分别有set uid,set gid,及sticky。

    强制位与冒险位添加在执行权限的位置上,如果该位置上原已有执行权限,则强制位与冒险位以小写字母的方式表示,否则,以大写字母表示。

    强制位set uid与set gid在u和g的x位置上各采用一个s,冒险位(sticky)使用一个t。 在可执行文件上,用户可以添加set uid和set gid,默认情况下,用户执行一个指令,会以该用户的身份来运行进程,因为指令文件上的强制位,可以让用户执行的指令,以指令文件的拥有者或所属组的身份运行进程。

    Umask 冒险位和强制位,网上也有说成粘着位的

    所谓的强制位和冒险位都是最最前面那个0的位置来表示,当前面那个位,2和4权限就叫强制位,1的权限就是冒险位,2代表的是GID,4代表的是uid,1代表的是sticky。

    gid,uid,sticky的作用

    GID的作用:默认情况下,用户建立的文件属于用户当前所在的组但是设置了GID以后,表示在此目录中,任何人建立的文件,都会属于目录所属的组。注意:GID只能对目录设置. 这个在文件权限和团队使用文件目录很有用处

    chmod g+s 文件名 用这个命令也可以给他设置GID

    UID的作用:当一个文件设置了UID,那么所有用户执行这个文件的时候,都是以这个用户的所有者的权限来执行。

    Sticky:一旦目录上设置了冒险位,则表示在此目录中,只有文件的拥有者、目录的拥有者与系统管理员可以删除文件。这个也是对目录进行设置,我们给目录一个冒险位,最后一个X变成了t.

    一个例子是/bin/passwd ,要读写/etc/passwd文件需要超级用户权限,但一般用户也需要随时可以改变自己的密码,所以/bin/passwd就设置了suid,当用户改自己密码的时侯就拥有了超级用户权限。

        要删除一个文件,你不一定要有这个文件的写权限,但你一定要有这个文件的上级目录的写权限。也就是说,你即使没有一个文件的写权限,但你有这个文件的上级目录的写权限,你也可以把这个文件给删除,而如果没有一个目录的写权限,也就不能在这个目录下创建文件。

    如何才能使一个目录既可以让任何用户写入文件,又不让用户删除这个目录下他人的文件,sticky就是能起到这个作用。stciky一般只用在目录上,用在文件上起不到什么作用。

    在一个目录上设了sticky位后,(如/home,权限为1777)所有的用户都可以在这个目录下创建文件,但只能删除自己创建的文件(root除外),这就对所有用户能写的目录下的用户文件启到了保护的作用。

    默认情况下,如果一个目录上有w和x权限,则任何人可以在此目录中建立与删除文件。 如果目录上设置了冒险位,则表示在此目录中,只有文件的拥有者、目录的拥有者与系统管理员可以删除文件。


    用户可以用chmod指令来为文件设置强制位与冒险位。


    – set uid:chmod u+s 文件名


    – set gid:chmod g+s 文件名


    – sticky:chmod o+t 文件名


    强制位与冒险位也可以通过一个数字加和,放在读写执行的三位数字前来指定。


    – 4(set uid)


    – 2(set gid)


    – 1(sticky)


    设置suid / guid


    命令 结果 含义


    chmod 4755 -rwsr-xr-x suid、文件属主具有读、写和执行的权限,所有其他用户具有读和执行的权限


    chmod 6711 -rws--s--x suid、sgid、文件属主具有读、写和执行的权限,所有其他用户具有执行的权限


    chmod 4511 -rwS--x—x suid、文件属主具有读、写的权限,所有其他用户具有执行的权限


    上面的表中有具有这样权限的文件:rwS --x -- x,其中S为大写。它表示相应的执行权限位并未被设置,这是一种没有什么用处的suid设置可以忽略它的存在。

    -------------------------------------------------------------------------------------------------

    ACL

    可以对某个文件设置该文件具体的某些用户的权限,意思就是通过ACL可以对一个文件权限做扩展,可以不同的用户对某个文件有不同的权限。

    现在我们把redhat用户加上一个RWX的权限:setfacl -m u:redhat:rwx file

    现在我们取消redhat用户的权限:setfacl -x redhat file

    现在我们也取消redhat组的权限:setfacl -x g:redhat file

    用ll看,权限后面有个+就可能是设置了文件权限,所以没必要没个文件都用gefacl 去看

    getfacl <文件名>
    获取文件的访问控制信息

    setfacl设置文件的acl
    -m 修改文件的acl
    -x 取消对文件的设置

    setfacl –m u:用户名:权限   文件名             #加用户权限
    setfacl –m g:组名:权限   文件名            #加组权限
    setfacl –x 用户名 文件名                     #-用户权限
    setfacl –x g:组名 文件名                    #-组权限

    注意,撤消ACL操作:
    对用户直接加用户名字就可以了
    对组,在前面加g:组名

    -----------------------------------------------------------------------------------------------------


    例:

    [root@redhat root]# ls -l test1.txt

    -rw-r--r-- 1 root root 0 10月 24 20:23 test1.txt

    [root@redhat root]# id root                显示root用户的详细信息

    uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

    [root@redhat root]# mkdir test                创建test目录

    [root@redhat root]# touch test/test.txt        在目录test下建立一个test.txt文件

    [root@redhat root]# chown root:luowei test    w修改目录test的所属组

    [root@redhat root]# ls -l test                这样是显示目录test的文件属性

    总用量 0

    -rw-r--r-- 1 root root 0 10月 24 20:25 test.txt

    [root@redhat root]# ls -ld test                显示目录test的目录属性,拥有者是root,所属组是luowei

    drwxr-xr-x 2 root luowei 4096 10月 24 20:25 test

    [root@redhat root]# chmod 745 test        修改目录test的权限

    [root@redhat root]# ls -ld test

    drwxr--r-x 2 root luowei 4096 10月 24 20:25 test

    [root@redhat root]# chmod g+s test        在test目录所属组上设置强制位

    [root@redhat root]# ls -ld test

    drwxr-Sr-x 2 root luowei 4096 10月 24 20:25 test

    [root@redhat root]# cd test

    [root@redhat test]# ls -l

    总用量 0

    -rw-r--r-- 1 root root 0 10月 24 20:25 test.txt

    [root@redhat test]# touch test1.txt

    [root@redhat test]# chown root:luowei test1.txt    修改test1.txt的所属组

    [root@redhat test]# cd /home/luowei

    [root@redhat luowei]# chmod 776 test            修改test权限

    [root@redhat luowei]# ls -ld test

    drwxrwxrw- 2 luowei luowei 4096 10月 24 19:54 test

    [root@redhat luowei]# chown root:luowei test

    [root@redhat luowei]# ls -ld test

    drwxrwxrw- 2 root luowei 4096 10月 24 19:54 test

    [root@redhat luowei]# chmod g+s test             在test目录所属组上设置强制位

    [root@redhat luowei]# ls -ld test

    drwxrwsrw- 2 root luowei 4096 10月 24 19:54 test

    [root@redhat luowei]# cd test

    [root@redhat test]# ls

    [root@redhat test]# touch test.txt

    [root@redhat test]# ls -l test.txt

    -rw-r--r-- 1 root luowei 0 10月 24 21:05 test.txt

    [root@redhat test]#

    [root@redhat root]# cd /home/luowei

    [root@redhat luowei]# mkdir sticky_test

    [root@redhat luowei]# chown luowei:luowei sticky_test/

    [root@redhat luowei]# chmod 777 sticky_test/

    [root@redhat luowei]# chmod o+t sticky_test/         添加冒险位

    [root@redhat luowei]# cd sticky_test/

    [root@redhat sticky_test]# touch test.txt

    [root@redhat sticky_test]# chown root:luowei test.txt

    [root@redhat sticky_test]# ls -l test.txt

    -rw-r--r-- 1 root luowei 0 10月 24 22:44 test.txt

    [root@redhat sticky_test]# su - luowei

    [luowei@redhat luowei]$ cd sticky_test/

    [luowei@redhat sticky_test]$ touch test2.txt

    [luowei@redhat sticky_test]$ ls -l

    总用量 0

    -rw-rw-r-- 1 luowei luowei 0 10月 24 22:46 test2.txt

    -rw-r--r-- 1 root luowei 0 10月 24 22:44 test.txt

    [luowei@redhat sticky_test]$ rm test.txt

    rm:是否删除有写保护的一般空文件'test.txt'? y

    [luowei@redhat sticky_test]$ cd ..

    [luowei@redhat luowei]$ ls -l

    总用量 8

    -rwxrwxrw- 1 luowei luowei 0 10月 24 19:45 aa

    [luowei@redhat luowei]$ su - root

    Password:

    [root@redhat root]# groupadd test             建立一个test用户组

    [root@redhat root]# useradd -g test test1     在test用户组下建立一个名为test1的用户

    [root@redhat root]# id test1                     显示test1的用户信息

    uid=501(test1) gid=501(test) groups=501(test)

    [root@redhat root]# cd /home/luowei

    [root@redhat luowei]# passwd test1             修改test1的密码

    Changing password for user test1.

    New password:

    BAD PASSWORD: it is based on a dictionary word

    Retype new password:

    passwd: all authentication tokens updated successfully.

    [root@redhat luowei]# su - luowei

    [luowei@redhat luowei]$ su - test1

    Password:

    [test1@redhat test1]$ cd /home/luowei

    -bash: cd: /home/luowei: 权限不够


    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-18 00:22
  • 签到天数: 2 天

    [LV.1]初来乍到

     楼主| 发表于 2013-3-11 23:22:27 | 显示全部楼层
    umask

    如果没有掩码的情况下,创建文件的默认权限为 rw- rw- rw- ; 创建目录的默认权限是 rwx rwx rwx 。

    而在实际的环境中,一般都会受到掩码的作用。用户也可以自主改动umask值,并在改动后建立的文件上得到体现。一般用户的默认umask值为002,系统用户的默认umask值为022 。

    如:

    [luowei@redhat luowei]$ umask

    0002

    [luowei@redhat luowei]$ su -

    Password:

    [root@redhat root]# umask

    0022

    [root@redhat root]#



    创建后的文件或目录的 权限=默认权限-umask

    例:

    [root@redhat a]# umask 003        将root的umask值改为003

    [root@redhat a]# mkdir a_dir

    [root@redhat a]# ls -ld a_dir

    drwxrwxr-- 2 root root 4096 10月 25 00:32 a_dir

    [root@redhat a]# umask 022        将root的umask值改回022

    [root@redhat a]# mkdir b_dir

    [root@redhat a]# ls -ld b_dir

    drwxr-xr-x 2 root root 4096 10月 25 00:32 b_dir

    [root@redhat a]#
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-23 05:18 , Processed in 0.293773 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表