linux权限管理

一、文件权限

我们以/etc/passwd 文件为例,用ll长列出其属性如下所示

[root@centos6 ~]# ll /etc/passwd
-rw-r--r--. 1 root root 1619 Jan 19 10:39 /etc/passwd

--rw--r--r--:代表文件的权限。

1:代表文件的引用计数

root:代表文件所有者

root:代表文件所属组

1619:代表文件大小

Jan 19 10:39:代表文件创建时间

/etc/passwd:代表文件名


每个文件针对每类访问访问者都定义了三种权限

r:Readabel

w:Writable

x:eXcutable

对于文件来说:

r:可以使用文件查看类工具获取其内容

w:可以修改其内容

x:可以执行此文件

对于目录来说:

r:可以使用ls查看此目录中文件列表

w:可以在此目录中创建,删除文件

x:可以使用ls -l查看此目录中文件列表,可以进入此目录

-:代表没有权限

图片.png

文件类型中

p表示命名管道文件

d表示目录文件

l表示符号连接文件

-表示普通文件

s表示socket文件

c表示字符设备文件

b表示块设备文件

我们这个/etc/passwd权限为-rw-r--r--就是644权限


二、文件属性操作

chown

chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户UID,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。

只有文件主和超级用户才可以便用该命令。

语法

chown(选项)(参数)

选项

-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quite或——silent:不显示错误信息;
-h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件;
-R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
-v或——version:显示指令执行过程;
--dereference:效果和“-h”参数相同;
--help:在线帮助;
--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
--version:显示版本信息。

参数

用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。

实例

将目录/usr/meng及其下面的所有文件、子目录的文件所属人改成 liu:

chown -R liu /usr/meng


chgrp

chgrp命令

chgrp命令用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。

在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。

语法

chgrp(选项)(参数)

选项

-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quiet或——silent:不显示错误信息;
-h或--no-dereference:只对符号连接的文件作修改,而不是该其他任何相关文件;
-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-v或——verbose:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;

参数

组:指定新工作名称;

文件:指定要改变所属组的文件列表。多个文件或者目录之间使用空格隔开。

实例

将/usr/meng及其子目录下的所有文件的用户组改为mengxin

chgrp -R mengxin /usr/meng


chmod


chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。

权限范围的表示法如下:

u User,即文件或目录的拥有者;
g Group,即文件或目录的所属群组;
o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
a All,即全部的用户,包含拥有者,所属群组以及其他用户;
s 特殊功能说明:变更文件或目录的权限。

语法

chmod(选项)(参数)

选项

-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quiet或——silent:不显示错误信息;
-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-v或——verbose:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
<权限范围>+<权限设置>:开启权限范围的文件或目录的该选项权限设置;
<权限范围>-<权限设置>:关闭权限范围的文件或目录的该选项权限设置;
<权限范围>=<权限设置>:指定权限范围的文件或目录的该选项权限设置;

参数

权限模式:指定文件的权限模式;
文件:要改变权限的文件。

知识扩展和实例

Linux用 户分为:拥有者、组群(Group)、其他(other),Linux系统中,预设的情况下,系统中所有的帐号与一般身份使用者,以及root的相关信 息, 都是记录在/etc/passwd文件中。每个人的密码则是记录在/etc/shadow文件下。 此外,所有的组群名称记录在/etc/group内!

我们还拿/etc/passwd文件做来讲解

[root@centos6 ~]# ll /etc/passwd
-rw-r--r--. 1 root root 1619 Jan 19 10:39 /etc/passwd

这里的第一个“-”代表这是个二进制普通文件其他的每三个是一个整体权限如:

rw-:代表的是所属人的权限(rw:读写权限)

r--:代表的是所属组的权限 (r--:只读权限)

r--:代表的是其他人的权限 (r--:只读权限)

示例:

[root@localhost app]#ll file1 
-rw-r--r--. 1 root root 0 Jan 27 17:38 file1
[root@localhost app]#chmod u+x,g+w file1       //给文件所属人加上执行权限,给文件所属组加上写权限
[root@localhost app]#ll file1 
-rwxrw-r--. 1 root root 0 Jan 27 17:38 file1

