一、Linux 文件权限

      Linux 里面一切皆文件,一个目录要同时具有读权限和执行权限才可以打开,而一个目录要有写权限才允许在其中创建其它文件。

1. 文件权限位说明

# mkdir /etc/dbfile

# chmod 754 /etc/dbfile

# ll -d /etc/dbfile    

drwxr-xr-- 2 root root 6 Mar  3 16:08 /etc/dbfile

通过dbfile文件,我们分析各个字段所代表的含义

文件的权限描述共10个字符

  • 第一个字符有三个值,用以表示文件类型, (-)表示文件, (d)表示目录, (l)表示链接
  • 剩余9个字符每3个一组(rwx), r表示拥有读取权限, w表示拥有写权限, x表示拥有执行权限
  • 第一组rwx: 表示文件的所有者的权限是可读,可写,可执行
  • 第二组r-x: 表示与文件所有者同一个用户组的用户的权限是可读,不可写,可执行
  • 第三组r-x-: 表示与文件所有者不同用户组的用户的权限是只有读权限
  • 用数字表示的时候,可以简单的用r=4, w=2, x= 1, 表示 rwx= 4+2+1 =7
  • 接下来的 2 表示连接的文件数
  • root 表示文件的所属用户
  • root 表示用户所在的用户组
  • 6表示文件的大小
  • Mar  3 16:08 表示文件的最后修改时间
  • /etc/dbfile 表示文件名

对于目录来讲,拥有r权限,就可以使用ls命令获取其下的所有文件列表,拥有w可修改此目录下的文件列表,即创建或删除文件,拥有x权限,就可以cd至此目录当中,并且可以使用ls  -l  来获取所有文件的详细属性信息。

对于文件而言,拥有r权限,可以打开文件,拥有w权限,可以修改文件内容,拥有x权限,是可以将此文件运行为进程,就是对于程序文件,有了相应的执行权限。

权限组合机制

---    表示无读写执行权限        数字表示法为   0

--x    表示只有执行权限                                    1

-w-    表示只有写权限                                       2

-wx   表示只有写和执行权限                             3

r--     表示只有读权限                                       4

r-x     表示只有读权限和执行权限                     5

rw-    表示只有读和写权限                                6

rwx    表示读写执行权限都有                           7

用例:

将下列文件权限用数字表示法写出来

rw-rw-r--     ,rwxrwxr-x         ,rwxr-x---    ,rwxr-xr-x

664                775                         750                 755




二、权限管理类命令

1、chmod  控制用户对文件的权限的命令,命令使用方式有如下三种方式

chmod [OPTION]... MODE[,MODE]... FILE...

chmod [OPTION]... OCTAL-MODE FILE...

chmod [OPTION]... --reference=RFILE FILE...

Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。

首先我们先讲解第一种命令使用方式  chmod [OPTION]... MODE[,MODE]... FILE...

MODE参数说明,mode : 权限设定字串,多个MODE格式可以使用逗号进行分割,格式如下 :

[ugoa...][[+-=][rwxX]...][,...]

其中:

  • u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。u= ,  g=  ,  o=
  • + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
  • r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

用例:

(1)修改music目录下的daolang文件的属组权限为读写

# mkdir /tmp/music

# touch /tmp/music/{daolang,liudehua,bingyu,qinghuaci,qianzhihe,meirenyu}

# ll /tmp/music

# chmod g=rw  /tmp/music/daolang

# ll /tmp/music/daolang

-rw-rw-r-- 1 root root 0 Mar  4 10:14 /tmp/music/daolang

           

(2)修改daolang文件的属主和属组的权限都是读写权限

# chmod ug=rw  daolang

# ll ./daolang

-rw-rw-r-- 1 root root 0 Mar  4 10:14 ./daolang

(3)修改meirenyu文件的属主为读写执行,属组为读写,其它人无权限

# ll meirenyu

-rw-r--r-- 1 root root 0 Mar  4 10:14 meirenyu

# chmod u=rwx,g=rw,o=  meirenyu

# ll meirenyu

-rwxrw---- 1 root root 0 Mar  4 10:14 meirenyu

(4)去除meirenyu文件的属主的执行权限

# chmod u-x meirenyu

