linux权限位

Linux文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件属主权限、属组权限、其他用户权限。

r:read可读权限,对应数字4;

w:write可写权限,对应数字2;

x:execute执行权限,对应数字1;

-:没有任何权限,对应数字0。

  1. #创建一个用户组
  2. [root@oldboy ~]# groupadd incahome
  3. #创建一个用户指定所属用户组
  4. [root@oldboy ~]# useradd -g incahome oldboy
  5. [root@oldboy ~]# useradd -g incahome oldgirl
  6. #创建一个用户
  7. [root@oldboy ~]# useradd test
  8. #查看用户
  9. [root@oldboy ~]# id oldboy
  10. uid=502(oldboy) gid=502(incahome) groups=502(incahome)
  11. [root@oldboy ~]# id oldgirl
  12. uid=503(oldgirl) gid=502(incahome) groups=502(incahome)
  13. [root@oldboy ~]# id test
  14. uid=504(test) gid=504(test) groups=504(test)

创建一个test.sh,内容:echo "i am oldboy linux"。查看属性:

  1. [root@oldboy oldboy]# ls test.sh -l
  2. -rw-r--r-- 1 root root 25 Dec 25 21:10 test.sh

一个家庭(用户组)incahome,成员oldboy、oldgirl,非家庭用户test,超级用户root。

修改文件权限

  1. [root@oldboy oldboy]# chown oldboy.incahome test.sh
  2. [root@oldboy oldboy]# ls -l test.sh
  3. -rw-r--r-- 1 oldboy incahome 25 Dec 25 21:10 test.sh

分别测试不同用户对该文件的权限。

linux普通文件的读写执行权限说明:

可读r:表示具有读取、阅读文件内容的权限。

可写w:表示具有新增、修改文件内容的权限(如果没有r,那么vi无法编辑,强制编辑会覆盖数据,echo可以写入)

可执行x:表示具有执行文件的权限(1、文件本身要能够执行;2、普通用户同时具备r权限才能执行;3、root都能执行)。

特别提示:删除文件(修改文件名等)的权限是受父目录的权限控制,和文件本身的权限无关。

win下可执行文件:*.exe、*.bat、*.com

linux下可执行文件:*.sh、*.py、*.perl等

有关文件删除说明

linux中的文件名是存在于父目录的block里面,并指向这个文件的inode节点,这个文件的inode节点再标记指向存放这个文件的block的数据块。我们删除文件并不清除inode节点和block的数据。只是在这个文件的父目录里面的block中删除这个文件的名字,从而使这个文件名消失,并且无法指定这个文件的inode节点,当没有文件名指向这个inode节点的时候会同时释放inode节点和存放这个文件的数据块,并更新inodeMAP和blockMAP,让这些位置用于放置其他文件数据。

linux目录的读写执行权限说明:

可读r:表示具有浏览目录下面文件及子目录的权限,即ls dir。不能进到目录里,即无法cd dir。如果没有x权限,ls列表时可以看到所有文件名。但是会提示无权访问目录下的文件。如果ls -l列表,所有的属性会带有问号,也会提示无权访问目录下文件,但是可以看到所有文件名。

可写w:表示具有增加、删除或修改目录内文件名的权限(需要x权限配合)。

可执行x:表示进入目录的权限,例如cd dir。但是没有r无法列表,没有w无法新建和删除。

linux文件与目录权限对比说明:

r(read,读取权限):

对文件表示具有读取阅读文件内容的权限。

对目录表示具有浏览目录下面文件及子目录的权限,即ls dir。

w(write,写入权限):

对文件表示具有新增、修改文件内容的权限。

对目录表示具有新增、删除、移动目录内文件名的权限。

x(execute,执行权限):

对文件表示具有执行文件的权限。

对目录表示具有进入目录的权限。

-(无任何权限):

若对应位置权限位为字符"-",表示对应用户没有读写执行的任何权限。

chmod修改文件权限

chmod:change mode改变文件权限

chmod数字式权限表示法

chmod [数字组合] 文件名

chmod的数字方法的说明:

r:4;w:2;x:1:;-:0。

rwxr-xr-x:755

  1. [root@oldboy oldboy]# chmod 531 test.sh
  2. [root@oldboy oldboy]# ls -l test.sh
  3. -r-x-wx--x 1 oldboy incahome 25 Dec 25 21:10 test.sh

chmod字符式权限表示法

使用权限字符设置权限的命令格式如下。

chmod [用户类型] [+|-|=] [权限字符] 文件名,用表格表示如下:

chmod

用户类型

操作字符

权限字符

文件或目录

u(user)