[root@localhost app]#ll file1 
-rwxrw-r--. 1 root root 0 Jan 27 17:38 file1
[root@localhost app]#chmod u=rwx,g=rwx,o=rw file1   //让文件所属人有全部权限,让文件所属组有全部权限,让其他人对此文件有读写权限
[root@localhost app]#ll file1 
-rwxrwxrw-. 1 root root 0 Jan 27 17:38 file1

[root@localhost app]#ll file1 
-rwxrwxrw-. 1 root root 0 Jan 27 17:38 file1
[root@localhost app]#chmod 400 file1                //用数字方式修改文件权限,让只有文件所属人有读取权限,所属组和其他人对文件没有权限
[root@localhost app]#ll file1 
-r--------. 1 root root 0 Jan 27 17:38 file1

[root@localhost app]#ll file1 
-r--------. 1 root root 0 Jan 27 17:38 file1
[root@localhost app]#chmod u+w file1            //给文件加上权限,这里u+w表示给文件所属人加上写权限,同理g+w表示给所属组叫上写权限,o+w表示给其他人加上些权限
[root@localhost app]#ll file1 
-rw-------. 1 root root 0 Jan 27 17:38 file1
[root@localhost app]#chmod a+w file1              //+w前面不跟参数时默认表示给所属人权限位叫上写权限,a+w表示给所有权限位都加上w权限
[root@localhost app]#ll file1 
-rw--w--w-. 1 root root 0 Jan 27 17:38 file


三、新建文件和目录默认权限


umask

用途

预设权限(权限掩码)

我们知道, 当我们建立一个目录或文件时,它都会带一个默认的权限:

若使用者建立为 '文件' 则预设 '没有可执行 ( x ) 项目', 亦即只有 rw 这两个项目,  用数字表示就是666或字母 –rw-rw-rw-

若使用者建立为 '目录', 则由于 x 与是否可以进入此目录有关, 因此预设为所有权限均开放, 亦即为777 或字母d-rwx-rwx-rwx

umask就与这个默认权限有关. 那么 umask 是在搞什么呢? umask 就是指定 '目前用户在建立档案或目录时候的权限默认值'.

用法

  1. 查看

  我们可以这样查看umask默认值

[root@localhost app]#umask -S    //以字符形式显示
u=rwx,g=rx,o=rx
[root@localhost app]#umask -p    //以数字形式显示(这里我们只看后三位)
umask 0022

要注意的是,umask 的数字指的是该默认值需要减掉的权限

因此,上面的022实际上是去掉了其他用户的写权限,对于文件来说也就是, 实际权限是644即:-rw-r--r-

对于目录来说, 实际是755, 即:-rwxr-xr-x

  2.设置

  我们可以这样对umask值修改

[root@localhost app]#touch file1
[root@localhost app]#ll file1 
-rw-r--r--. 1 root root 0 Jan 27 17:38 file1
[root@localhost app]#umask -p
umask 0022
[root@localhost app]#umask 002                //umask后跟数字可修改
[root@localhost app]#umask -p
umask 0002
[root@localhost app]#touch file2
[root@localhost app]#ll file2
-rw-rw-r--. 1 root root 0 Jan 27 19:16 file2

  umask后面接3个数字就可以设定了.我们可以看到本来创建的文件是默认rw-r--r--权限,但修改完umask值后默认权限就变为rw-rw-r--

  但这种修改umask值的方式只是临时修改,若要长期修改umask的值, 可以把它写进/etc/profile或~/.profile或~/.bash_profile中.


下面我们看几道实例题

1、当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作?

xiaoming对/testdir 目录无执行权限就是对目录/testdir没有x权限,也就意味着xiaoming无法进入/testdir目录

2、当用户xiaoqiang对/testdir 目录无读权限时,意味着无法做哪些操作?

xiaoqing对/testdir 目录无读权限就是对目录/testdir没有r权限,也就意味着xiaoqing无法对/testdir目录下的文件进行列出查看

3、当用户wangcai 对/testdir 目录无写权限时,该目录下的只读文件file1是否可修改和删除?