# ll meirenyu

-rw-rw---- 1 root root 0 Mar  4 10:14 meirenyu

(5)对于meirenyu文件,增加其它用户对它的读权限

# chmod o+r  meirenyu

# ll meirenyu        

-rw-rw-r-- 1 root root 0 Mar  4 10:14 meirenyu

(6)对于bingyu文件,增加所有者和属组用户对它的执行权限

# ll bingyu

-rw-r--r-- 1 root root 0 Mar  4 10:14 bingyu

# chmod ug+x bingyu

# ll bingyu

-rwxr-xr-- 1 root root 0 Mar  4 10:14 bingyu

(7)对于bingyu文件,消除属组用户的写和执行权限

# chmod 777 bingyu

# ll bingyu

-rwxrwxrwx 1 root root 0 Mar  4 10:14 bingyu

# chmod g-wx  bingyu

# ll bingyu

-rwxr--rwx 1 root root 0 Mar  4 10:14 bingyu

(8)对于bingyu文件,首先让所有用户只有读权限,然后让所有用户都有写权限

# chmod a=r  bingyu

# ll bingyu

-r--r--r-- 1 root root 0 Mar  4 10:14 bingyu

# chmod a+w bingyu

# ll bingyu

-rw-rw-rw- 1 root root 0 Mar  4 10:14 bingyu

(9)对于bingyu文件,首先让所有者拥有执行权限,属组消除写权限

# chmod u+x,g-w  bingyu

# ll bingyu

-rwxr--r-- 1 root root 0 Mar  4 10:14 bingyu

其次我们讲解第二种命令使用方式   chmod [OPTION]... OCTAL-MODE FILE...,八进制赋权方式

用例:

(1)对于bingyu文件,让其文件权限变为775,也就是所有者,可以读写执行,属组可以读写执行,其他人只能读和执行

# chmod 775 bingyu

# ll bingyu

-rwxrwxr-x 1 root root 0 Mar  4 10:14 bingyu

最后我们讲解第三种chmod的使用方式   chmod [OPTION]... --reference=RFILE FILE...,就是参考B文件的属性权限,让A也拥有此类权限。

用例:

(1)将/tmp/music/qinghuaci文件的权限设置为与  root用户目录下anaconda-ks.cfg文件权限一致,其权限为600

## ll anaconda-ks.cfg

-rw-------. 1 root root 1251 Dec 16  2019 anaconda-ks.cfg

# ll  /tmp/music/qinghuaci

-rw-r--r-- 1 root root 0 Mar  4 10:14 /tmp/music/qinghuaci

# chmod --reference=./anaconda-ks.cfg /tmp/music/qinghuaci

# ll  /tmp/music/qinghuaci                                

-rw------- 1 root root 0 Mar  4 10:14 /tmp/music/qinghuaci

chmod的选项有-R,作用是如果目标文件是一个目录时,递归地修改目录及目录下文件的权限,此选项,有可能导致目录下文件具有了执行权限,因此不建议使用,除非目录为空,和rm  -rf  这样的删除命令有相同的危险性

用例

(1)首先将/etc/skel/目录拷贝到tmp目录下,确认目录skel的权限,再查看skel目录下文件的权限

# cp -r /etc/skel/  /tmp

# ll  /tmp

total 4

-rw-r--r--  1 root      root       85 Mar  4 10:11 a.txt

drwx------. 2 mapleleaf mapleleaf  62 Feb 24 15:36 mapleleaf

drwxr-xr-x  2 root      root      101 Mar  4 10:14 music

drwxr-xr-x. 2 root      root       19 Feb 24 16:13 pear

drwxr-xr-x  2 root      root       62 Mar  4 14:02 skel

# ll -a /tmp/skel/

//可以看到目录下文件的所有者不具备执行权限

total 12

drwxr-xr-x   2 root root  62 Mar  4 14:02 .

drwxrwxrwt. 11 root root 160 Mar  4 14:02 ..

-rw-r--r--   1 root root  18 Mar  4 14:02 .bash_logout

-rw-r--r--   1 root root 193 Mar  4 14:02 .bash_profile

-rw-r--r--   1 root root 231 Mar  4 14:02 .bashrc