+(加入)

r

g(group)

 

-

o(others)

-(减去)

w

a(all)

=(设置)

x

rw-rw-r-xàrwx--xr-x:chmod u+x,g=x test.sh

  1. [root@oldboy oldboy]# ls -l test.sh
  2. -r-x-wx--x 1 oldboy incahome 25 Dec 25 21:10 test.sh
  3. [root@oldboy oldboy]# chmod u+w,g=rw,o+r test.sh
  4. [root@oldboy oldboy]# ls -l test.sh
  5. -rwxrw-r-x 1 oldboy incahome 25 Dec 25 21:10 test.sh
  6. [root@oldboy oldboy]# chmod u+x,g=x test.sh
  7. [root@oldboy oldboy]# ls -l test.sh
  8. -rwx--xr-x 1 oldboy incahome 25 Dec 25 21:10 test.sh

默认权限分配的命令umask

  1. [root@oldboy oldboy]# mkdir d755
  2. [root@oldboy oldboy]# touch f644
  3. [root@oldboy oldboy]# ls -lrt
  4. drwxr-xr-x 2 root root 4096 Dec 26 09:15 d755
  5. -rw-r--r-- 1 root root 0 Dec 26 09:15 f644

umask默认值

  1. [root@oldboy oldboy]# umask
  2. 0022

umask的默认值的控制

  1. [root@oldboy oldboy]# sed -n '65,69p' /etc/bashrc
  2.     if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
  3.        umask 002
  4.     else
  5.        umask 022
  6.     fi

根据umask值计算文件权限

创建文件默认最大权限为:666-umask,当umask有奇数时,计算权限需要在奇数位加1。

创建目录默认最大权限位:777-umask。

setuid和setgid

setuid介绍

  1. [root@oldboy oldboy]# ls -l `which passwd`
  2. -rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd

setuid使用户执行该命令的时候临时获得属主用户的权限

setuid小结:针对命令和二进制程序

1、用户或属主对应的前三位权限的x位上如果有s就表示setuid权限。当x位上没有小写x执行权限的时候,setuid的权限就显示大写S;当x位上有x执行权限的时候,setuid的权限就显示小写s。

2、setuid作业是让普通用户可以以root(或其他)的用户角色运行只有root(或其他)账号才能运行的程序或命令,或程序命令对应本来没有权限操作的文件等。

注意和su及sudo的区别,setuid为某一个命令设置特殊权限(使用者为所有人)。

3、问题,希望oldboy用户能够删除本来无权删除的文件。

a、sudo给oldboy授权rm。b、给rm命令设置setuid。c、设置上级目录权限。

4、setuid修改的是执行的命令passwd,而不是处理目标文件/etc/shadow。

5、仅对二进制命令程序有效,不能用在shell等类似脚本文件上(因为shell脚本仅仅是调用二进制命令程序而已,因此,具体权限还需要看二进制命令本身)。

6、二进制命令程序需要有可执行权限x配合。

7、setuid权限仅在程序命令执行过程中有效。

8、执行setuid命令的任意系统用户都可以获得命令程序在执行期间对应的拥有者的所有权限。

9、setuid是一把双刃剑,是一个比较危险的功能,对系统安全有一定的威胁。系统setuid的无用的功能取消setuid权利(安全优化)。

setgid介绍

1、与setuid不同的是,setgid既可以针对文件也可以针对目录设置。

2、setgid是针对用户组权限位修改的。

对于文件来说,setgid的功能如下:

1)、setgid仅对二进制命令程序有效。

2)、二进制命令或程序需要有可执行权限x。

3)、执行程序的任意用户可以获得该命令程序执行期间所属组的权限。

对于目录setgid的功能如下:

1)、linux里默认情况所有用户创建文件,默认用户和组都是自身。

2)、setgid可以让用户在此目录下创建的文件和目录具有和此目录相同的用户组设置。

setgid位主要用于在目录中,当为某个目录设置了setgid位以后,在该目录中新创建的文件的所有者权限,而不是创建该文件的用户的默认所有者。这样,使得在多个用户之间共享一个文件变得简单。

locate查找命令

案例:

创建共享目录/home/admins,属组为adminuser,adminuser组成员对目录有写入读写和执行的权限,其他所有用户没有任何权限(root除外),在/home/admins目录中创建的文件会自动继承adminuser组。

  1. [root@oldboy oldboy]# mkdir /home/admins -p
  2. [root@oldboy home]# groupadd adminuser
  3. [root@oldboy home]# ls -ld admins/
  4. drwxr-xr-x 2 root root 4096 Dec 26 15:29 admins/
  5. [root@oldboy home]# chgrp adminuser admins/
  6. [root@oldboy home]# ls -ld admins/
  7. drwxr-xr-x 2 root adminuser 4096 Dec 26 15:29 admins/
  8. [root@oldboy home]# touch admins/test.txt
  9. [root@oldboy home]# ls -l admins/test.txt
  10. -rw-r--r-- 1 root root 0 Dec 26 15:36 admins/test.txt
  11. [root@oldboy home]# chmod g+s admins/
  12. [root@oldboy home]# ls -ld admins/
  13. drwxr-sr-x 2 root adminuser 4096 Dec 26 15:36 admins/
  14. [root@oldboy home]# touch admins/test_2.txt
  15. [root@oldboy home]# ls -l admins/
  16. total 0
  17. -rw-r--r-- 1 root adminuser 0 Dec 26 15:39 test_2.txt
  18. -rw-r--r-- 1 root root 0 Dec 26 15:36 test.txt

粘滞位sticky bit(sbit)及设置方法

用途一般是把一个文件夹的权限都打开,然后来共享文件,例如/tmp目录一样。使用方便但是带来安全隐患,生产环境一般不这样使用。

sticky比setgid的更安全措施,让多个用户具有写权限的目录,每个用户只能删除自己的文件。sticky在other位,用t表示,如果没有执行权限,那么就是T表示;如果有执行权限,那么就是t表示。

特殊权限对应的数字小结

setuid 4000 权限字符s(S),用户位上的x位上设置。授权方法chmod 4755 oldboy.txt。

setgid 2000 权限字符s(S),用户组位的x位上设置。授权方法chmod 2755 oldboy.txt。

粘滞位 1000 权限字符t(T),其他用户位的x位上设置。授权方法chmod 1755 /tmp。

如果对应位有x则字符权限表现为小写,否则表现为大写。

推荐设置方法:

chmod g+s test

chmod u+s test

chmod o+t test

chown和chgrp

chown 用户 文件或目录 à仅仅授权用户

chown :组 文件或目录 à仅仅授权组。等同于"chgrp 组 文件或目录"。

chown 用户:组 文件或目录 à表示授权用户和组

注意:

1、其中的冒号":"可以用点号"."替代。

2、要授权的用户和组名,必须是linux系统里实际存在的。

文件的属主和用户组的特殊情况

  1. [root@oldboy oldboy]# ll
  2. total 12
  3. drwxr-xr-x 2 root root 4096 Dec 26 09:15 d755
  4. -rw-r--r-- 1 root root 0 Dec 26 09:15 f644
  5. drwxr-xr-x 2 root root 4096 Dec 25 23:04 test
  6. --wx--x--x 1 root root 25 Dec 25 21:10 test.sh
  7. [root@oldboy oldboy]# groupadd incahome
  8. [root@oldboy oldboy]# useradd -g incahome oldboy
  9. [root@oldboy oldboy]# chown oldboy:incahome *
  10. [root@oldboy oldboy]# ll
  11. total 12
  12. drwxr-xr-x 2 oldboy incahome 4096 Dec 26 09:15 d755
  13. -rw-r--r-- 1 oldboy incahome 0 Dec 26 09:15 f644
  14. drwxr-xr-x 2 oldboy incahome 4096 Dec 25 23:04 test
  15. --wx--x--x 1 oldboy incahome 25 Dec 25 21:10 test.sh
  16. [root@oldboy oldboy]# userdel -r oldboy
  17. [root@oldboy oldboy]# ll
  18. total 12
  19. drwxr-xr-x 2 505 incahome 4096 Dec 26 09:15 d755
  20. -rw-r--r-- 1 505 incahome 0 Dec 26 09:15 f644
  21. drwxr-xr-x 2 505 incahome 4096 Dec 25 23:04 test
  22. --wx--x--x 1 505 incahome 25 Dec 25 21:10 test.sh
  23. [root@oldboy oldboy]# groupdel incahome
  24. [root@oldboy oldboy]# ll
  25. total 12
  26. drwxr-xr-x 2 505 506 4096 Dec 26 09:15 d755
  27. -rw-r--r-- 1 505 506 0 Dec 26 09:15 f644
  28. drwxr-xr-x 2 505 506 4096 Dec 25 23:04 test
  29. --wx--x--x 1 505 506 25 Dec 25 21:10 test.sh

