LINUX系统下的普通权限以及几种特殊权限

1.基本权限与对用户的权限管理

1.首先我们要想对用户进行权限管理,就要知道如何查看一个文件的权限,我们可以用ll命令或者ls -l 命令查看某个文件的权限,如下图:

我们可以看到使用ll命令列出了/app下文件的一些信息一共7列,这7列表示了/app下文件的详细信息:
?(1)第一列一共有11个字符,第一位显示的是文件类型,linux下文件一共分为7类:

 1.-  普通文件
 2.d  目录文件
 3.b  块设备文件
 4.c  字符设备
 5.l   符号链接文件
 6.p 管道文件
 7.s 套件字文件

这是linux下7中不同的文件类型,然后接下来的9位就是我们将要介绍到的权限,这9位权限分为3组,每组3位,每位上有两种情况,如上图,第一组是rwx,代表的就是可读可写可执行,如果,r代表可读,如果是-就表示不可读,w代表可写,-代表不可写,x代表可执行,-代表不可执行。这三组权限第一组代表的是文件所有者即owner的权限,第二组代表的是文件所有组即group的权限,第三组代表的是其他人即other的权限。最后一个.表示的是启用selinux,这里不再赘述。
?(2)第二列只有一个数字,表示该文件的连接数,如上3就是表示该文件有三个链接。
?(3)第三列表示的是文件的所有者,即owner的名字,如上root即是表示该文件属于root这个用户。
?(4)第四列表示的是文件的所有组,即group的名字,如上root即是表示该文件属于root这个群组。
?(5)第五列表示的是文件的大小。
?(6)第六列表示文件的更新时间。
?(7)第七列表示文件名
??
2.现在我们引入一个概念:安全的上下文
??如果我们要复制/etc/passwd到目录/app下,我们需要哪些权限哪?这条复制命令是?cp /etc/passwd /app?那么要想复制一个文件,我们首先要拥有使用cp这条命令的权限,如果我们根本没有权限使用cp命令,那复制根本无从谈起;其次,想要复制一个文件,我们要能够读这个文件,如果没不能够读这个文件,就没有了复制源,自然无法复制;最后我们还要能在目的地能够写,这样才能够复制文件。我们的一切操作都是需要权限进行控制,这个就叫做安全的上下文。
??
3.具体什么权限能够实现的操作呢?
??我们对文件能够实现的操作无非就是读,写,执行,以及他们的组合权限:创建,删除,修改(能写自然就能修改);3位权限,无非就是r,w,x,rw,rx,wx,rwx这其中组合。虽然文件有7种,但我们将目录文件区分出来,下文中用目录代替目录文件,用文件代表其他文件。
??对文件来说:
????r权限:表示可以读该文件的内容,使用cat或者less。
????w权限:表示可以修改文件的内容,使用vim,vi等。
????x权限:无任何作用。
????rw权限:表示可以对文件进行读写操作。
????wx权限:相当于w权限,只能写。
????rx权限:表示可以读该文件并能执行他。
????rwx权限:表示可读,可写,可执行,为最高权限。
??
??对目录来说:
????r权限:表示可以短列出目录的内容(子文件名,子目录名)。
????w权限:无作用。
????x权限:可以进入该目录。
????rw权限:相当于r权限。
????rx权限:可以长列出目录的内容,可以进入目录。
????wx权限:可以创建,删除文件或目录。
????rwx权限:可以列出,创建,删除,进入目录。
??
4.那么如何修改权限,什么人有权利修改文件或者目录的权限呢?
??修改权限是通过chmod命令完成的。

对所有者权限修改 chmod u+/-r/x/w/rx/rw/wx/rwx +文件名
对群组权限修改     chmod g+/-r/x/w/rx/rw/wx/rwx +文件名
对其他用户权限修改 chmod o+/r/x/w/rx/rw/wx/rwx +文件名

? ?同时我们也可以用二进制的方法来表示文件的权限。对于每一组权限,每一位上只有两种可能,即是有或无,我们可以用1表示有,0表示无。就会是下面这样:

r-- 100 =4
\-w- 010 =2
\--x 001 =1
rw- 110 =6
r-x 101 =5
\-wx 011=3
rwx 111=7
\--- 000 =0

因为可以用数字可以来表示权限,那么我们就有了更简单的方法来改变文件的权限:

chmod 777 /app/house

