权限管理:
ls -l:
rwxrwxrwx:
左三位:定义user(owner)的权限
中三位:定义group;
右三位:定义other权限;
进程安全上下文:进程的运行其实是以他的属主属组来运行的。
(进程本身只有属主,就是他的发起者,进程所能访问的资源的权限取决于,发起者对于这个资源的访问权限)
进程对文件的访问权限应用模型:
(1)进程的属主与文件的属主是否相同,如果相同,则应用属主权限;
否则,则检查进程的属主是否属于文件的属组,如果属于,则应用属组权限;
否则,就只能应用other权限;
(举例:
[root@centos6~]# ls -l /etc/issue
-rw-r--r--.1 root root 47 May 19 03:47 /etc/issue
[root@centos6~]# whoami
root
[root@centos6~]#
[root@centos6~]# cat /etc/issue
CentOSrelease 6.8 (Final)
Kernel\r on an \m
[root@centos6~]#
上面的“cat”命令,启动了一个进程时,“cat”现在是一个文件,一个程序命令,当我们cat输入命令一回车就运行成了一个进程,这个进程对这个文件访问时,我们由上面的“ls -l”可以看到“/etc/issue”这个问价的权限为“rw-r--r--”,左三位是属主的,中三位是属组的,右三位是其他用户的,那么“cat”这个进程访问这个文件时,应该以谁的权限进行呢?
首先我们来看发起进程的那个家伙是与这个文件的属主是不是同一个人,如果是则应用属主权限,即左三位。否则再看发起进程的这个人属不属于文件的属组,属于则运行文件的属组权限,再否则,就运行这个文件的其他权限,即右三位。这就是所谓的“访问权限应用模型”)
权限:
r:readable,读
w:writeable,写
x:excuteable,执行
“读写”权限对于文件和目录的意义是不同的:
文件:
r:可获取文件的数据;
w:可修改文件的数据(包括改动内容,和修改内容)
x:可将此文件发起运行为进程;
其实任何一个命令都有执行权限;
我们创建的文件,一般是没有执行权限的,即默认情况下,我们创建文件一般是没有执行权限的。
目录:
r:可使用 “ls”命令获取其下的所有文件列表,但是不能使用 “ls -l”获 取文件的相信信息;(目录其实就是路径映射)
w:可修改此目录下的文件列表;(注意:是修改列表的本身,就是能够删除 此目录下的文件,或者在此目录下创建文件)
x:可cd至此目录中,并且可使用 “ls -l” 来获取多有文件的详细属性信息;
文件权限模型:
分为两类:
一类:mode(权限):rwxrwxrwx
一类:ownership(从属关系):user,group
权限中的“读写执行”位置是固定的
权限组合机制:
---
--x
-w-
-wx
r--
r-x
rw-
rwx
我们很容易发现,上面的三位,要么为“-”,要么就是对应为的权限,即第一位,要么为“-”,要么为“r”,所以我们可以看到这每一位只有两种变化,我们只要使用两种符号来表示,只要有两种就行,那么有两种变化,并且最能表现出他的特性的就是二进制,没有就用0表示,有就用1表示,所以上面的可以用二进制表示为:
000
001
010
011
100
101
110
111
我们还知道三位二进制对应一个八进制,四位二进制,对应一个十六进制,而上面的情况,刚好对应八进制的所有符号,则转化为八进制为:0,1,2,3,4,5,6,7
这就是我们的权限组合机制;
权限管理命令:
chmod命令:改变文件权限
[root@centos6~]# man chmod //查看chmod的命令帮助
格式:(有三种)
chmod [OPTION]... MODE[,MODE]... FILE...
chmod[OPTION]... OCTAL-MODE FILE...
chmod[OPTION]... --reference=RFILE FILE...
三类用户:
u:属主
g:属组
o:其他
a:所有
格式一:
MODE表示法:
赋权表示法:直接操作一类用户的所有权限位,rwx:
u=,g=,o= (三类用户的权限不一样,分别表示,并用逗号隔开)
ug= go= uo= (当有两类用户权限一样时,我们可以合并写)
ugo= 等同于 a=
(举例:
[root@centos6 ~]# cp /etc/fstab ./ //复制fstab文件,到当前目录下来
[root@centos6 ~]# ls
anaconda-ks.cfg Documents install.log Pictures Videos
cacert.pem Downloads install.log.syslog Public
Desktop fstab Music Templates
[root@centos6 ~]#
[root@centos6 ~]# ll fstab
-rw-r--r--. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]# chmod g=rw fstab
[root@centos6 ~]# ll fstab
-rw-rw-r--. 1 root root 899 Oct 19 02:31fstab //发现fstab文件的权限发生了改变
[root@centos6 ~]#
[root@centos6 ~]# chmod ug=r fstab
[root@centos6 ~]# ll fstab
-r--r--r--. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#
[root@centos6 ~]# chmod u=rwx,g=rw,o= fstab //表示属主是读写执行,属组是读写,其他 没有,在写其他没有任何权限时,只写“o=” 即可,后面不要跟内容
[root@centos6 ~]# ll fstab
-rwxrw----. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#)
授权表示法:直接操作一类用户的一个权限位r,w,x:
u+,u-
g+,g-
o+,o-
a+,a-
(举例:
[root@centos6 ~]# ll fstab
-rwxrw----. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]# chmod o+r fstab
[root@centos6 ~]# ll fstab
-rwxrw-r--. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#
[root@centos6 ~]# chmod a+x fstab
[root@centos6 ~]# ll fstab
-rwxrwxr-x. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#
[root@centos6 ~]# chmod ug-x fstab
[root@centos6 ~]# ll fstab
-rw-rw-r-x. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#
[root@centos6 ~]# chmod +x fstab //表示将三类用户全部加上执行权限
[root@centos6 ~]# ll fstab
-r-xrwxr-x. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]# chmod -x fstab
[root@centos6 ~]# ll fstab
-r--rw-r--. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#
[root@centos6 ~]# ll fstab
-r--r--r--. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]# chmod +w fstab
[root@centos6 ~]# ll fstab
-rw-r--r--. 1 root root 899 Oct 19 02:31fstab //+w仅对属主有效,所以有些时候也有异常 状态
[root@centos6 ~]#
[root@centos6 ~]# chmod u+x,g+w fstab //也可以分开写“u+x,g+w”中间用逗号隔开
[root@centos6 ~]# ll fstab
-rwxrw-r--. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#)
格式二:
八进制表示法:
注意:这是要给全;即三类用户都要写,就是,每次写都写三个八进制数
(举例:
[root@centos6 ~]# chmod 660 fstab
[root@centos6 ~]# ll fstab
-rw-rw----. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]# chmod 66 fstab //这就是告诉我们写数字进行给权限的时候,一定要 将写三个八进制数,即三类用户的权限都给到,就算没 有权限就写0
[root@centos6 ~]# ll fstab
----rw-rw-. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#)
格式三:引用型修改
引用一个文件的权限,来修改此文件的权限,使此文件的权限与引用的文件权 限一样
(举例:
[root@centos6 ~]# ls -l /var/log/messages
-rw-------. 1 root root 987411 Oct 19 02:59/var/log/messages
[root@centos6 ~]# ll fstab
----rw-rw-. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]# chmod --reference=/var/log/messages fstab
[root@centos6 ~]# ll fstab
-rw-------. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#)
chmod命令的选项:
--reference
-R:递归
(如果我们改的权限是目录,那么如果使用递归,则修改该目录权限的同时,也修改该目录下的文件的权限,如果改目录的权限时,没有使用递归,则仅表示修改目录的权限)
一般而言,递归修改权限时,通常在授权表示法中比较易用,而对于赋权表示法和后面的八进制表示还有引用型表示法,一般不建议使用递归
因为目录会有执行权限,但是目录中的文件不一定有执行权限;
(举例:
[root@centos6 ~]# cp -r /etc/skel /tmp //复制一个目录要使用“-r”选项
[root@centos6 ~]# cd /tmp
[root@centos6 tmp]# ll skel/ -d //查看目录“skel/”本身的属性
drwxr-xr-x. 4 root root 4096 Oct 19 03:16skel/
[root@centos6 tmp]# chmod 700 skel/ //仅改变目录本身的权限
[root@centos6tmp]# ll skel/ -d
drwx------. 4 root root 4096 Oct 19 03:16skel/
[root@centos6 tmp]# ls -la skel/ //查看目录“skel”下所有文件及子目录的权限
total 28
drwx------. 4 root root 4096 Oct 19 03:16 .
drwxrwxrwt. 23 root root 4096 Oct 19 03:16..
-rw-r--r--. 1 root root 18 Oct 19 03:16.bash_logout
-rw-r--r--. 1 root root 176 Oct 19 03:16.bash_profile
-rw-r--r--. 1 root root 124 Oct 19 03:16.bashrc
drwxr-xr-x. 2 root root 4096 Oct 19 03:16 .gnome2
drwxr-xr-x. 4 root root 4096 Oct 19 03:16 .mozilla
[root@centos6 tmp]# chmod 700 skel/ -R //递归更改目录“skel”权限
[root@centos6 tmp]# ll skel/ -d
drwx------. 4 root root 4096 Oct 19 03:16skel/
[root@centos6 tmp]# ll skel/ -a //发现目录下的文件权限也有执行权限了
total 28
drwx------. 4 root root 4096 Oct 19 03:16 .
drwxrwxrwt. 23 root root 4096 Oct 19 03:16..
-rwx------. 1 root root 18 Oct 19 03:16.bash_logout
-rwx------. 1 root root 176 Oct 19 03:16.bash_profile
-rwx------. 1 root root 124 Oct 19 03:16.bashrc
drwx------. 2 root root 4096 Oct 19 03:16 .gnome2
drwx------. 4 root root 4096 Oct 19 03:16 .mozilla
[root@centos6 tmp]#)
所以赋权表示法,一般不适用递归的。只有授权表示法可以用,并发挥作用。
从属关系管理命令:
chown,chgrp
chown:
格式:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
格式一:更改文件的属主,后面加上冒号一并改文件的属组,冒号也可以用点号来代替
格式二:更改一个文件属主属组,参考另一个文件的属主属组
chown :属组 文件|目录 //是可以这样写的,这表示更改属组
选项:-R ,表示递归修改
(举例:
[root@centos6 tmp]# ll skel/ -d
drwx------. 4 root root 4096 Oct 19 03:16skel/
[root@centos6 tmp]# chown -R docker skel/
chown: invalid user: `docker'
[root@centos6tmp]# useradd docker
[root@centos6 tmp]# passwd docker
Changing password for user docker.
New password:
BAD PASSWORD: it is toosimplistic/systematic
BAD PASSWORD: is too simple
Retype new password: //输入的密码是123456
passwd: all authentication tokens updatedsuccessfully.
[root@centos6 tmp]# chown -R docker skel/
[root@centos6 tmp]# ll skel/ -d
drwx------. 4 docker root 4096 Oct 19 03:16skel/
[root@centos6 tmp]# ls -la skel/ //目录下的文件属组也全为docker
total 28
drwx------. 4 docker root 4096 Oct 19 03:16 .
drwxrwxrwt. 23 root root 4096 Oct 19 03:33 ..
-rwx------. 1 docker root 18 Oct 19 03:16.bash_logout
-rwx------. 1 docker root 176 Oct 19 03:16.bash_profile
-rwx------. 1 docker root 124 Oct 19 03:16.bashrc
drwx------. 2 docker root 4096 Oct 19 03:16 .gnome2
drwx------. 4 docker root 4096 Oct 19 03:16 .mozilla
[root@centos6 tmp]#
[root@centos6 tmp]# chown -R arclinux:mygrp skel/ //中间的冒号也可以改成点号“.”
chown: invalid user: `arclinux:mygrp'
[root@centos6 tmp]# useradd arclinux
[root@centos6 tmp]# useradd mygrp
[root@centos6 tmp]# chown -R arclinux:mygrp skel/
[root@centos6 tmp]# ll -d skel/
drwx------. 4 arclinux mygrp 4096 Oct 1903:16 skel/
[root@centos6 tmp]#
[root@centos6 tmp]# chown -R root.root skel/ //属主属组中间为点号“.”也可以
[root@centos6 tmp]# ll -d skel/
drwx------. 4 root root 4096 Oct 19 03:16skel/
[root@centos6 tmp]# ls -la skel/
total 28
drwx------. 4 root root 4096 Oct 19 03:16 .
drwxrwxrwt. 23 root root 4096 Oct 19 03:33..
-rwx------. 1 root root 18 Oct 19 03:16.bash_logout
-rwx------. 1 root root 176 Oct 19 03:16.bash_profile
-rwx------. 1 root root 124 Oct 19 03:16.bashrc
drwx------. 2 root root 4096 Oct 19 03:16 .gnome2
drwx------. 4 root root 4096 Oct 19 03:16 .mozilla
[root@centos6 tmp]#)
chgrp: 只能用来更改属组
格式:
chgrp[OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
注意:仅管理员可修改文件的属主和属组;
思考:
用户对目录有写权限,但对目录下的文件没有写权限时,能否修改此文件内容?能否删除此文件?
解:
前者一定不能修改文件内容,后者答案是一定能删除文件
一个用户对于一个文件没有写权限,未必就不能删除,但是他一定不能往文件中加东西;
(举例验证:
分析,使用一个用户,对某个目录有写权限,但是对目录下的文件没有写权限,我们可以这样做,
第一步:先复制一个文夹,并且这个文件夹内有文件,一个新的文件夹下,分别查看实验用户和目录的属组,然后将该用户和目录加入到这统一的属组;
第二步:我们将这个对这个目录的属组增加写权限,那么这个用户就对这个目录有写权限了
第三步:我们将改目录下某个文件的设置为,只有属主有写权限,然后用该用户向文件写内 容,添加不成功,就表示不能写,
第四步:执行删除该文件,如果能删除,则表示,用户对文件没有写权限,但是照样能删除 该文件
举例演示:
[root@centos6 testdir]# id dong
uid=500(dong) gid=500(dong)groups=500(dong),503(mygrp)
[root@centos6 testdir]# mkdir mytest
[root@centos6 testdir]# ls
lost+found mytest
[root@centos6 testdir]# cp /etc/fstab /testdir/mytest/
[root@centos6 testdir]# ls
lost+found mytest
[root@centos6testdir]# chmod g+wx mytest/
[root@centos6 testdir]# ll -d mytest/
drwxrwxr-x. 2 root root 4096 Oct 21 03:37 mytest/
[root@centos6 testdir]# chown :mygrp mytest/
[root@centos6 testdir]# ll -d mytest/
drwxrwxr-x. 2 root mygrp 4096 Oct 21 03:37 mytest/
[root@centos6 testdir]# cd mytest/ //用户对该目录有执行权限,才能切换进这个目录
[root@centos6 mytest]# ls
fstab
[root@centos6 mytest]# ll fstab
-rw-r--r--. 1 root root 899 Oct 21 03:37fstab
[root@centos6 mytest]# su -dng
su: invalid option -- 'd'
Try `su --help' for more information.
[root@centos6 mytest]# su - dong
[dong@centos6 ~]$ cd /testdir/mytest/
[dong@centos6 mytest]$ ls
fstab
[dong@centos6 mytest]$ exit
logout
[root@centos6 mytest]# ls
fstab
[root@centos6 mytest]# echo "afsdaf" >> fstab
[root@centos6 mytest]# su - dong
[dong@centos6 ~]$ cd /testdir/mytest/
[dong@centos6 mytest]$ ls
fstab
[dong@centos6 mytest]$ echo"sadfafd" >> fstab
-bash: fstab: Permission denied
[dong@centos6 mytest]$ rm -f fstab
[dong@centos6 mytest]$ ls
[dong@centos6 mytest]$
)
思考:
我们是用普通用户和管理员用户,分别在自己的家目录下创建一个文件,然后查看其文件的权限:
[root@centos6 ~]# touch test1
[root@centos6 ~]# ll test1
-rw-r--r--. 1 root root 0 Oct 21 17:17test1 //文件的权限为644
[root@centos6 ~]# su - dong
[dong@centos6 ~]$ touch test2
[dong@centos6 ~]$ ll test2
-rw-rw-r--. 1 dong dong 0 Oct 21 17:18test2 //文件的权限为664
[dong@centos6 ~]$
上面的两个用户为什么创建的文件的权限还不一样呢?
这就涉及到“umask”的概念了
umask:
文件权限的反向掩码,遮罩码;
(什么是反向掩码,或者遮罩码?
为了避免用户创建出来的目录自动是777,创建出来的文件也是777,这样就会造成任何用户都能写别人的文件,管理别人的文件,这样权限的设置就没有任何意义,我们知道777是所有文件应该有的权限,但是为什么创建出来的文件的权限是664,或者644?这是因为我们设置了反向掩码,导致用户创建出来的文件,自动或者默认就不会让其他人随意操作了,)
反向掩码的用法:
反向掩码其实也是一个权限位,他只不过能实现创建文件时用:
文件:
666-umask 来得到文件的默认权限。
目录:
777-umask 来得到目录的默认权限。
那为什么上面二者一个用666,一个用777,去减呢?
解:我们之前说过,文件默认情况下不具有执行权限,所以文件用666去减,表示文件默认不能拥有执行权限;如果减得的结果中有执行权限,则需要将其加1但是对于目录来讲就没有这一说了。
但是还有一个问题,如果umask=023,则666-023=643,则可知,对于文件来讲,如果权限是643,这个“3”就表示这个文件的其他用户对文件有写和执行的权限。那么这样对于文件来讲是不被允许,即,如果用666还是777去减,得到的权限中有执行权限,则将其加1,所以就得到了644,也就是我们平时创建文件时,文件的默认权限就是“644”
umask命令:
umask:查看当前umask
[root@centos6 ~]# umask
0022
[root@centos6 ~]#
umask MASK:设置umask;
注意:我们在命令行设置的内容,是仅对当前shell进程有效,
练习:完成以下任务
1.新建系统组mariadb,新建系统用户mariadb,属于mariadb组,要求其没有家目录,且shell为/sbin/nologin;尝试root切换至用户,查看其命令提示符。
2.新建GID为5000的组mageedu,新建用户gentoo,要求其家目录为/users/gentoo,密码同用户名;
3.新建用户fedora 。其家目录为/users/fedora,密码同用户名;
4.新建用户www,其家目录为/users/www,删除www用户,但是保留其家目录
5.为用户gentoo和fedora 新增附加组mageedu;
6.复制目录/var/log/至/tmp/目录,修改/tmp/log及其内部的所有文件的属组为mageedu,并让属组对目录本身拥有写权限;
install命令:
install - copy files and set attributes(翻译:复制文件和设置属性)
格式:
单源复制:
install [OPTION]... [-T] SOURCE DEST //复制单个文件为目标文件
多源复制:
install [OPTION]... SOURCE... DIRECTORY //复制多,到目标目录
install [OPTION]... -t DIRECTORY SOURCE... //多源复制,到目录
创建目录:
install [OPTION]... -d DIRECTORY... //创建空目录
常用选项:
-m,--mode=MODE:设定目标文件权限,默认为755;
-o,--owner=OWNER:设定目标文件属主;(注意:改文件权限,所有用户都可以执行,但是更改文件的属主,属组仅管理员可以,用户仅能修那些属主为自己的文件的权限)
-g,--group=GROUP:设定目标文件的属组
举例:install -o arclinux -g mygrp -m 640 /etc/fstab /tmp/fstab
-d,--directory:创建空目录
举例:install -d hello
注意:install不能递归复制目录。
mktemp命令:
创建一个临时文件或一个临时目录,
格式:
mktemp [OPTION]... [TEMPLATE] template:模板,样板;
创建临时文件或目录,这些文件或目录其实是任意存放的,之所以放在“/tmp”目录下,就是因为,这个目录下的文件,定期会自动的删除。
为什么要使用模板?
既然是创建临时文件,则这个文件的名就可能随机的,为了避免重复,我们通常使用.XXXXXXXXXX,后面的“X”是大写的,来表示随机,至少是三个字符,来生成随机字符
举例:
[root@centos6~]# mktemp /tmp/mytmp.XXX
/tmp/mytmp.sxn
[root@centos6~]#
常用选项:
-d:创建临时目录(一般也加3个字符XXX大写)
-u:白执行一次,这个多用在测试,看能不能创建,但实际不会创建。
注意: mktemp会将创建的临时文件名直接返回,因此,可直接通过命令引用保存起来;