文件的所属用户和属组变成数字,解决办法创建一个相同uid的用户和相同gid的属组,如果有服务还需要确保创建的用户名与服务配置的用户名一致并且对应uid。

  1. [root@oldboy oldboy]# groupadd incahome -g 506
  2. [root@oldboy oldboy]# ll
  3. total 12
  4. drwxr-xr-x 2 505 incahome 4096 Dec 26 09:15 d755
  5. -rw-r--r-- 1 505 incahome 0 Dec 26 09:15 f644
  6. drwxr-xr-x 2 505 incahome 4096 Dec 25 23:04 test
  7. --wx--x--x 1 505 incahome 25 Dec 25 21:10 test.sh
  8. [root@oldboy oldboy]# useradd oldgirl -u 505 -g incahome
  9. [root@oldboy oldboy]# ll
  10. total 12
  11. drwxr-xr-x 2 oldgirl incahome 4096 Dec 26 09:15 d755
  12. -rw-r--r-- 1 oldgirl incahome 0 Dec 26 09:15 f644
  13. drwxr-xr-x 2 oldgirl incahome 4096 Dec 25 23:04 test
  14. --wx--x--x 1 oldgirl incahome 25 Dec 25 21:10 test.sh

Linux基础介绍【第五篇】的更多相关文章

  1. Linux基础介绍【第一篇】

    Linux简介 什么是操作系统? 操作系统,英文名称Operating System,简称OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心 ...

  2. Linux基础介绍【第九篇】

    服务器添加3块磁盘的体系结构 [root@oldboylinux test]# free -m              total used free shared buffers cached M ...

  3. Linux基础介绍【第二篇】

    远程连接Linux的原理 SHH远程连接介绍 当前,在几乎所有的互联网企业环境中,最常用的Linux提供远程连接服务的工具就是SSH软件,SSH分为SSH客户端和SSH服务端两部分.其中,SSH服务端 ...

  4. 总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇

    本文是Java IO总结系列篇的第5篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  5. linux设备驱动第五篇:驱动中的并发与竟态

    综述 在上一篇介绍了linux驱动的调试方法,这一篇介绍一下在驱动编程中会遇到的并发和竟态以及如何处理并发和竞争. 首先什么是并发与竟态呢?并发(concurrency)指的是多个执行单元同时.并行被 ...

  6. Linux基础介绍【第六篇】

    定时任务crond介绍 crond是什么? crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件.一般情况下,安装完CentOS5/6 linux操作系统之后,默认便会启动cro ...

  7. Linux基础介绍【第四篇】

    Linux文件和目录的属性及权限 命令: [root@oldboy ~]# ls -lhi total 40K 24973 -rw-------. 1 root root 1.1K Dec 10 16 ...

  8. Linux基础介绍【第八篇】

    Linux网络基础 网线 568A 568B 线序:橙白橙 绿白蓝 蓝白绿 棕白棕 交换机.路由器 交换机:DLINK.H3C.CISCO 交换机(Switch)是一种用于电信号转发的网络设备.它可以 ...

  9. Linux基础介绍【第七篇】

    linux用户分类 超级用户:UID=0,root 普通用户:UID 500起,由超级用户或具有超级用户权限的用户创建的用户. 虚拟用户:UID 1-499,为了满足文件或服务启动的需要而存在,一般都 ...

随机推荐

  1. jQuery之ajax实现篇

    jQuery的ajax方法非常好用,这么好的东西,你想拥有一个属于自己的ajax么?接下来,我们来自己做一个简单的ajax吧. 实现功能 由于jq中的ajax方法是用了内置的deferred模块,是P ...

  2. Fabio 安装和简单使用

    Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...

  3. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  4. 简单入门canvas - 通过刮奖效果来学习

    一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...

  5. CLR 这些年有啥变化吗?

    引言 首先想给初学者推荐下<CLR via C#>这本好书,做.Net开发的开发者应该都读一下.为避免广告之嫌,所以这里只提供豆瓣书评的链接. CLR 作为.Net 程序跨平台运行的载体, ...

  6. Hawk 5. 数据库系统

    Hawk在设计之初,就是以弱schema风格定义的.没有严格的列名和列属性.用C#这样的静态强类型语言编写Hawk,其实并不方便.但弱schema让Hawk变得更灵活更强大. 因此,Hawk虽然之前支 ...

  7. CRL快速开发框架系列教程五(使用缓存)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. 关于.NET参数传递方式的思考

    年关将近,整个人已经没有了工作和写作的激情,估计这个时候很多人跟我差不多,该相亲的相亲,该聚会喝酒的聚会喝酒,总之就是没有了干活的心思(我有很多想法,但就是叫不动我的手脚,所以我只能看着别人在做我想做 ...

  9. 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)

    Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...

  10. 值得注意的ibatis动态sql语法格式

    一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...