wangcai对/testdir 目录无写权限就是对目录/testdir没有w权限,也就意味着wangcai无法对/testdir目录下的文件进行修改和删除

4、当用户wangcai 对/testdir 目录有写和执行权限时,该目录下的只读文件file1是否可修改和删除?

wangcai对/testdir 目录有写和执行权限就是对目录/testdir仅有wx权限,也就意味着wangcai可以进入/testdir目录,也可以对目录下的文件进行修改和删除,但这是建立在它对文件本身有w权限,而题目中wangcai对file1文件只有只读权限,所以它无法对file1进行修改和删除。

5、复制/etc/fstab文件到/var/tmp下,设置文件所有者为wangcai读写权限,所属组为sysadmins组有读写权限,其他人无权限

[root@localhost ~]#cp /etc/fstab /var/tmp/
[root@localhost ~]#ll /var/tmp/fstab
-rw-r--r--. 1 root root 541 Jan 27 22:46 /var/tmp/fstab
[root@localhost ~]#chown wangcai.sysadmins /var/tmp/fstab       
[root@localhost ~]#ll /var/tmp/fstab 
-rw-r--r--. 1 wangcai sysadmins 541 Jan 27 22:46 /var/tmp/fstab

6、误删除了用户wangcai的家目录,请重建并恢复该用户家目录及相应的权限属性

[root@localhost home]#ls
alice  basher  nologin  test      tom      xiaoming
bash   lilei   sh       testbash  wangcai
[root@localhost home]#
[root@localhost home]#rm -rf wangcai/                            //删除wangcai家目录
[root@localhost home]#ls
alice  basher  nologin  test      tom
bash   lilei   sh       testbash  xiaoming
[root@localhost home]#mkdir wangcai                             //创建一个叫wangcai的目录
[root@localhost home]#ll 
drwx------.  3 testbash testbash   78 Jan 20 04:18 testbash
drwx------.  5 tom      tom       128 Jan 26 05:30 tom
drwxr-xr-x.  2 root     root        6 Jan 27 23:13 wangcai  //但这个时候我们发现虽然这个目录名字叫wangcai,但它的所属人所属组还都是root,权限也和其他用户家目录不一样
drwx------.  5 xiaoming xiaoming  128 Jan 24 01:24 xiaoming            
[root@localhost home]#chown wangcai.wangcai wangcai/
[root@localhost home]#chmod 700 wangcai/
[root@localhost home]#ll
drwx------.  3 testbash testbash   78 Jan 20 04:18 testbash
drwx------.  5 tom      tom       128 Jan 26 05:30 tom
drwx------.  2 wangcai  wangcai     6 Jan 27 23:13 wangcai //这个时候并没有完,虽然所属人所属组和权限改过来了,但我们仔细看这个目录的大小和其他用户家目录不一样
drwx------.  5 xiaoming xiaoming  128 Jan 24 01:24 xiaoming
[root@localhost home]#cp -r /etc/skel/.[^.]* wangcai/    //每个用户下面都有些配置文件这些是每个用户的一些个性化配置文件,一般都是.开头,/etc/skel/目录下就是模板文件,我们只需把它拷过来就行了
[root@localhost home]#ll
drwx------.  3 testbash testbash   78 Jan 20 04:18 testbash
drwx------.  5 tom      tom       128 Jan 26 05:30 tom
drwx------.  3 wangcai  wangcai    78 Jan 27 23:17 wangcai
drwx------.  5 xiaoming xiaoming  128 Jan 24 01:24 xiaoming

四、特殊权限

suid


suid:set uid 权限,任何一个用户运行一个带此权限的命令时,不是以此用户的身份启动,而是以文件自身的属主访问。 

基本上SUID有这样的限制与功能:

SUID 权限仅对二进位程序(binary program)有效, 不能用在shell script上面;

运行者对于该程序需要具有 x 的可运行权限;

本权限仅在运行该程序的过程中有效 (run-time);

运行者将具有该程序拥有者 (owner) 的权限。

用法

chmod u+s file

这个时候文件权限就变为4xxx

我来给大家操作演示一下