或者chmod 数字表示的权限 加文件,这样可以一次性改变文件的所有权限。



? ?实验看看谁能够修改文件的权限,root用户是超级用户,是可以修改所有的权限的,此处不再实验
? ?现在在创建用户liubei,guanyu,zhangfei,caocao,创建群组shuguo,设置群管理员为guanyu,设置组成员为liubei,guanyu,caocao;在app下创建目录test,修改权限为777,修改所属组为shuguo,切换用户为刘备,在/test下创建一个test.file,命令如下:

useradd liubei
useradd guanyu
useradd zhangfei
useradd caocao
groupadd shuguo
gpasswd -A guanyu shuguo
gpasswd -M liubei,guanyu,zhangfei
cd /app
mkdir test
chmod 777 test
su - liubei
cd /app/test
touch test.file
ll

结果如下图:


??现在liubei是test.file的owne,guanyu是群组sanguo的管理员,liubei,zhangfei,guanyu是shuguo的群成员,caocao是other现在测试owner,群组成员,群管理员,其他人能否修改test.file的权限。
liubei是owner:

guanyu是shuguo的群管理

zhangfei是shuguo的群成员

caocao不是shuguo的群成员

由此可知只有root和文件的所有者能修改文件的权限,别人谁都不能修改。
????
5.那么文件的所有者属于一个群组,但所有者自己没有权限读该文件,但是群组有权限读时,那么该用户能读吗?同时一个人属于群组,但群组没有读权限,其他人有读权限,那么能读吗?(实验当一个用户访问文件时,去和应用权限。)
??修改文件test.file的权限为070,命令如下

chmod 070 test.file

??liubei是test.file的owner

??修改文件test.file的权限为007,命令如下

chmod 007 test.file

??zhangfei是shuguo的组员

由此可以看出,当一个用户访问一个文件时,会首先判断该用户是不是owner,如果是,应用owner位权限,即是是群组成员,也不会应用group位权限,如果不是owner,则判断是不是群组成员,如果是,应用group位权限,不会应用other位权限,如果不是,应用other位权限。
6.umask
我们可以在test中创建几个文件和目录如下,并查看他们的权限,然后回到/app,同样创建几个文件和目录如下:

touch {1..5}
mkdir -p /a/b
ll
cd ..
mkdir -p /1/2/3
ll
cd 2
ll
cd 3
ll

??

??

??

??

??
我们可以发现文件的权限都是660,目录的权限都是771,这是为什么呢,在linux,创建文件时,时默认不能执行的,所以最高权限是666,目录的最高权限是777,我们用777-771=006;用666-660=006;运行umask,可以看到umask值就是006;
由此可知文件的默认权限是666-umask,目录的默认权限是777-umask。
??
现在设置umask的值为011,命令如下:

umask 011

创建一个目录can,创建一个文件ca;然后查看权限,命令如下:

mkdir can
touch ca
ll


??
??可以看到文件的权限是666,而目录的权限是766;我们会发现,666-011=655,这是为什么呢?655的权限是多少呢 是rw-r-xr-x,是可执行文件,而文件被创建时是不被允许可被执行的,所以当umask是1,3,5时,对应的位,应该加1,这样才能保证文件的不可执行。
??

7.特殊权限位s
??特殊权限位s可以作用在ower位上,即为sgid,也可以作用在group,即为sgid。
??suid:对于一个可执行文件作用了suid权限后,任何人执行该文件后,临时拥有其所有人的权限。
我们用命令touch来实验:首先查看touch权限是755,然后切换到liubei,创建文件liubei1.file;然后修改权限为750,切换到liubei下,创建文件liubei2.file;然后修改权限,加上u+s,切换到liubei,创建liubei3.file;修改权限为751,并加suid权限;切换到liubei,创建liubei4.file;最后修改权限为755,去掉suid权限;部分代码如下:
ll /bin/touch

su - liubei
touch liubei1.file
su
chmod 750 /bin/touch
su - liubei
touch liubei2.file
su
chmod u+s /bin/touch
su - liubei
touch liubei3.file
su
chmod 751 /bin/touch
chmod u+s /bin/touch
su - liubei
touch liubei4.file

结果如下:
????
创建liubei1.file

创建liubei2.file

创建liubei3.file

创建liubei4.file

