##############1.文件权限存在的意义#################
文件权限的存在私是系统最底层安全设定方法之一,保证文件可以被可用的用户做相应操作
##############2.文件权限的查看##########
<1>ls -l file
说明:
touch file1 ##新建一个文件
ls –l file1 ##查看文件的权限
<2>ls -ld dir
说明:
mkdir test ##新建一个目录
ls –ld test ##查看目录本身的权限
<3>ll file ##相当于ls –l file
说明:
alias ##利用该命令可以查询到此系统下的命令的别名
总结:
可以得出ll是ls –l的别称,但是要注意并不是所有的系统都支持命令ll,所以为了规范,最好常用ls -l
<4>ll -d dir
说明:
mkdir file2 ##新建一个目录
ll –d file2 ##查看目录本身权限
<5>ls –LR dir
首先先在/mnt目录下建立一个目录,目录中需含有几个文件,再在/mnt目录下建立几个文件夹,依次对其进行权限的查看,输入的命令如下:
说明:
mkdir /mnt/hah ##在目录/mnt下新建一个目录
touch /mnt/file{1..5} ##在目录/mnt下创建5个文件
touch /mnt/hah/test{1..3} ##在目录/mnt/hah下创建3个文件
ls /mnt/
ls –l /mnt/ ##查看/mnt下文件的权限
ls –l /mnt/hah/ ##查看/mnt/hah下文件的权限
由上述命令可知,若要查看文件或目录的权限,必须分别查看,若想要一次性查看/mnt目录下的所有文件或目录的权限,需要输入以下命令进行查看:
说明:
ls –lR /mnt/ ##即查看了/mnt下文件的权限也查看了/mnt/westos下文件的权限
总结:通过使用命令ls –lR dir 可以递归查看dir(目录)下的所有目录、文件和目录下的文件,可以通过Watch –n 1 ls –lR /mnt/监听目录/mnt下的变化
###############3.文件权限的读取########
- |rw-rw-r–| |kiosk|kiosk| 0 |Jul 21 18:26|file
[1] [2] [3] [4] [5] [6] [7] [8]
[1]文件的类型:
<1>- ##空文件,或者文本
结论:查看文件权限中文件的类型可以知道当建立的是一个空文件时,文件的类型显示的是“-”
<2>d ##目录
结论:由结果可知,当建立的是一个目录时,文件的类型显示的是“d”
<3>l ##软链接
注意:最后的结果是在桌面上会生成一个file1,而且file1上有快捷方式的图标。如果删除了文件file,file1也将无法打开。可以看到file1的文件的类型是“l”
<4>s ##socket 套接字
<5>b ##block 块设备
mount /dev/sdb1 /mnt/ ##将dev下的sdb1(u盘)挂载到mnt(临时挂载点)上
ls –ld /dev/sdb1 ##查看文件/dev/sdb1的权限
<6>c ##字符设备
总结:可以查看到文件的类型是c(字符设备),字符设备就是用来显示字符的设备,常用来显示shell
[2]文件的权限:
rw-|rw-|r–
1 — 2 – 3
<1>[u] 文件拥有者对文件能做什么操作
------------------------1-------------------------
首先我们将建立一个文件并对其进行分析:
说明:
cd /mnt/ ##进入临时区建立文件
ls ##查看临时区内的文件
touch file
vim file ##创建并在文件file内写入内容(在file中写入date)
/mnt/file ##执行文件file
ls –l file ##查看文件的权限
结论:建立一个文件后,会写入内容后执行时会出现报错Permission denied,通过查看文件的权限,我们可以知道文件拥有者即用户并不具备执行的权利,接下来我们将通过更改用户的权限达到可以成功的执行此文件。
说明:
chmod u+x file ##更改用户的可执行权限
ls –l file ##再次查看文件的权限
/mnt/file ##再次执行文件file
总结:
(1)通过使用命令chmod u+x file 之后,再次查看文件的权限,可以看到文件file的用户拥有了可执行的权限,再次执行时会发现运行成功。
(2)命令chmod u+r/w/x的含义分别是增加文件所有者的读权限、写权限、执行权限。命令chmod u-r/w/x的含义分别是删除文件所有者的读权限、写权限、执行权限。
-----------------------------2------------------------------
举例:通过查看file的被修改时间更深一步了解[u]文件所有者对文件能做什么操作:
首先我们将利用touvh更改file1的被修改的时间,接着通过查询可以看到file1并没有执行的权限,我门将通过给file1增加用户执行的权限来改变file1的被修改的时间,具体的命令如下:
说明:
touch –t 11111111 file ##通过touch更改时间戳的作用改写文件被修改的时间
ls –l file ##查看file的权限
chmod u+x file ##更改文件file中用户的执行权限
ls –l file ##再次查看file的权限
vim file ##进入file改写文件执行的内容为date
ls –l file ##查看文件file的被修改时间是否发生了改变
总结:
(1)通过调用在file1中写入的内容date更改file1被修改的时间,我们可以看到在给用户修改权限后,再次执行file1时,文件的名称颜色会发生绿色,具有可执行的权限。
(2)查看file1时,文件的被修改时间也会发生改变,可是文件的名称并不是绿色,结合文件的权限可以知晓文件并不具有可执行的权限。
---------------------------------3-------------------------------
touch file ##建立一个文件
vim file ##在文件内写入内容
ls –l file ##查看文件的权限
ln file file1 ##会再次生成一个file 和file1文件,且file1与file相同
ls –l file ##查看文件的权限
cat file ##查看文件的内容
cat file1 ##查看文件的内容
ls –I file
ls –I file1
总结:
<1>我们可以发现文件的名称颜色变成了蓝色
<2>[g] 文件所有组对文件能做什么操作
<3>[o] 其他人对文件能做什么操作
[3]:
对文件:文件硬链接个数(文件内容被记录的次数)
对目录:目录中子目录的个数
[4]文件的所有人
[5]文件的所有组
[6]:
对文件:文件大小
对目录:目录中子文件元数据(元数据可以理解为文件案的属性)大小
----------------------------说明1:---------------------------
输入以下命令并进行查看目录和文件的大小:
touch file ##建立一个文件
ls –l ##查看文件的权限
mkdir test ##创建一个目录
ls –ld test/ ##查看目录的权限(主要看的是文件/目录的大小)
touch test/file ##在test目录下建立一个文件
ls –ld test/ ##查看目录下的权限(主要看的是文件/目录的大小)
总结:当只创建一个文件时,文件的大小为0,当创建一个目录时,目录的大小为6,当在目录下创建一个文件时,再次查看其目录,目录的大小为18
-----------------------------------说明2:-----------------------------
在目录下分别创建文件名称不同的文件进行对比:
mkdir test ##建立目录test
ls –ld test ##查看目录test的权限
touch test/1 ##创建文件test/1
ls –ld test/ ##查看目录test的大小是否发生变化
rm –fr test/1 ##删除文件test/1
ls –ld test/ ##查看删除后的目录test的大小的变化
touch test/11 ##创建文件test/11
ls –ld test/ ##查看目录test的大小
总结:当直接建立目录时,目录的大小为6,当建立一个文件名为一个字符的文件时,目录的大小变为14,但删除此文件时,目录的大小又会变称6,再次建立一个文件名为2个字符的文件进行研究,会发现目录的大小变为15。由此可以说明目录的初始大小为6,文件的初始大小为7(不包含文件名称中字符的大小)。
---------------------------说明3:--------------------------
当目录下有两个文件时,查看其目录的大小:
mkdir test ##新建一个test目录
touch test/1 ##在test目录下建立一个名字为1的文件
ls –ld test/ ##查看test目录的权限(此处主要研究其大小)
touch test/11 ##再次新建一个名字为11的文件
ls –ld test/ ##查看test目录的权限(此处主要研究其大小)
ls –l test/ ##查看目录下两个文件的权限(此处主要研究其大小)
注意:在查看目录时,一定要使用命令ls -ld 查看目录本身的权限。如果使用ls –l则查询的是此目录下所有文件的权限。
总结:当在一个目录下建立两个文件时,此目录的大小等于目录本身(test)的大小与目录下两个文件(1,11)的大小之和。
[7]
文件的内容被修改的时间
[8]文件的名称
#############4.如何改变文件的所有人和所有组##################
Chown|chgrp
Chown username file|dir
Chown user-group file|dir
Chowm -R user-group dir
Chgrp group file|dir
Chgrp -R group dir
准备工作:
首先需要在目录/mnt下建立几个文件及目录(之所以在/mnt下写是因为桌面下无法进行实时监控),再在/mnt下的目录下建立几个文件,做完这些再对其进行监控,为接下来的改变文件的所有人和所有组打基础,输入以下命令:
说明:
mkdir /mnt/westos ##在目录/mnt下新建一个目录
touch /mnt/file{1..5} ##在目录/mnt下创建5个文件
touch /mnt/westos/test{1..3} ##在目录/mnt/westos下创建3个文件
ls /mnt/
ls –lR /mnt/ ##即查看了/mnt下文件的权限也查看了/mnt/westos下文件的权限
watch ls –lR /mnt/ ##监控目录/mnt下文件及目录的变化
接下来利用相关命令对文件的所有人和所有组进行不同程度的改变:
id westos ##查看用户westos的id(主要看系统中是否存在用户westos)
id student ##查看用户student的id(主要看系统中是否存在用户student)
cd /mnt/ ##因为不是在桌面上创建的文件,所以必须必进入目录/mnt中,进行修改
chown westos file1 ##将文件file1的文件所有人更改成westos
chgrp student file2 ##将文件file2的文件所有组更改成student
chown student:westos file3 ##同时将文件file3的所有人更改成student,所有组更改成westos
chown student westos/ ##将目录/westos的所有人更改成student
chown –R westos westos/ ##将目录/westos本身以及在目录下的文件的文件所有人都更改成westos
#############5.如何改变文件的权限################
(1) 对权限的理解
r:
对文件:是否可以查看文件中的内容 —→cat file
对目录:是否可以查看目录中有什么子文件或者子目录 --→ls dir
w:
对文件:是否可以改变文件里面记录的字符
对目录:是否可以对目录中子目录或子文件的元数据进行更改
x:
对文件:是否可以通过文件名称调用文件内记录的程序
对目录:是否可以进入目录
(2) 更改方式
chmod <u/g/o><+/-/=><r/w/x> file/dir
chmod u+x /mnt/file1
chmod g-r /mnt/dile2
chmod ug-r /mnt/file3
chmod u-r,g+x /mnt/file4
chmod –r /mnt/file5
chmod o=r-x /mnt/file6
准备工作:
首先需要在目录/mnt下建立几个文件及目录(之所以在/mnt下写是因为桌面下无法进行实时监控),再在/mnt下的目录下建立几个文件,做完这些再对其进行监控,为接下来的改变文件的所有人和所有组打基础。
说明:
mkdir /mnt/westos ##在目录/mnt下新建一个目录
touch /mnt/file{1..5} ##在目录/mnt下创建5个文件
touch /mnt/westos/test{1..3} ##在目录/mnt/westos下创建3个文件
ls /mnt/
ls –lR /mnt/ ##即查看了/mnt下文件的权限也查看了/mnt/westos下文件的权限
watch ls –lR /mnt/ ##监控目录/mnt下文件及目录的变化
接下来将对文件的权限进行更改:
---------------------------------------更改1---------------------------------------
首先切换到student用户下查看file1的权限:
su –student ##切换到student用户,student用户相当于其他人other,通过监控可以得知file1对于other的权限是只可以读
cd /mnt ##用户student进入目录/mnt
ls -l file1 ##确认文件file1确实存在
切换到root用户(生成一个shell的快捷键为shift+alt+t),在file1内写入内容:
vim /mnt/file1 ##在file1中写内容linux,由文件权限可知用户root对其file1有改写的权限
切换到student用户,读取文件file1的权限:
cat file1 ##读file1中的内容,由文件权限可知可以读取文件的内容
切换到root用户更改file1的权限:
chmod o-r /mnt/file1
切换到student用户,再次尝试查看file1的内容:
cat file1 ##在更改权限后读取file1
提示:在root和student之间切换看起来是件很繁琐的事情,但是只要对文件的权限、所有人和所有组足够熟悉,会发现一切问题都不再是问题。
root和student用户下所有的命令整合:
------------------------------------------更改2----------------------------------------------
在student用户下先尝试对目录进行查看
ls westos/ ##查看westos/下的文件或目录有哪些,由监控可以目录westos/的权限对于其他用户来说是可以读可以执行的,但是并不能写入
切换到root用户,更改权限:
chmod o-r /westos/ ##更改目录/westos对于其他用户的的权限,将读权限删除
切换到student用户,尝试查看目录下的子文件或子目录
ls westos/ ##查看westos/下的文件或目录有哪些
总结:本来目录/mnt/westos可以被别的用户查看,可是在更改权限后,便无法进行查看了
root和student用户下所有的命令整合:
---------------------------------------------更改3------------------------------------------
首先在student用户下写入以下命令:
echo hello > file1 ##将hello写入file1中,但是其他用户对file1并没有写的权限,所以不被允许
切换到root用户:
chmod o+w file1 ##增加file1对其他用户的写入权限
chmod o+r file1
切换到student用户进行查看:
echo hello > file1 ##此时可以正确写入
cat file1 ##查看file1内是否有内容(第一次无法查看,需要在root内对文件进行权限的修改,是其具有对其他用户的可读权限)
在student用户下试图修改file1的文件名:
mv file1 test ##尝试改变file1文件的名字,报错
ls –ld /mnt/ ##查看上层目录/mnt的权限
我们会发现命令报错,其原因是因为我们改file1的名字,实际上需要file1上层目录的写入权限,而通过查看,/mnt并没有写入权限,于是我们在root下增加其/mnt的写入权限,命令为chmod o+w /mnt,然后切换到student用户下进行查看,会发现修改成功了。
mv file1 test ##因为其他用户对/mnt具有写入权限,所以可以对目录下的文件更改文件的属性(文件名)
总结:
文件能够被其他用户更改内容,但是不一定能够被更改文件的属性(名字),如果要更改文件的属性,需看其所在的目录是否对当前的用户具有改写的权限。
--------------------------------------更改4-------------------------------------
在student用户内进行输入,查看是否可以进入目录:
cd /mnt/westos/ ##目录/westos下没有执行权限,所以会出现报错
切换到root用户更改权限:
chmod o+x file1 ##因为用户root是文件的所有人,具有rwx权限
切换到student用户再次进行输入,查看是否可以进入目录:
cd /mnt/westos/ ##可以成功进入目录
---------------------------------------更改5----------------------------------------
修改文件的权限:
touch /mnt/file
chmod u-rwx,g-rwx,o-rwx /mnt/file ##删除了file的所有权限
chmod ugo-rwx file1 ##删除了file1的所有权限
chmod u+rx,g+r,o+x /mnt/file2 ##增加了file2用户的rx权限,组的r权限,其他用户的x权限
chmod u=rx,g=r,o=x /mnt/file3 ##重写了file3用户为rx权限,组为r权限,其他用户为x权限
chmod ugo+rwx file1 ##增加了file1的所有权限
chmod +r /mnt/file ##增加了file的所有用户的r权限
chmod -r /mnt/file ##删除了file的所有用户的r权限
chmod =r /mnt/file ##重写了file的所有用户的r权限
chmod o=r-x /mnt/file ##设定了file的其他用户的权限为r--权限
chmod –w /mnt/file ##改写所有用户的w权限时,会出现一条指令,
注意:w默认是给其用户所有人更改(r-xrwxrwx),并不是给所有用户进行更改
(3) rwx对应的数字
r=4,w=2,x=1(分别是2的进制)
例如:r-x|r–|--x
5 4 1
7=rwx,6=rw-,5=r-x,4=r–,3=-wx,2=-w-,1=–x,0=—
##用数字修改file,file2的权限:
chmod 700 /mnt/file ##将file的权限更改成rwx------
chmod 754 /mnt/file2 ##将file2的权限更改成rwxw-xr--
}
练习:
新建目录要求如下:
1)/pub目录为公共存储目录对所有用户可以读,写,执行
2)/sc目录为生产部存储目录只能对生产部人员可以写入
3)/cw目录为财务部存储目录只能对财务部人员可以写入
mkdir /pub /sc /cw ##建立/pub,/sc,/cw目录
chmod 777 /pub ##/pub目录对所有用户可以读,写,执行
chgrp shengchan /sc ##将/sc的所有组更改成shengchan
chgrp caiwu /cw #将/cw的所欲组更改成caiwu
chmod 770 /sc ##因为是只能对生产部的人员进行写入,所以权限为770
chmod 770 /cw ##因为是只能对财务部的人员进行写入,所以权限为770
进行检测:
su – student ##切换到student用户
cd /sc/ ##student用户尝试进入/sc/目录,无法进入
cd /cw/ ##student用户尝试进入/cw/目录,无法进入
cd /pub/ ##student用户尝试进入/pub/目录,可以进入,进入目录,说明/pub/目录具有x权限
touch file1 ##创建目录,说明/pub/目录具有w权限
ls ##查看目录,说明/pub/目录具有r权限
##################6.umask#########################
Umask 系统建立文件时默认保留的权利
(1)查看umask的值是多少:
总结:
(1)umask的值为0022
(2)umask 077 ##临时设定系统预留权限为077
在root用户下临时更改umask的值为077:
mkdir test ##新建一个test目录
ls –ld ##查看目录(.)的权限
ls –ld test/ ##查看目录test/的权限
umask 077 ##临时将umask的值改成077
mkdir test1 ##新建一个test1目录
ls –ld test1 ##查看test1的权限。其权限值因为umask的更改而变为700(777-077=700)
touch file1 ##新建一个file1文件
ls –l file1 ##其权限值因为umask的更改而变为600(777-077=700-111=600)
在普通用户下对umask进行临时更改:
su – student ##切换到普通用户student
umask ##查看普通用户下的umask值
umask 0007 ##临时更改umask的值为0007
touch file ##新建一个file
ls –l file ##查看file的权限
mkdir test ##新建一个test
ls –ld test ##查看test的权限
(3)永久更改umask
vim /etc/profile ##系统配置文件
59 if [ $UID –gt 199 ] && [ “id –gn
” = “id –un
” ];then
60 umask 002 ##普通用户的umask
61 else
62 umask 077 ##超级用户的umask
63 fi
Vim /etc/bashrc ##shell配置文件
70 if [ $UID –gt 199 ] && [ “id –gn
” = “id –un
” ];then
71 umask 002
72 else
73 umask 077
74 fi
Source /etc/profile ##让更改立即生效
文件配置:
文件配置:
su – root ##切换到root用户
vim /etc/profile ##进入系统配置文件
vim /wtc/bashrc ##进入shell配置文件
mkdir test1 ##创建目录test1
ls –ld test1 ##查看test1的权限
source /etc/profile ##让更改立即生效
source /etc/bashrc ##让更改立即生效
ls –ld test1 ##查看test1的权限
touch tset2 ##建立目录test2
ls –ld test2 ##查看目录test2的权限
注意:当永久更改umask时,只对还没有创建的文件或目录有效,对已经生成的文件或目录无效
#################7.特殊权限###################
1.sticky ##粘制位
作用:只针对目录有效,当一个目录上有sticky权限时,在这个目录中的文件只能被文件的所有者删除
设定方式:
chmod o+t dir
chmod 1xxx dir
首先可以创建一个监控,实时观看/pub/目录的权限变化
mkdir /pub/ ##创建/pub/目录
chmod 777 /pub/ ##设置/pub/的权限
watch –n 1 ls –ld /pub/ ##对/pub/的目录进行实时监控
1)通过使用命令chmod o+t dir来实现在/pub/目录下的文件只能被文件的所有者删除
su – tom ##切换到tom用户
cd /pub/ ##tom用户进入目录/pub/中
touch file ##在/pub/目录下建立file文件
ls –l file ##查看file文件的权限
exit ##退出tom用户
chmod o+t /pub/ ##在/pub/中的文件只能被文件的所有者删除
su – tom ##切换到tom用户
ls –ld /pub/ ##再次查看/pub/的权限
exit ##退出tom用户
su – harry ##切换到harry用户
cd /pub/ ##进入/pub/
touch file2 ##建立文件file2
rm –rf file2 ##删除文件file2
rm –rf file ##删除文件file,但是无法删除
总结:当通过命令给/pub/设定权限后,在tom用户下/pub/内的文件只能被tom删除,别的用户将无法删除。
2)通过使用命令chmod 1xxx dir更改目录的权限:
ls –ld /pub/ ##查看目录/pub/的权限
chmod 1777 /pub/ ##更改目录/pub/的权限
ls –ld /pub/ ##再次查看目录/pub/的权限
2.sgid ##强制位
作用:
1)对文件:只针对与二进制可执行文件,当文件上有sgid时任何人执行此文件产生的进程都属于文件的组
2)对目录:当目录上有sgid权限时任何人在此目录中建立的文件都属于目录的所有组
设定方式:
Chmod g+s file/dir
Chmod 2xxx file/dir
3.suid ##冒险位
作用:只针对与二进制可执行文件,当文件上有suid时任何人执行这个文件中程序产生的进程都属于文件的所有人
设定方式:
Chmod u+s file
Chmod 4xxx file
1)通过使用命令chmod g+s file/dir更改目录的权限:
首先在普通用户下进行如下命令:
touch file ##创建文件
Ls –ld /pub/ ##查看目录/pub/的权限
切换root
ls –ld /pub/ ##查看目录/pub/的权限
chmod g+s /pub/ ##更改/pub/的权限
ls –ld /pub/ ##查看目录/pub/的权限
总结:可以看到目录下的所有组的x(执行)变为s(强制位),即不论谁在/pub/目录中建立的文件都属于目录的所有组
测试:
su – westos ##切换用户westos
cd /pub/ ##进入/pub/目录下
ls –ld /pub/ ##查看/pub/目录的权限
touch file1 ##新建一个文件file1
ls –l file1 ##查看文件file1的权限
结果:更改用户后,可以看到文件file1的所有组依旧是目录/pub/的所有组。
2)
通过对目录权限的变化,观察进程中watch的变化:
ls –l /bin/watch ##查看/bin/watch 的权限
chgrp student /bin/watch ##将/bin/watch所有组更改成student
ls –l /bin/watch ##再次查看/bin/watch的权限
chmod g+s /bin/watch ##更改/bin/watch的组中x变为s
ls –l /bin/watch ##查看/bin/watch 的权限
chmod u+s /bin/watch ##更改/bim/watch的用户中x变为s
ls –l /bin/watch ##查看/bin/watch的权限
ls –l /sbin/useradd ##查看/sbin/useradd的权限
chmod u+s /sbin/useradd ##更改/sbin/useradd的用户中的x变为s
ls –l /sbin/useradd ##查看/sbin/useradd的权限
su – harry ##切换至用户harry
watch –n 1 date ##实时监控date
ps ax -o comm,user,group | grep –E “\<watch\>”
ps ax -o comm,user,group | grep –E “\<watch\>”
ps ax -o comm,user,group | grep watch
3)
证明:将目录权限发生改变后,只能在原来的组下进行删除:
ls –l /bin/rm ##查看/bin/rm 的权限
chown student:student /bin/rm ##将/bin/rm的所有人和所有组都更改成student
ls –l /bin/rm ##再次查看/bin/rm 的权限,查看所有人和所有组是否发生了变化
rm –rf /mnt ##试图杀死目录/mnt(临时区)
chmod u+s /bin/rm ##改变/bin/rm的用户中x为s
chmod g+s /bin/rm ##改变/bin/rm的组组中x为s
ls –l /bin/rm ##再次查看/bin/rm的权限,查看权限是否发生了变化
rm –rf /home/student ##试图删除/home/student,发现报错了
ls –ld /home ##进入/home中进行查看
4)
比较权限755、2755、6755的区别
ls –l /bin/watch ##查看/bin/watch 的权限
chgrp student /bin/watch ##将/bin/watch的所有组更改成student
chmod 755 /bin/watch ##更改/bin/watch的权限为rwxr-xr-x
ls –ld /bin/watch ##再次查看/bin/watch的权限
chmod 2755 /bin/watch #将/bin/watch的组中的x变为s
ls –ld /bin/watch ##再次查看/bin/watch的权限
chmod 6755 /bin/watch #将/bin/watch的用户中的x变为s
ls –ld /bin/watch ##再次查看/bin/watch的权限
ps –ax –o comm,user,group
watch –n 1 date
总结:
2755相当于u+x,6755相当u+x和g+x
4)
证明:给用户的组加权限(sgid)
<1>
ls -l /bin/watch ##首先查看/bin/watch的权限
watch -n 1 date ##进行实时监控并查看进程
<2>
chgrp student /bin/watch ##更换/bin/watch的用户组
ls -l /bin/watch ##再次查看更换用户组后的/bin/watch的权限
watch -n 1 date ##执行实时监控并查看进程
<3>
su - tom ##切换到tom用户组下
watch -n 1 date ##在tom用户组下执行实时监控并查看进程
<4>
chmod g+s /bin/watch ##在root权限下更改/bin/watch的权限
watch -n 1 date ##执行实时监控并查看进程
<5>
su - tom ##切换到tom用户下
watch -n 1 date ##执行实时监控并查看进程
注意:
(1)更改用户组时查看watch的进程会发现/bin/watch的用户和用户组并没有发生改变。
(2)文件的用户组和进程的用户组不同,没有加权限时用户的组不会发生改变。
总结:
sgid的本质是更改用户组的权限,通过更改其权限实现其特殊的功能,即当一个目录更改了其权限之后(g+s),那么不论谁再查看这个进程,目录所显示的用户组都是在更改权限之前的那个用户组。
5)
证明:给用户加权限(suid)
<1>
ls-l /bin/watch
watch -n 1 date
<2>
su - tom
watch -n 1 date
<3>
chmod u+s /bin/watch
watch -n 1 date
<4>
su - harry
watch -n 1 date
总结:
suid和sgid的用法和作用基本一致,两者的区别是suid改变的用户的权限,sgid改变的是用户组的权限
练习:
1)/pub目录为公共存储目录对所有用户可以读,写,执行,但用户只能删除属于自己的文件
2)/sc目录为生产部存储目录只能对生产部人员可以写入,并且生产部人员所建立的文件都自动归属到shengchan组中
3)/cw目录为财务部存储目录只能对财务部人员可以写入,并且财务部人员所建立的文件都自动归属到caiwu组中
4)admin用户对于/sc和/cw目录可以读写执行
groupadd caiwu ##创建caiwu组
groupadd jishu ##创建jishu组
chmod 1777 /pub ##将/pub的权限更改成1777
chmod 2770 /sc ##将/sc的权限更改成2770
chmod 2770 /cw ##将/cw的权限更改成2770
chgrp caiwu /cw ##将/cw的所有组更改成caiwu
chgrp shengchan /sc ##将/sc的所有组更改成shengchan
ls –ld /pub /sc /cw ##查看/pub /sc /cw的权限
###############8.acl权限列表#########
(1)作用:让特定的用户对特定的文件拥有特定权限
(2)acl列表查看
-rw-rwxr–+ 1 root root 0 Jul 21 14:25 file1中权限中的“+”即为acl开启
Getfacl file ##查看acl开启的文件的权限
#file : file ##文件名称
#owner : root ##文件拥有者
#group : root ##文件拥有组
User::rw- ##文件拥有人的权限
User::kiosk:rwx ##指定用户(kiosk)的权限
Group::r-- ##文件拥有组的权力
Mask::rwx ##能赋予用户的最大权力值
Other::r-- ##其他人的权限
(3)acl列表的管理
Getfacl file
Setfacl –m u:username:rwx file ##设定username对file拥有rwx权限
Setfacl -m g:group:rwx file ##设定group组成员对file拥有rwx权限
Satfacl -x u:username file ##从acl列表中删除username
Satfacl -b file ##关闭file上的acl列表
<1>首先开启acl:
touch file ##创建一个文件
ls –l file ##查看文件的权限
<2>实时监控act列表
watch –n 1 getfacl file
<3>管理acl列表:
setfacl –m u:harry:rwx file ##设定harry对file拥有rwx权限
ls –l file ##查看文件的权限
setfacl –m u:harry:0 file ##设定harru对file拥有0权限
ls –l file ##查看文件的权限
setfacl –m g:shengchan:rwx file ##设定shengchan对file拥有rwx权限
setfacl –x u:harry file ##从acl列表中删除用户harry
setfacl –x g:shengchan file ##从acl列表中删除组shengchan
ls –l file ##查看file的权限
setfacl -b file ##关闭file上的acl列表
ls –l file ##查看file的权限
总结:可以通过对acl列表的管理,实现不同用户对不同文件的权限管理。
(4)mask的值
在权限列表中mask标志能生效的权力值,当用chmod减小开启acl的文件权限时,mask值会发生改变
Chmod g-w westos
如果要恢复mask的值
输入以下命令:setfacl –m m:rw westos
<1>watch -n 1 getfacl file ##实时监控file
<2>输入以下命令:
setfacl -m u:harry:rw file ##file给用户harry的权限是rw
ls -l file ##查看file的权限
setfacl -m u:weatos:r file
ls -l file
setfacl -m u:tom:rwx file
ls -l file
setfacl -m u:student:x file
ls -l file
chmod g-rx file ##删除file中mask中的部分权限
恢复方法一:
chmod g+x file ##恢复file中mask中的部分权限
恢复方法二:
setfacl -m m:rwx file ##恢复file中mask的全部权限
总结:
<1>在删除file中mask中的部分权限时,由图可知“#effective:—”代表的是再删除部分mask值后,用户有效的权限是什么
<2>mask的权限值一般会展示再group原来的位置
(5)acl的默认权限设定
acl默认权限只针对目录设定,“acl权限只针对设定完成之后新建的文件或目录生效,而已经存在的文件是不会继承默认权限的”
Setfacl –m d:u:student:rwx /mnt/westos
Setfacl –k /mnt/westos
<1>首先做好准备工作,在/mnt下建立一个目录并在一个目录下建立几个文件,之后按照如下的命令输入:
说明:
mkdir /mnt/bai ##在root下建立一个/mnt/bai目录
touch /mnt/bai/file{1..3} ##在root用户下的/mnt/bai目录下建立三个文件
ls -lR /mnt ##查看/mnt的相关权限
setfacl -m d:u:student:rwx /mnt/bai ##在root用户下设定acl默认权限
<2>
说明:
su - student ##切换到student用户下
cd /mnt/bai ##进入/mnt/bai目录
cat file1 #尝试查看已经建立的file1
su - root
<3>
说明:
touch /mnt/bai/fii ##在root用户下建立/mnt/bai/fii文件
su - student ##切换至student用户下
cd /mnt/bai ##进入/mnt/bai目录
cat /mnt/bai/fii ##查看文件fii的内容
<4>
说明:
satfacl -k /mnt/bai ##删除设定的默认权限
<5>
说明:
su - student ##切换到student用户
cd /mnt/bai ##进入/mnt/bai目录下
cat file2 ##查看最先开始创建的文件file2
cat fii ##查看在acl默认权限设定时的fii