[root@localhost bin]#cp /usr/bin/rm /app/rm1                       //首先,我们复制rm文件到/app取名叫rm1
[root@localhost bin]#cd /app/
[root@localhost app]#touch file1                                    //然后,用root身份创建一个文件file1
[root@localhost app]#ll
total 64
-rw-r--r--. 1 root root     0 Jan 28 00:22 file1
-rwxr-xr-x. 1 root root 62864 Jan 28 00:20 rm1                        //这个时候我们看rm1现在并没有s权限
drwxr-xr-x. 2 root root     6 Jan 27 19:11 test1
[xiaoming@localhost app]$ ./rm1 file1                                 //我们切换到xiaoming用户执行rm1去删除file1
./rm1: remove write-protected regular empty file ‘file1’? y
./rm1: cannot remove ‘file1’: Permission denied
[xiaoming@localhost app]$ ls                            //我们发现并没有成功file1文件依旧存在,因为file1属于root用户,其他人只有r权限不能执行删除操作
file1  rm1  test1
[root@localhost app]#chmod u+s rm1                  //我们切回root身份,给rm1所属人权限上加一个s权限              
[root@localhost app]#ll
total 64
-rw-r--r--. 1 root root     0 Jan 28 00:22 file1
-rwsr-xr-x. 1 root root 62864 Jan 28 00:20 rm1    //这个时候rm1文件所属人权限哪里就多了一个s权限
drwxr-xr-x. 2 root root     6 Jan 27 19:11 test1
[xiaoming@localhost app]$ ./rm1 file1            //我们换回xiaoming身份再去用rm1去删除file1
[xiaoming@localhost app]$ ls
rm1  test1                                      //file1文件没有了,被删除了。这是因为xiaoming执行rm1文件时临时拥有了rm1所属人身份,也就是root身份


取消权限是chmod u-s file

sgid


当对一个可执行的二进制文件作用了sgid权限之后,任何人在执行该文件时临时拥有其所属组的权限。这个和suid用法差不多,只不过是其他用户在执行这个文件时临时拥有问价所属组的身份

用法是

chmod g+s

这里我们着重说下对目录执行会怎样

对于一个目录作用了sgid权限之后,任何人在该目录下创建的文件的所属组与该目录的所属组相同。

同样我也给大家演示下效果

[root@localhost app]#ll
total 0
drwxr-xr-x. 2 root root 6 Jan 27 19:11 test1         //首先,我们用root身份创一个目录test1
[root@localhost app]#chmod a+w test1/               //为了能让普通用户在目录下创建文件,我们给它加上w权限
[root@localhost app]#ll
total 0
drwxrwxrwx. 2 root root 6 Jan 27 19:11 test1
[xiaoming@localhost app]$ cd test1/
[xiaoming@localhost test1]$ touch file1            //我们切换到普通用户上在test1里创建文件file1
[xiaoming@localhost test1]$ ll
total 0
-rw-rw-r--. 1 xiaoming xiaoming 0 Jan 28 00:57 file1        //file1的所属人所属组依旧属于用户本身
[root@localhost app]#chmod g+s test1/                //我们切回root身份给test1目录组权限那里加上s权限
[root@localhost app]#ll
total 0
drwxrwsrwx. 2 root root 19 Jan 28 00:57 test1
[xiaoming@localhost test1]$ touch file2                //我们再换回普通用户身份创建一个file2
[xiaoming@localhost test1]$ ll
total 0
-rw-rw-r--. 1 xiaoming xiaoming 0 Jan 28 00:57 file1
-rw-rw-r--. 1 xiaoming root     0 Jan 28 01:00 file2         //我们发现file2 的所属组那里变为了root

suid其实也能加到目录上,但这样其他用户创建的文件就不再属于创建者本身,所以我们一般都在目录上加sgid 权限

同理取消sgid权限也是chmod g-s dir

Sticky


当对于一个目录作用了sticky权限之后,该目录下的文件仅其文件的所属人,或目录的所属人及root才能删除。

我们通常在目录上设置sticky,在文件上设置没有意义

用法是chmod o+t dir

效果如下