??由此可以看出,liubei1.file,与liubei4.file是创建成功的,liubei3.file,liubei.2file没有创建成功,liubei1.file是因为liubei是other对touch有5权限,能够读touch内容,也能执行,所以能创建;liubei2.file不成功是因为other是0权限,liubei是other身份,自然不能创建;liubei3.file不成功的原因是liubei是other身份,我们先前介绍过安全的上下文,想要创建,首先能读touch,这里有suid权限,liubei临时获得了root的权限,所以可以读touch命令,然后要看对目的地有没有权限,最后看能不能用读到的touch写,这里liubei只有0权限,虽然读到touch,但是没有执行权限,所以无法创建;liubei4.file有root的读权限,自己也能执行touch,所以创建成功。
??sgid:1.当对一个可执行的二进制文件作用了sgid后,任何人在执行该文件时临时拥有其所有组的权限。
?????2.当对一个目录作用了sgid权限后,任何人在该目录下创建的文件的所属组,均与该目录的所属组相同。
??????
??1和suid相同,这里不再赘述,我们直接实验2;在/app下创建目录house,修改该目录的权限为777,然后加上sgid,权限,分别切换到liubei,guanyu,zhangfei下,在house下创建文件liubeitest1,guanyutest,zhangfeitest1,创建目录liubeitest1,guanyutest1,zhangfeitest1;查看所属组。代码如下:

cd /app
mkdir house
chmod g+s house
su - liubei
cd /app/house
mkdir liubeitest1
touch liubeitest2
su - guanyu
cd /app/house
mkdir guanyutest1
touch guanyutest2
su - zhangfei
cd /app/house
mkdir zhangfeitest1
touch zhangfeitest2
su
ll /app/house

其结果如下:

所有创建的文件和目录都没有继承其owner的主组,而是继承了house的所属组root。
????
8.特殊权限位t
??stisky:对一个目录作用了stisky权限,该目录下的文件仅其所有人和目录的所属人及root可以删除。
??将之前创建的所有文件删除;在/app下创建test目录,修改权限为777,然后刘关张分别创建目录liubei1,guanyu1,zhangfei1,文件liubei2,guanyu2,zhangfei2;然后切换到刘备下,删除所有,再创建回来,修改test权限为o+t,再切换到张飞,删除所有。部分代码如下。