# chmod -R 700 /tmp/skel/

//将skel目录及目录下文件的权限设置为700

# ll -a /tmp/skel/

//目录下的文件的所有者具备了执行权限,比较危险

total 12

drwx------   2 root root  62 Mar  4 14:02 .

drwxrwxrwt. 11 root root 160 Mar  4 14:02 ..

-rwx------   1 root root  18 Mar  4 14:02 .bash_logout

-rwx------   1 root root 193 Mar  4 14:02 .bash_profile

-rwx------   1 root root 231 Mar  4 14:02 .bashrc

(2)删除/tmp/skel/目录,然后拷贝/etc/skel/目录至 /tmp/skel/  ,然后设置属组和其它所有人对/tmp/skel 文件无任何权限

# rm -rf /tmp/skel/

# cp -r /etc/skel/  /tmp

# ll -a /tmp/skel/

total 12

drwxr-xr-x   2 root root  62 Mar  4 14:29 .

drwxrwxrwt. 11 root root 160 Mar  4 14:29 ..

-rw-r--r--   1 root root  18 Mar  4 14:29 .bash_logout

-rw-r--r--   1 root root 193 Mar  4 14:29 .bash_profile

-rw-r--r--   1 root root 231 Mar  4 14:29 .bashrc

# chmod -R go= /tmp/skel/

# ll -a /tmp/skel/

total 12

drwx------   2 root root  62 Mar  4 14:29 .

drwxrwxrwt. 11 root root 160 Mar  4 14:29 ..

//上一级目录的权限

-rw-------   1 root root  18 Mar  4 14:29 .bash_logout

-rw-------   1 root root 193 Mar  4 14:29 .bash_profile

-rw-------   1 root root 231 Mar  4 14:29 .bashrc

(3)让/tmp/skel/  目录及目录下的文件,属组的权限设置为可读

# chmod -R g+r /tmp/skel/

# ll -a /tmp/skel/

total 12

drwxr-----   2 root root  62 Mar  4 14:29 .

//当前目录,属组权限已经变为只读

drwxrwxrwt. 11 root root 160 Mar  4 14:29 ..

-rw-r-----   1 root root  18 Mar  4 14:29 .bash_logout

-rw-r-----   1 root root 193 Mar  4 14:29 .bash_profile

-rw-r-----   1 root root 231 Mar  4 14:29 .bashrc




三、文件所有者所属组管理命令chown  chgrp

3.1、chown  用于设置文件所有者和文件关联组的命令,命令使用方式有如下2种方式

chown [OPTION]... [OWNER][:[GROUP]] FILE...

chown [OPTION]... --reference=RFILE FILE...

选项:

  • -R : 处理指定目录以及其子目录下的所有文件

用例:

1、修改/tmp/music/目录及其目录下的文件的属主为mapleleaf

# ll -a /tmp/music

total 4

drwxr-xr-x   2 root root  101 Mar  4 10:14 .

drwxrwxrwt. 13 root root 4096 Mar  5 09:48 ..

-rwxrwxr-x   1 root root    0 Mar  4 10:14 bingyu

-rw-rw-r--   1 root root    0 Mar  4 10:14 daolang

-rw-r--r--   1 root root    0 Mar  4 10:14 liudehua

-rw-rw-r--   1 root root    0 Mar  4 10:14 meirenyu

-rw-r--r--   1 root root    0 Mar  4 10:14 qianzhihe

-rw-------   1 root root    0 Mar  4 10:14 qinghuaci

# chown -R mapleleaf /tmp/music

# ll -a /tmp/music

total 4

drwxr-xr-x   2 mapleleaf root  101 Mar  4 10:14 .

drwxrwxrwt. 13 root      root 4096 Mar  5 09:48 ..

-rwxrwxr-x   1 mapleleaf root    0 Mar  4 10:14 bingyu

-rw-rw-r--   1 mapleleaf root    0 Mar  4 10:14 daolang

-rw-r--r--   1 mapleleaf root    0 Mar  4 10:14 liudehua

-rw-rw-r--   1 mapleleaf root    0 Mar  4 10:14 meirenyu

-rw-r--r--   1 mapleleaf root    0 Mar  4 10:14 qianzhihe

