权限基础知识普及:
权限的分类:
r(read) 读 w(write) 写 x(execute) 执行
r 读 权限
针对目录,有r权限,就代表能对此目录有列表的功能 (就是ls列出来的功能)
针对文件,有r权限,就代表能对此文件有阅读的功能 (就是指cat一类的命令)
w 写 权限
针对目录,有w权限,就代表在此目录下创建(删除)文件或者子目录(touch,mkdir等)
针对文件,有w权限,就代表能在此文件写入内容或者修改(> ,>>, vi 再写等)
x 执行 权限
针对目录,有x权限,就代表能进入此目录 (cd)
针对文件,有x权限,就代表能执行它 (命令,可执行文件等)
文件的权限:-rw-r--r--这个以数字表示为644(严谨的说,不能叫它六百四十四,要叫它*四)
每三位里r代表4,w代表2,x代表1;由三个数组成一个三位数,就是你的权限
目录的权限:drwxr-xr-x 755
问:什么情况下才能删除一个文件或目录?
答:跟这个文件或目录本身的权限无关,跟你对它们的上一级目录是否有写权限有关。
你对一个目录有写权限,你就可以删除这个目录里任何文件
----------------------------------------------------------------------------------------------------------------------一、用户组权限:
在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念
所有者
一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者
用 ls ‐ahl 命令可以看到文件的所有者
也可以使用chown 用户名 文件名来修改文件的所有者
文件所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组
用 ls ‐ahl 命令可以看到文件的所有组
也可以使用chgrp 组名 文件名来修改文件所在的组
其它组
除开文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组
二、文件权限:
1、Linux的文件权限一共是10个字符的长度,一般分成四段:
用 ls-l 的命令查看文件如下:
-rwxrw-r-- -1 root root 1213 Feb 2 09:39 abc
(1)第一段就是第一位(首字符),表示文件类型:
- 表示普通文件;d 表示目录;p 表示管道文件;l 表示链接文件;b 表示块文件
后面9位每三位分成一段
第二段表示文件拥有者(所有者)即属主的权限(rwx)
第三段表示文件拥有者所在组即属组的权限(rw-)
第四段表示其他用户的权限(r--)
(2)-1表示文件的链接数
(3)root 表示文件的拥有者即属主
(4)root 表示文件拥有组即属组
(5)1213 表示文件大小(字节)
(6) Feb 2 09:39 表示最后修改日期
(7)abc表示文件名
2、修改文件权限的命令 chmod
chmod 改变文件或目录的权限
只有文件的拥有者和root用户才能改变文件的权限
chmod 755 abc:赋予abc权限rwxr-xr-x
chmod u=rwx,g=rx,o=rx abc:同上u=用户权限,g=组权限,o=不同组其他用户权限
chmod u-x,g+w abc:给abc去除用户执行的权限,增加组写的权限
chmod a+r abc:给所有用户添加读的权限
(1)利用符号类型改变文件权限
用g 、u、 o来分别表示组,用户,其他用户
a表示all
u +(加入) r
chmod g -(除去) w 文件或目录
o =(设置) x
a
X(大写) 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加X
属性。
【x的大小写主要是看其他用户对此文件是否需要可执行权限】
例:假设我们要设置一个文件exo属性为-rwxr-xr-x,应该怎么做?
分析:u(user):具有可读可写可执行的权限
g(group)和o(other):具有可读可执行的权限
因此:
改变所有者(chown)和用户组(chgrp)命令
# chown u=rxw ,go=rx exo
# ls -al exo
-rwxr-xr-x 1 root root ..........
(2) 权限用数字来表示 (r,w,x都可以用数字来表示)
r4 w 2 x 1
rwx7 rw_6 r_x5 r__4 _wx3 _w_2 __x1 ___0
(3)chown -R
-R 递归修改子目录中的文件,即目标目录下的所有文件及其子文件,和其下的所有文件
例:
# chown user1 file1 ---->将file1修改为用户user1所有
# chown -R user1 dir2 ----->将目录dir2及其子目录下的所有文件都修改为用户user1所有
权限题目相关命令参考:
- groupadd 组名,在linux中添加组
- vi /etc/group,查看linux中所有组信息,可以看可以编辑
- cat /etc/group,查看linux中所有组信息,只可以看不可以编辑
- useradd ‐g 组名 用户名,创建用户的同时指定将该用户分配到哪个组下
- vi /etc/passwd,查看linux中所有用户信息,可以看可以编辑
- cat /etc/passwd,查看linux中所有用户信息,只可以看不可以编辑
-------------------------------------------------------------------------------------------------------------------
三、特殊权限位setuid、setguid、stick bit:
1、特殊权限位s(setuid、setgid)例:查看/usr/bin/passwd 与/etc/passwd文件的权限
[root@MyLinux ~]# ls -l /usr/bin/passwd /etc/passwd
-rw-r--r-- 1 root root 1549 08-19 13:54 /etc/passwd
-rwsr-xr-x 1 root root 22984 2007-01-07 /usr/bin/passwd
/etc/passwd文件存放的各个用户的账号与密码信息,/usr/bin/passwd是执行修改和查看此文件的程序,但从权限上看
,/etc/passwd仅有root权限的写(w)权,可实际上每个用户都可以通过/usr/bin/passwd命令去修改这个文件,于是这
里就涉及了linux里的特殊权限setuid,正如-rwsr-xr-x中的s
setuid就是:让普通用户拥有可以执行“只有root权限才能执行”的特殊权
限,setgid同理指“组”
作为普通用户是没有权限修改/etc/passwd文件的,但给/usr/bin/passwd以setuid权限后,普通用户就可以通过执行
passwd命令,临时的拥有root权限,去修改/etc/passwd文件了
总结:
一个可执行文件拥有s位时,当其他用户来执行这个可执行文件的话,使用的权限是此可执行文件的属主或者
属组的权限 【只针对前三位和中间三位】
例:
[root@li ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 17 2012 /usr/bin/passwd
[root@li ~]# ll /etc/shadow
----------. 1 root root 1434 Jul 17 09:27 /etc/shadow
普通用户修改密码使用passwd能改自己的密码,但是密码是存放在/etc/shadow里,
也就是说普通用户对/etc/shadow没有写的权限,但passwd可执行文件的前三位有s位,
所以普通在调用passswd时是用的root的权限
2、特殊权限位-粘贴位t(stick bit)
例:查看/tmp的权限:
[root@MyLinux ~]# ls -dl /tmp
drwxrwxrwt 6 root root 4096 08-22 11:37 /tmp
tmp目录是所有用户共有的临时文件夹,所有用户都拥有读写权限,这就必然出现一个问题,A用户在/tmp里创建
了文件a.file,此时B用户看了不爽,在/tmp里把它给删了(因为拥有读写权限),那肯定是不行的。实际上是不会发生
这种情况,因为有特殊权限stick bit(粘贴位)权限,正如drwxrwxrwt中的最后一个t
stick bit (粘贴位)就是:除非目录的属主和root用户有权限删除它,除此之
外其它用户不能删除和修改这个目录。
也就是说,在/tmp目录中,只有文件的拥有者和root才能对其进行修改和删除,其他用户则不行,避免了上面所说
的问题产生。用途一般是把一个文件夹的的权限都打开,然后来共享文件,象/tmp目录一样。
***************************************************************************
特权位s和粘贴位t的记忆点:
特权位s主要是让普通用户临时执行属主或者属组的权限,或者root的权限
粘贴位t主要是在同一个目录下除了属主和root用户外,其他任何人都不能删除和修
改该目录下的所有文件
***************************************************************************
3、如何设置以上权限位:
setuid:chmod u+s xxx
setgid: chmod g+s xxx
stick bit : chmod o+t xxx
suid的二进制串为:100,换算十进制为:4
guid的二进制串为:010,换算:2
stick bit 二进制串:001,换算:1
于是也可以这样设:setuid:chmod 4755 xxx
setgid:chmod 2755 xxx
stick bit:chmod 1755 xxx
在一些文件设置了特殊权限后,字母不是小写的s或者t,而是大写的S和T,那代表此文件的特殊权限没有生效,
是因为你尚未给它对应用户的x权限
用数字表示时: 前三位上加s 4
中间三位加s 2
后三位加t 1