[xiaoming@localhost test1]$ ll
total 0
-rw-rw-r--. 1 xiaoming xiaoming 0 Jan 28 00:57 file1               //我们还在test1下做实验
-rw-rw-r--. 1 xiaoming root     0 Jan 28 01:00 file2
[xiaoming@localhost test1]$ chmod a+w file1                    //我们给file1全部加上w权限
[xiaoming@localhost test1]$ ll
total 0
-rw-rw-rw-. 1 xiaoming xiaoming 0 Jan 28 00:57 file1
-rw-rw-r--. 1 xiaoming root     0 Jan 28 01:00 file2
[xiaoming@localhost test1]$ su tom
Password: 
[tom@localhost test1]$ rm -f file1                 //我们切换到tom用户删除file1
[tom@localhost test1]$ ll
total 0
-rw-rw-r--. 1 xiaoming root 0 Jan 28 01:00 file2        //删除成功
[root@localhost app]#chmod o+t test1/                //我们切回root身份给test1目录加上sticky权限
[tom@localhost test1]$ touch file3                //用tom身份创一个文件test3
[tom@localhost test1]$ ll
total 0
-rw-rw-r--. 1 xiaoming root 0 Jan 28 01:00 file2
-rw-rw-r--. 1 tom      root 0 Jan 28 01:21 file3
[tom@localhost test1]$ chmod a+w file3            //同样给它加上w权限
[tom@localhost test1]$ ll
total 0
-rw-rw-r--. 1 xiaoming root 0 Jan 28 01:00 file2
-rw-rw-rw-. 1 tom      root 0 Jan 28 01:21 file3
[tom@localhost test1]$ su xiaoming                //我们再切回xiaoming身份去删除file3
Password: 
[xiaoming@localhost test1]$ rm -f file3 
rm: cannot remove ‘file3’: Operation not permitted        //删除失败

这些命令都是在文件x权限位添加的,权限位原本有x的,加上特殊权限后,显示为小写,原本无x,显示为大写。


有锁定目录的就有锁定文件的,为了防止因为误操作将重要文件删除,文件使用chattr +a 后任何用户都不能删除(包括root)

文件特定权限:

chattr


用法

    chattr +a 不能删除,不能改名,不能修改,可以追加  chattr -a 解除限制
    chattr +i 不能删除,不能改名,不能修改,不能追加  chattr -i 解除限制
    lsattr 查看权限

示例

[root@localhost test1]#ll
total 0
-rw-rw-r--. 1 xiaoming root 0 Jan 28 01:00 file2
-rw-rw-rw-. 1 tom      root 0 Jan 28 01:21 file3
[root@localhost test1]#chattr +a file2                //给file2加上a权限
[root@localhost test1]#lsattr file2
-----a---------- file2
[root@localhost test1]#rm -f file2                        
rm: cannot remove ‘file2’: Operation not permitted
[root@localhost test1]#mv file2 file4
mv: cannot move ‘file2’ to ‘file4’: Operation not permitted        //使用root身份也不能删除改名
[root@localhost test1]#echo hello >> file2            //可以追加信息
[root@localhost test1]#cat file2
hello
[root@localhost test1]#vim file2
"file2" E212: Can't open file for writing            //无法编辑
[root@localhost test1]#chattr +i file2            //加上i权限
[root@localhost test1]#lsattr file2
----ia---------- file2
[root@localhost test1]#echo hello >> file2
-bash: file2: Permission denied            //无法追加信息
[root@localhost test1]#rm -f file2
rm: cannot remove ‘file2’: Operation not permitted
[root@localhost test1]#mv file2 file4
mv: cannot move ‘file2’ to ‘file4’: Operation not permitted        //无法删除,改名,修改内容
[root@localhost test1]#chattr -i file2            //减去i权限
[root@localhost test1]#lsattr file2
-----a---------- file2
[root@localhost test1]#rm -f file2
rm: cannot remove ‘file2’: Operation not permitted        //因为还有a权限,所以不能删除
[root@localhost test1]#chattr -a file2            //减去a权限
[root@localhost test1]#lsattr file2
---------------- file2
[root@localhost test1]#rm -f file2            //可以删除
[root@localhost test1]#ll
total 0
-rw-rw-rw-. 1 tom root 0 Jan 28 01:21 file3


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章