-rw-------   1 mapleleaf root    0 Mar  4 10:14 qinghuaci

2、修改/tmp/music/目录及其目录下的文件的属主为orange,属组为pork

# chown -R -v orange:plant /tmp/music

# ll -a /tmp/music

total 4

drwxr-xr-x   2 orange plant  101 Mar  4 10:14 .

drwxrwxrwt. 13 root   root  4096 Mar  5 09:48 ..

-rwxrwxr-x   1 orange plant    0 Mar  4 10:14 bingyu

-rw-rw-r--   1 orange plant    0 Mar  4 10:14 daolang

-rw-r--r--   1 orange plant    0 Mar  4 10:14 liudehua

-rw-rw-r--   1 orange plant    0 Mar  4 10:14 meirenyu

-rw-r--r--   1 orange plant    0 Mar  4 10:14 qianzhihe

-rw-------   1 orange plant    0 Mar  4 10:14 qinghuaci

3、修改/tmp/music/目录及其目录下的文件的属主为root,属组为root

# chown -R -v root.root  /tmp/music

# ll -a /tmp/music

total 4

drwxr-xr-x   2 root root  101 Mar  4 10:14 .

drwxrwxrwt. 13 root root 4096 Mar  5 09:48 ..

-rwxrwxr-x   1 root root    0 Mar  4 10:14 bingyu

-rw-rw-r--   1 root root    0 Mar  4 10:14 daolang

...

参考B文件的文件所有者和关联组,修改A文件的相关属性

chown [OPTION]... --reference=RFILE FILE...

4、参考/mp/video文件所有者和所在组,设置/tmp/music具有相同属性

# su - centos

$ touch /tmp/video

cat > /tmp/video   <<EOF

fushanxing

2012

fuchouzhelianmeng

jisufeiche

suduyujiqing

gesila

yitiaogoudeshiming

xman

zhuluoji

heibao

duye

EOF

$ su - root

# ll /tmp/video

-rw-rw-r-- 1 centos centos 110 Mar  8 10:28 /tmp/video

# ll -a /tmp/music

total 0

drwxr-xr-x  2 root root 101 Mar  4 10:14 .

drwxrwxrwt. 9 root root 144 Mar  8 10:28 ..

...

# chown -R --reference=/tmp/video  /tmp/music

# ll -a /tmp/music                          

total 0

drwxr-xr-x  2 centos centos 101 Mar  4 10:14 .

drwxrwxrwt. 9 root   root   144 Mar  8 10:28 ..

-rwxrwxr-x  1 centos centos   0 Mar  4 10:14 bingyu

-rw-rw-r--  1 centos centos   0 Mar  4 10:14 daolang

...

3.2、chgrp  用于变更文件或目录的所属群组,命令使用方式有如下2种方式

chgrp [OPTION]... GROUP FILE...

chgrp [OPTION]... --reference=RFILE FILE...

用例:

1、修改/tmp/music/daolang文件的属组为root

# ll /tmp/music/daolang

-rw-rw-r-- 1 centos centos 0 Mar  4 10:14 /tmp/music/daolang

# chgrp root  /tmp/music/daolang

# ll /tmp/music/daolang

-rw-rw-r-- 1 centos root 0 Mar  4 10:14 /tmp/music/daolang

2、修改/tmp/music/daolang文件的属组,设置文件bingyu的属组也为root

# ll /tmp/music/

total 0

-rwxrwxr-x 1 centos centos 0 Mar  4 10:14 bingyu

-rw-rw-r-- 1 centos root   0 Mar  4 10:14 daolang

-rw-r--r-- 1 centos centos 0 Mar  4 10:14 liudehua

---

# chgrp --reference=/tmp/music/daolang  /tmp/music/bingyu

# ll /tmp/music/bingyu

-rwxrwxr-x 1 centos root 0 Mar  4 10:14 /tmp/music/bingyu

实验

centos组的用户对/tmp/music拥有写权限,对目录下的文件无写权限,切换至以centos为附加组的docker用户。使用docker用户对文件执行修改,删除

# chmod g+w /tmp/music

# ll -a /tmp/music

# chown  centos:centos /tmp/music/qianzhihe

# useradd -G centos docker