chmod 777 /app/test
切换用户,创建文件目录;
su - liubei
rm -rf /app/test/*
切换用户,创建文件目录;
chmod o+t /app/test
su - zhangfei
rm -rf /app/test/*
注:将目录文件权限全改为754

其结果如下:
创建文件:

其他用户不能进入别人的目录:

zhangfei删除

重新建回来:

修改权限other位加t

关羽删除:

????
我们可以看到当不加t权限时,即使不能进入别人的目录,但却可以删掉别人的文件,但是加上t后,只能删除自己的文件,不能删除别人的文件。但是作为目录的所属人,是可以改变目录的权限的,这样他可以去掉t权限,所有可以修改别人的文件。
??
9.attr权限
attr权限是root用户为了限制自己权利而设置的特殊权限,但是自己是可以修改的;
???? chattr +a 表示不能删除,不能覆盖,可以追加
??? ?chattr+i 表示不能删除,不能覆盖,不能追加
lsattr 查看attr权限
去掉attr权限
????chattr -i
????chattr -a
因为工作很少用root,不再验证。

原文地址:http://blog.51cto.com/13412442/2148106

时间: 2024-10-11 18:59:11

LINUX系统下的普通权限以及几种特殊权限的相关文章

Linux系统下取IP地址的几种方法

Linux系统下取IP地址所在行的方法:(1).ifconfig eth0 | grep "inet addr"          inet addr:10.57.36.112  Bcast:10.57.36.255  Mask:255.255.255.0注释:grep过滤包含"inet addr"字符串的内容(2).ifconfig eth0 | sed -n '2p'          inet addr:10.57.36.112  Bcast:10.57.36

Linux系统下如何运行.sh文件

在Linux系统下运行.sh文件有两种方法,比如我在root目录下有个datelog.sh文件 第一种(这种办法需要用chmod使得文件具备执行条件(x): chmod u+x datelog.sh): 1.在任何路径下,输入该文件的绝对路径/root/datelog.sh就可执行该文件(当然要在权限允许情况下) 2.cd到datelog.sh文件的目录下,然后执行./datelog.sh 第二种(这种办法不需要文件具备可执行的权限也可运行): 1.在该文件路径下sh加上文件名字即可,sh da

在Linux系统下制作系统启动盘(Ubuntu Linux)

在Linux系统下制作系统启动盘有两种方法: 1.用dd命令 2.用Linux自带的图形界面工具 Startup Disk Creator 本教程使用第2种方式,用Linux自带的图形界面工具制作系统启动盘,简单直接. 1.在Linux 的界面的搜索栏输入Startup Disk Creator,下方就会出现Startup Disk Creator工具 2.点击运行Startup Disk Creator,弹出以下界面, 点击Other可以选择用于制作启动盘的ISO镜像文件, 点击Disk to

linux系统下修改文件夹目录权限

linux系统下修改文件夹目录权限 文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何修改Linux文件-文件夹权限.以主文件夹下的一个名为cc的文件夹为例. 下面一步一步介绍如何修改权限: 1.打开终端.输入su(没 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何修改Linux文件

linux系统下的权限控制

 linux系统下的权限控制 1.文件权限 在我们的linux系统中,文件或目录的权限可以分为3种: r:4 读 w:2 写 x:1  执行 示例: 644:(4+2) (4)  (4) 第一个6:表示当前文件的拥有者的权限,6=4+2 可读可写权限 第二个4:表示当前文件的所属组权限,4=4 可读权限 第三个4:表示当前文件的组外权限,4=4 可读权限 2.查看文件权限的命令:(ls -l 或ll) 总共可以分为7大列: 第1列(分为10列): 1:文件的类型 ,-代表普通文件,d代表目录,l

Linux系统下的shutdown命令用于安全的关闭/重启计算机

Linux系统下的shutdown命令用于安全的关闭/重启计算机,它不仅可以方便的实现定时关机,还可以由用户决定关机时的相关参数.在执行shutdown命令时,系统会给每个终端(用户)发送一条屏显,提示关机操作.定时关机只需要一个简单的参数,既可以是倒计时,也可以是确切的时间. 命令格式 1 shutdown [选项] [时间] [消息] 并有如下选项: - k 不执行任何关机操作,只发出警告信息给所有用户 - r 重新启动计算机 - h 关机并彻底断电 - f 快速关机且重启动时跳过fsck

linux系统下文件查找

在我们实际应用中,经常需要查找某个特定的文件,或者根据文件的某个特定属性进行查找,今天小菜就给大家分享一下,linux系统下文件查找的两大利器: 1,locate:非实时查找(基于预先生成的数据库查找):模糊匹配:速度快 2,find:实时查找(遍历目录中的所有文件完成查找):精确匹配,支持众多查找标准:速度慢 一.locate 查询系统上预先生成的文件索引数据库:/var/lib/mlocate/mlocate.db 依赖于事先构建的索引:索引的构建是在系统较为空闲时自动进行(周期性任务) 管

Linux系统下基本命令

<Linux系统下基本命令> Linux系统下基本命令: 要区分大小写 uname 显示版本信息(同win2K的 ver) dir 显示当前目录文件,ls -al 显示包括隐藏文件(同win2K的 dir) pwd 查询当前所在的目录位置 cd cd ..回到上一层目录,注意cd 与..之间有空格.cd /返回到根目录. cat 文件名 查看文件内容 cat >abc.txt 往abc.txt文件中写上内容. more 文件名 以一页一页的方式显示一个文本文件. cp 复制文件 mv 移

Linux系统下修改环境变量PATH路径的三种方法

比如要把/etc/apache/bin目录添加到PATH中,方法有三: 1.#PATH=$PATH:/etc/apache/bin 使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效 2.#vi /etc/profile 在适当位置添加 PATH=$PATH:/etc/apache/bin (注意:= 即等号两边不能有任何空格) 这种方法最好,除非你手动强制修改PATH的值,否则将不会被改变 3.#vi ~/.bash_profile 修改PATH行,把/et

在Linux系统下安装大于mysql5.5版本的数据库

linux下mysql 5.5的安装方法: 1.安装所需要系统库相关库文件      gcc等开发包,在安装linux系统的时候安装. 2.创建mysql安装目录 # mkdir -p /usr/local/mysql/ 3.创建数据存放目录 # mkdir -p /service/data/ 4.创建用户和用户组与赋予数据存放目录权限 # groupadd mysql # useradd -g mysql mysql # chown mysql:mysql -R /service/data/