//创建一个附加组为centos的用户docker

# su - docker

$ echo abc >>/tmp/music/qianzhihe

$ rm /tmp/music/qianzhihe

3.3、Linux umask命令指定在建立文件时预设的权限掩码

查看系统的默认umask

[root@node1 ~]# umask

0022

系统默认创建的文件的权限是644

# ll  /tmp/music/feiwu

-rw-r--r-- 1 root root 0 Mar  8 16:23 /tmp/music/feiwu

系统默认创建的目录的权限是755

[root@node1 ~]# ll -d /tmp/music/youyouqiu

drwxr-xr-x 2 root root 6 Mar  8 16:24 /tmp/music/youyouqiu

当然可以使用umask  023,命令去修改当前的umask值,但是此设置仅对当前shell有效




4、作业

[1]创建一个系统用户,附加组为kvm,不指定其家目录,且shell为/sbin/nologin,尝试root切换至此用户,查看其命令提示符

# useradd -r -G  kvm  -M yangmei

# usermod -s /sbin/nologin yangmei

# su - yangmei

//无法登录杨梅用户

[2]新建GID为3400的组frog,新建用户grass,要求其家目录为/users/grass。密码同用户名

#groupadd  -g  3400 frog  

# mkdir /users

#useradd -d  /users/grass grass

#echo 'grass'  | passwd --stdin grass

[3]新建用户cow,其家目录为/users/cow。密码同用户名

#useradd -d  /users/cow   cow

#echo 'cow'  | passwd --stdin cow

[4]新建用户milk,其家目录为/users/milk,删除milk用户,但是保留其家目录

#useradd -d  /users/milk  milk

#userdel milk

[5]为用户grass和cow新增附加组animals

#groupadd animals

#usermod   -a   -G  animals   grass

#usermod   -a   -G  animals   cow

[6]复制目录/var/log至/tmp/目录,修改/tmp/log/及其内部所有文件的属组为animals,并让属组用户对目录本身拥有写权限

# cp -r /var/log/  /tmp/

# chown -R  :animals /tmp/log/

# chmod -R g+w /tmp/log/

# ll -a /tmp/log/




5、install命令介绍

      install 作用是安装或升级软件或备份数据,它的使用权限是所有用户。install命令和cp命令类似,都可以将文件/目录拷贝到指定的地点。但是,install允许你控制目标文件的属性。install通常用于程序的makefile,使用它来将程序拷贝到目标(安装)目录。

有4种使用格式

  1. install [OPTION]… [-T] SOURCE DEST                 复制单文件,到目标文件
  2. install [OPTION]… SOURCE… DIRECTORY        复制多个文件,到指定目录
  3. install [OPTION]… -t DIRECTORY SOURCE…     如果给出了-t选项,那么install将使用SOURCE的名称,将每个SOURCE文件复制到指定的目录
  1. install [OPTION]… -d DIRECTORY…                     创建空目录

选项

  • --backup[=CONTROL]:为每个已存在的目的地文件进行备份。
  • -b:类似 --backup,但不接受任何参数。
  • -c:(此选项不作处理)。
  • -d,--directory:所有参数都作为目录处理,而且会创建指定目录的所有主目录。
  • -D:创建<目的地>前的所有主目录,然后将<来源>复制至 <目的地>;在第一种使用格式中有用。
  • -g,--group=组:自行设定所属组,而不是进程目前的所属组。
  • -m,--mode=模式:自行设定权限模式 (像chmod),而不是rwxr-xr-x。
  • -o,--owner=所有者:自行设定所有者 (只适用于超级用户)。
  • -p,--preserve-timestamps:以<来源>文件的访问/修改时间作为相应的目的地文件的时间属性。
  • -s,--strip:用strip命令删除symbol table,只适用于第一及第二种使用格式。
  • -S,--suffix=后缀:自行指定备份文件的<后缀>。
  • -v,--verbose:处理每个文件/目录时印出名称。
  • --help:显示此帮助信息并离开。
  • --version:显示版本信息并离开。

用例:

5.1、复制/tmp/cars下的 Mercedes-Benz  到/tmp/music/

# mkdir /tmp/cars

# touch /tmp/cars/{Mercedes-Benz,BMW,audi,Cadillac}

# touch /tmp/cars/{jinbei,xiandai,xuefulai,wuling,huangguan,ruizhi}

# install /tmp/cars/Mercedes-Benz /tmp/music/

# ll /tmp/music/Mercedes-Benz

-rwxr-xr-x 1 root root 0 Mar  9 15:44 /tmp/music/Mercedes-Benz

//install  复制文件,会导致文件属主拥有了执行权限,一定要注意

5.2、复制/tmp/cars下的 Mercedes-Benz  到/tmp/music/,设定文件权限为644

# install     -m=644  /tmp/cars/Mercedes-Benz /tmp/music/  

# ll /tmp/music/Mercedes-Benz

-rw-r--r-- 1 root root 0 Mar  9 15:47 /tmp/music/Mercedes-Benz

5.3、复制/tmp/cars下的 Mercedes-Benz  到/tmp/music/,设定文件权限为644,属主为centos,属组为plant

# install   -o centos -g plant  -m=644  /tmp/cars/Mercedes-Benz /tmp/music/

# ll /tmp/music/Mercedes-Benz                                                

-rw-r--r-- 1 centos plant 0 Mar  9 15:50 /tmp/music/Mercedes-Benz

5.4、在/tmp/cars目录下创建目录suv

# install -d /tmp/cars/suv

# ll -d /tmp/cars/suv

drwxr-xr-x 2 root root 6 Mar  9 15:53 /tmp/cars/suv

# touch /tmp/cars/suv/{audiq5l,hafuh6,benzglc,bentiancrv,bmwX5}




6、mktemp命令的使用

创建临时的文件或者目录,使用格式如下

mktemp [OPTION]... [TEMPLATE]

选项:

-d   创建一个临时目录

-u   测试是否可以创建文件或者目录,并非会真执行

用例:

6.1  在/tmp/jiangtai目录产生多个兆维.xxxxxx的随机文件

# install -d  /tmp/jiangtai

# mktemp /tmp/jiangtai/zhaowei.XXXXXX

//多次执行此命令,会产生需要以zhaowei.开头的文件

# ll  /tmp/jiangtai/zhaowei*

-rw------- 1 root root 0 Mar 10 09:57 /tmp/jiangtai/zhaowei.7D5KeT

-rw------- 1 root root 0 Mar 10 09:57 /tmp/jiangtai/zhaowei.9SDyus

-rw------- 1 root root 0 Mar 10 09:57 /tmp/jiangtai/zhaowei.Ahi0Oz

-rw------- 1 root root 0 Mar 10 09:57 /tmp/jiangtai/zhaowei.l7uExm

-rw------- 1 root root 0 Mar 10 09:57 /tmp/jiangtai/zhaowei.SagK9R

-rw------- 1 root root 0 Mar 10 09:57 /tmp/jiangtai/zhaowei.yld1cU

6.2   引入变量的概念,引入命令引用

将随机的文件名保存到变量中,以备后期引用

# lidu=$(mktemp /tmp/jiangtai/lidushuian.XXXXXX)

# echo $lidu

/tmp/jiangtai/lidushuian.1gewNF


更多相关文章

  1. auditd审计系统的user-space组件
  2. rsyslogd
  3. aide监控系统文件
  4. Spark2.x精通:源码剖析BypassMergeSortShuffleWriter具体实现
  5. Spark2.x精通:源码剖析UnsafeShuffleWriter具体实现
  6. OracleRAC日常操作,使用RMAN将数据文件移入ASM
  7. 千万不要在您的系统上运行的那些Linux命令
  8. Weblogic中间件创建文件权限问题解决
  9. 实现多文件上传| MVC与依赖注入的原理

随机推荐

  1. 揭秘 Node.js 底层架构
  2. 详解Node模块加载机制
  3. golang 发送post请求 其body中json对象使
  4. 秘籍:自学后端知识体系
  5. python入门教程12-02 (python语法入门之多
  6. android MediaPlayer深入分析
  7. ITIL 4:服务目录管理
  8. 年末最新整理:阿里、腾讯、字节、华为、百
  9. 消息队列为什么说它像漏斗?
  10. 年底报表做到哭泣?学会Excel融合分析,让你