对于文本文件:
r读取权限:cat、less、grep、head、tail
w写入权限:vim、> 、 >>
x可执行权限:Shell与Python
对于目录:
r读取权限:ls命令查看目录内容
w写入权限:能够创建、删除、修改等目录的内容
x 执行权限:能够cd切换到此目录下(进入此目录)
归属关系
例如:zhangsan(所有者) zhangsan(所属组) 1.txt
执行 ls -l或者ls -ld 命令查看
以-开头:文本文件
以d开头:目录
以l开头:快捷方式
[root@localhost ~]# ls -ld /etc/[root@localhost ~]# ls -l /etc/passwd[root@localhost ~]# ls -ld /root[root@localhost ~]# ls -ld /tmp #有附加权限[root@localhost ~]# ls -l /etc/shadow[root@localhost ~]# useradd zhangsan[root@localhost ~]# ls -ld /home/zhangsan
Linux中判断用户具备的权限:
1. 查看用户,对于该数据所处的身份
2. 查看相应身份的权限位
•chmod命令
格式:chmod [ugoa] [+-=][rwx] 文件...
•常用命令选项
-R:递归修改权限
[root@localhost ~]# mkdir /nsd10[root@localhost ~]# ls -ld /nsd10[root@localhost ~]# chmod u-w /nsd10 #所有者去掉w权限[root@localhost ~]# ls -ld /nsd10 [root@localhost ~]# chmod u+w /nsd10 #所有者加上w权限[root@localhost ~]# ls -ld /nsd10[root@localhost ~]# chmod g+w /nsd10 #所属组加上w权限[root@localhost ~]# ls -ld /nsd10[root@localhost ~]# chmod g=r /nsd10 #所属组重新定义权限[root@localhost ~]# ls -ld /nsd10[root@localhost ~]# chmod a=rwx /nsd10 #a表示所有人[root@localhost ~]# ls -ld /nsd10[root@localhost ~]# chmod u=---,g=rx,o=rwx /nsd10[root@localhost ~]# ls -ld /nsd10
-R:递归修改权限
[root@localhost ~]# mkdir -p /opt/aa/bb/cc[root@localhost ~]# chmod -R o=--- /opt/aa[root@localhost ~]# ls -ld /opt/aa[root@localhost ~]# ls -ld /opt/aa/bb[root@localhost ~]# ls -ld /opt/aa/bb/cc
案例:设置基本权限
1)以root身份新建/dir目录,在此目录下新建文件
[root@localhost ~]# mkdir /dir [root@localhost ~]# echo 123456 > /[root@localhost ~]# cat /
2)使用户zhangsan能够修改文件内容
[root@localhost ~]# chmod o+w /
3)使用户zhangsan不可以修改文件内容
[root@localhost ~]# chmod o-w /
4)使用户zhangsan能够在此目录下创建/删除子目录
[root@localhost ~]# chmod o+w /dir/
5)调整此目录的权限,使任何用户都不能进入,然后测试用户zhangsan是否还能查看内容(测试结果是不能,对父目录没有权限)
[root@localhost ~]# chmod a-x /dir/
6)为此目录及其下所有文档设置权限 rwxr-x---
[root@localhost ~]# chmod -R u=rwx,g=rx,o=--- /dir
权限利用数字方式表示
• 权限位的8进制数表示
– r、w、x分别对应4、2、1,后3组分别求和
分组: User权限 Group权限 Other权限
字符: r w x r - x r - x
数字: 4 2 1 4 0 1 4 0 1
求和: 7 5 5
[root@localhost ~]# mkdir /nsd14[root@localhost ~]# ls -ld /nsd14[root@localhost ~]# chmod 700 /nsd14[root@localhost ~]# ls -ld /nsd14[root@localhost ~]# chmod 007 /nsd14[root@localhost ~]# ls -ld /nsd14[root@localhost ~]# chmod 750 /nsd14[root@localhost ~]# ls -ld /nsd14[root@localhost ~]# chmod 755 /nsd14[root@localhost ~]# ls -ld /nsd14
•chown命令
–chown 属主 文件...
–chown 属主:属组 文件...
–chown :属组 文件...
[root@localhost ~]# mkdir /nsd15[root@localhost ~]# ls -ld /nsd15[root@localhost ~]# groupadd tmooc #创建组tmooc[root@localhost ~]# useradd lisi #创建用户lisi[root@localhost ~]# chown lisi:tmooc /nsd15 #修改所有者与所属组[root@localhost ~]# ls -ld /nsd15[root@localhost ~]# chown zhangsan /nsd15 #仅修改所有者[root@localhost ~]# ls -ld /nsd15[root@localhost ~]# chown :root /nsd15 #仅修改所属组[root@localhost ~]# ls -ld /nsd15
常用命令选项
-R:递归修改归属关系
[root@localhost ~]# mkdir -p /opt/aa/bb/cc[root@localhost ~]# chown -R zhangsan /opt/aa #递归修改归属关系[root@localhost ~]# ls -ld /opt/aa[root@localhost ~]# ls -ld /opt/aa/bb[root@localhost ~]# ls -ld /opt/aa/bb/cc[root@localhost ~]# chown -R lisi:tmooc /opt/aa [root@localhost ~]# ls -ld /opt/aa[root@localhost ~]# ls -ld /opt/aa/bb[root@localhost ~]# ls -ld /opt/aa/bb/cc
Linux中判断用户具备的权限:
1.查看用户,对于该数据所处的身份,顺序所有者>所属组>其他人,原则是匹配及停止
2.查看相应身份的权限位
例如:
1.192.168.1.1可以进入
2.所有客户端不可以进入
例如:
1.所有人不能进入
2.牛老师可以进入
案例2:归属关系练习
1)利用root的身份新建/tarena目录,并进一步完成下列操作
[root@localhost ~]# mkdir /tarena
2)将/tarena属主设为gelin01,属组设为tmooc组
[root@localhost ~]# useradd gelin01 [root@localhost ~]# groupadd tmooc[root@localhost ~]# chown gelin01:tmooc /tarena
3)使用户gelin01对此目录具有rwx权限,除去所有者与所属组之外的用户对此目录无任何权限
[root@localhost ~]# chmod o=--- /tarena
4)使用户gelin02能进入、查看此目录内容
[root@localhost ~]# useradd gelin02[root@localhost ~]# gpasswd -a gelin02 tmooc
5)将gelin01加入tmooc组,将/tarena目录的权限设为450,测试gelin01用户能否进入此目录(匹配及停止原则,不能进入)
[root@localhost ~]# gpasswd -a gelin01 tmooc [root@localhost ~]# chmod 450 /tarena
•文档归属的局限性:
–任何人只属于三种角色:属主、属组、其他人
–针对特殊的人实现更精细的控制
•acl访问策略作用:
–能够对个别用户、个别组设置独立的权限
•setfacl命令
–格式:
setfacl [选项] u:用户名:权限 文件...
setfacl [选项] g:组名:权限 文件...
•常用命令选项
-m:修改ACL策略
-x:清除指定的ACL策略
-b:清除所有已设置的ACL策略
-R:递归设置ACL策略
[root@localhost ~]# mkdir /nsd19[root@localhost ~]# chmod 770 /nsd19 [root@localhost ~]# ls -ld /nsd19[root@localhost ~]# useradd dc[root@localhost ~]# su - dc[dc@localhost ~]$ cd /nsd19-bash: cd: /nsd19: 权限不够[dc@localhost ~]$ exit[root@localhost ~]# setfacl -m u:dc:rx /nsd19 #单独赋予dc用户权限[root@localhost ~]# getfacl /nsd19 #查看ACL策略[root@localhost ~]# su - dc [dc@localhost ~]$ cd /nsd19[dc@localhost ~]$ pwd[dc@localhost ~]$ exit
Linux中判断用户具备的权限:
1.首先查看该用户或者组是否有ACL策略
2.查看用户,对于该数据所处的身份,顺序所有者>所属组>其他人,原则是匹配及停止
3.查看相应身份的权限位
ACL命令的练习:
[root@localhost ~]# mkdir /nsd22 [root@localhost ~]# setfacl -m u:dc:rx /nsd22[root@localhost ~]# setfacl -m u:zhangsan:rwx /nsd22[root@localhost ~]# setfacl -m u:lisi:rx /nsd22[root@localhost ~]# setfacl -m u:gelin01:rwx /nsd22[root@localhost ~]# getfacl /nsd22 [root@localhost ~]# setfacl -x u:zhangsan /nsd22 #删除指定用户ACL[root@localhost ~]# getfacl /nsd22[root@localhost ~]# setfacl -x u:dc /nsd22 #删除指定用户ACL[root@localhost ~]# getfacl /nsd22[root@localhost ~]# setfacl -b /nsd22 #清除目录所有ACL策略[root@localhost ~]# getfacl /nsd22
ACL策略-黑名单的使用(单独拒绝某些用户)
[root@localhost ~]# mkdir /home/public [root@localhost ~]# chmod 777 /home/public[root@localhost ~]# setfacl -m u:lisi:--- /home/public[root@localhost ~]# getfacl /home/public
-R:递归设置ACL策略
[root@localhost ~]# setfacl -Rm u:dc:rwx /opt/aa
•粘滞位,Sticky Bit 权限
–占用其他人(Other)的 x 位
–显示为 t 或 T,取决于其他人是否有 x 权限
–适用于目录,用来限制用户滥用写入权
–在设置了t权限的目录下,即使用户有写入权限,也不能删除或改名其他用户文档
[root@localhost ~]# mkdir /nsd26 [root@localhost ~]# chmod 777 /nsd26[root@localhost ~]# ls -ld /nsd26[root@localhost ~]# chmod o+t /nsd26[root@localhost ~]# ls -ld /nsd26
•Set GID权限(SGID权限)
–占用属组(Group)的 x 位
–显示为 s 或 S,取决于属组是否有 x 权限
–对目录有效
–在一个具有SGID权限的目录下,新建的文档会自动继承父目录的属组身份
[root@localhost ~]# mkdir /nsd18 [root@localhost ~]# chown :tmooc /nsd18 #修改所属组[root@localhost ~]# ls -ld /nsd18[root@localhost ~]# chmod g+s /nsd18 #赋予SGID特殊权限[root@localhost ~]# ls -ld /nsd18[root@localhost ~]# mkdir /nsd18/abc01[root@localhost ~]# ls -ld /nsd18/abc01[root@localhost ~]# mkdir /nsd18/abc02[root@localhost ~]# ls -ld /nsd18/abc02[root@localhost ~]# touch /[root@localhost ~]# ls -ld /
请问实现lisi用户可以读取/etc/shadow文件内容,您有几种办法?(至少写出三种以上)
1. 利用其他人身份
chmod o+r /etc/shadow
2. 利用所属组身份
chown :lisi /etc/shadow
chmod g+r /etc/shadow
3. 利用所有者身份
chown lisi /etc/shadow
chmod u+r /etc/shadow
4. 利用ACL策略
setfacl -m u:lisi:r /etc/shadow
附加权限Set UID(SUID)权限(了解)
占用属主(User)的 x 位
显示为 s 或 S,取决于属主是否有 x 权限
仅对可执行的程序有意义
当其他用户执行带SUID标记的程序时,具有此程序属主的身份和相应权限
[root@localhost ~]# which mkdir/usr/bin/mkdir[root@localhost ~]# /usr/bin/mkdir /opt/abc01[root@localhost ~]# ls /opt/[root@localhost ~]# cp /usr/bin/mkdir /usr/bin/hahadir[root@localhost ~]# ls -l /usr/bin/hahadir[root@localhost ~]# /usr/bin/hahadir /opt/abc02[root@localhost ~]# ls /opt/[root@localhost ~]# chmod u+s /usr/bin/hahadir [root@localhost ~]# ls -l /usr/bin/hahadir[root@localhost ~]# su - zhangsan[zhangsan@localhost ~]$ /usr/bin/mkdir zs01[zhangsan@localhost ~]$ ls -l[zhangsan@localhost ~]$ /usr/bin/hahadir zs02[zhangsan@localhost ~]$ ls -l创建目录时,指定目录的权限 [root@localhost ~]# mkdir -m 700 /opt/cbd03[root@localhost ~]# ls -ld /opt/cbd03[root@localhost ~]# mkdir -m 777 /opt/cbd04[root@localhost ~]# ls -ld /opt/cbd04
文件/目录的默认权限
• 新建文件/目录的默认权限
– 一般文件默认均不给 x 执行权限
– 其他取决于 umask(权限掩码) 设置
– 新建目录默认权限为755
– 新建文件默认权限为644
[root@localhost ~]# umask 0022[root@localhost ~]# umask -S #显示新建目录的默认权限u=rwx,g=rx,o=rx[root@nb ~]# mkdir -m 777 /nsd26 #-m无视umask值创建数据指定数据的权限[root@nb ~]# ls -ld /nsd26实现natasha用户新建数据,目录权限为700文件为600[root@nb ~]# useradd natasha[root@nb ~]# vim /home/natasha/.bashrc #修改家目录配置文件umask 077 #新增配置,指定权限掩码值[root@nb ~]# su - natasha上一次登录:四 2月 23 17:26:16 CST 2023pts/0 上[natasha@nb ~]$ umask 0077[natasha@nb ~]$ mkdir abc[natasha@nb ~]$ ls -ld abcdrwx------. 2 natasha natasha 6 2月 23 17:27 abc[natasha@nb ~]$ exit
常见故障:递归设置权限错误
[root@nb ~]# mkdir /nsd26[root@nb ~]# mkdir /nsd26/haha[root@nb ~]# mkdir /nsd26/xixi[root@nb ~]# touch /[root@nb ~]# touch /[root@nb ~]# chmod -R a=--- /nsd26[root@nb ~]# ls -ld /nsd26[root@nb ~]# ls -l /nsd26[root@nb ~]# find /nsd26 -type d -exec chmod 755 {} ;[root@nb ~]# ls -l /nsd26[root@nb ~]# find /nsd26 -type f -exec chmod 644 {} ;[root@nb ~]# ls -l /nsd26
手动建立用户家目录
/etc/skel是新建用户时,会以此目录作为模板建立用户家目录
]# useradd natasha]# rm -rf /home/natasha]# cp -r /etc/skel /home/natasha]# chown -R natasha:natasha /home/natasha]# ls -lA /home/natasha]# su - natasha[natasha@localhost ~]$
权限利用数字的方式表示
基本权限:
附加权限:了解
- 利用数字4表示suid
- 利用数字2表示sgid
- 利用数字1表示t
[root@nb ~]# mkdir /nsd35[root@nb ~]# ls -ld /nsd35[root@nb ~]# chmod 2755 /nsd35[root@nb ~]# ls -ld /nsd35[root@nb ~]# chmod 3755 /nsd35[root@nb ~]# ls -ld /nsd35
设置基本权限的命令主要是chmod,本实验要分清三个基本权限rwx的意义。用户在访问一个目录或文件时,由设置的访问权限+归属关系共同决定最终权限访问权限。
若对目录有r权限,表示可列出该目录内容。
若对目录有w权限,表示可在该目录下新建/删除/移动文件或子目录。
若对目录有x权限,表示允许cd到该目录下。
实现此案例需要按照如下步骤进行。
步骤一:新建/nsddir1/目录,在该目录下新建文件
命令操作如下所示:
[root@localhost ~]# mkdir /nsddir1[root@localhost ~]# ls -ld /nsddir1/ //查看是否创建成功drwxr-xr-x. 2 root root 4096 2月 26 09:55 /nsddir1/[root@localhost ~]# touch /[root@localhost ~]# ls -l / //查看是否创建成功-rw-r--r--. 1 root root 0 2月 26 09:56 /[root@localhost ~]#
步骤二:使用户zhangsan能够在/nsddir1/目录下创建/删除子目录(此题考查对目录w权限的理解)
命令操作如下所示:
[root@localhost ~]# id zhangsan //查看zhangsan用户是否存在id: zhangsan:无此用户[root@localhost ~]# useradd zhangsan //创建zhangsan用户[root@localhost ~]# ls -ld /nsddir1/ //查看nsddir1目录的权限drwxr-xr-x. 2 root root 4096 2月 26 09:56 /nsddir1/
分析: 首先看zhangsan对于此目录具备有什么权限,zhangsan很明显属于其他人,权限对应为rx,要想让其能够创建、删除子目录,必须让其具备w权限
[root@localhost ~]# su – zhangsan //切换zhangsan用户测试[zhangsan@localhost ~]$ mkdir /nsddir1/zhangdir //测试是否有权限创建mkdir: 无法创建目录"/nsddir1/zhangdir": 权限不够[zhangsan@localhost ~]$exit[root@localhost ~]# chmod o+w /nsddir1/ //为其他人添加W权限[root@localhost ~]# ls -ld /nsddir1/ //查看是否添加成功drwxr-xrwx. 2 root root 4096 2月 26 09:56 /nsddir1/[root@localhost ~]# su – zhangsan //再次切换到zhangsan用户测试[zhangsan@localhost ~]$ mkdir /nsddir1/zhangdir //测试是否有权限创建[zhangsan@localhost ~]$ ls /nsddir1/ //查看是否创建成功 zhangdir[zhangsan@localhost ~]$
步骤三:使用户zhangsan能够修改/文件,调整/nsddir1/目录的权限,使任何用户都不能进入该目录,测试用户zhangsan是否还能修/文件的内容。
分析: 首先要解决zhangsan用户能够修改内容
命令操作如下所示:
[root@localhost ~]# ls -ld / //查看文件的权限-rw-r--r--. 1 root root 0 2月 26 09:56 /
分析: 首先看zhangsan对于此目录具备有什么权限,zhangsan很明显是其他人的权限是r权限,在想如何实现让zhangsan修改其内容,需加w权限
[root@localhost ~]# su – zhangsan //切换zhangsan用户测试[zhangsan@localhost ~]$ echo 123 > / //测试是否有权限写入-bash: /: 权限不够[zhangsan@localhost ~]$ exitlogout[root@localhost ~]# chmod o+w / //添加w权限[root@localhost ~]# ls -l / //查看是否添加成功-rw-r--rw-. 1 root root 0 2月 26 09:56 /[root@localhost ~]# su – zhangsan //切换zhangsan用户测试[zhangsan@localhost ~]$ echo 123 > / //测试是否有权限写入[zhangsan@localhost ~]$ cat / //查看写入成功123
分析: zhangsan能够修改内容了。现在设置/nsddir1权限是任何人都不能进入该目录,只需将所有人的x执行权限去掉即可。
命令操作如下所示:
[root@localhost ~]# ls -ld /nsddir1/drwxr-xr-x. 2 root root 4096 3月 31 11:38 /nsddir1/[root@localhost ~]# chmod a-x /nsddir1/[root@localhost ~]# ls -ld /nsddir1/drw-r--r--. 2 root root 4096 3月 31 11:38 /nsddir1/[root@localhost ~]# su - zhangsan[zhangsan@localhost ~]$ cd /nsddir1/-bash: cd: /nsddir1/: 权限不够[zhangsan@localhost ~]$ echo 123 > / //zhangsan用户无权限修改-bash: /: 权限不够
步骤四:将/nsddir1/目录及其下所有内容的权限都设置为 rwxr-x---(本题主要考察选项-R,依然是利用chmod来完成)
命令操作如下所示:
[root@localhost ~]# chmod -R 750 /nsddir1/ //-R为递归修改[root@localhost ~]# ls -ld /nsddir1/ //查看目录本身权限是否修改drwxr-x---. 3 root root 4096 2月 26 16:00 /nsddir1/[root@localhost ~]# ls -l /nsddir1/ //查看子目录子文件权限是否修改总用量 8-rwxr-x---. 1 root root 4 2月 26 16:drwxr-x---. 2 zhangsan zhangsan 4096 2月 26 16:00 zhangdir
1)以用户root登入,测试umask掩码值
2)以用户zhangsan登入,查看当前的umask值
3)请问为什么普通用户的家目录权限都是700
本题的主要目的主要是让大家能够记住并理解umask值的作用,它决定着这个Shell环境创建文件以及目录的默认权限。
实现此案例需要按照如下步骤进行。
步骤一:以用户root登入,测试umask掩码值
命令操作如下所示:
[root@localhost ~]# whoami //确保自己登录身份是rootroot[root@localhost ~]# umask //查看当前umask值,需用最大权限777减去0220022[root@localhost ~]# umask –S //另外一种查看方式,-S选项是直接显示默认权限u=rwx,g=rx,o=rx
分析: 查看创建目录以及文件的默认权限,是否与umask一致,注意文件默认安全起见没有赋予x执行权限
[root@localhost ~]# mkdir /udir1 //创建测试目录[root@localhost ~]# touch /ufile1 //创建测试文件[root@localhost ~]# ls -ld /udir1/ //查看是否与umask值相符合drwxr-xr-x. 2 root root 4096 2月 26 16:37 /udir1/[root@localhost ~]# ls -l /ufile1 //查看是否与umask值相符合-rw-r--r--. 1 root root 0 2月 26 16:37 /ufile1[root@localhost ~]# umask 077 //更改umask值[root@localhost ~]# umask //查看是否修改成功0077[root@localhost ~]# umask –S u=rwx,g=,o=[root@localhost ~]# mkdir /udir2 //创建测试目录[root@localhost ~]# touch /ufile2 //创建测试文件[root@localhost ~]# ls -ld /udir2 //查看是否与umask值相符合drwx------. 2 root root 4096 2月 26 16:43 /udir2[root@localhost ~]# ls -l /ufile2 //查看是否与umask值相符合-rw-------. 1 root root 0 2月 26 16:44 /ufile2[root@localhost ~]# umask 022 //更改umask值为022[root@localhost ~]# umask //查看是否修改成功0022
步骤二:以用户zhangsan登入,查看当前的umask值(本题的目的主要是为了让大家知道管理员与普通用户的默认umask是不同的)
命令操作如下所示:
[root@localhost ~]# umask //查看root的umask值0022[root@localhost ~]# su – zhangsan //切换zhangsan用户身份[zhangsan@localhost ~]$ umask //查看zhangsan的umask值0002
步骤三:请问为什么普通用户的家目录权限都是700
分析: 本题主要考察,useradd这条命令在执行的时候,与那些默认配置文件相关,有两个配置文件分别为/etc/default/useradd、/etc/login.defs。
命令操作如下所示:
[root@localhost ~]# grep -v "^#" /etc/login.defs | grep -v "^$" | grep -i umaskUMASK 077 //此配置文件规定创建用户家目录时,需遵循的umask值
大家要记得更改归属关系是利用chown命令来完成的,其中要特别注意的是此命令既可以更改所有者,也可以更改所属组。要分清所有者与所属组的位置,并以冒号或者点隔开。
实现此案例需要按照如下步骤进行。
步骤一:新建/tarena1目录
命令操作如下所示:
[root@localhost ~]# mkdir /tarena1
步骤二:将属主设为gelin01,属组设为tarena组
命令操作如下所示:
[root@localhost ~]# ls -ld /tarena1/ //想查看归属关系drwxr-xr-x. 2 root root 4096 2月 26 17:10 /tarena1/[root@localhost ~]# id gelin01 //检查是否有gelin01用户id: gelin01:无此用户 [root@localhost ~]# grep tarena /etc/group //检查是否有tarena组[root@localhost ~]#[root@localhost ~]# useradd gelin01 //创建用户gelin01[root@localhost ~]# groupadd tarena //创建组tarena[root@localhost ~]# id gelin01 //检查是否创建成功uid=501(gelin01) gid=501(gelin01) 组=501(gelin01)[root@localhost ~]# grep tarena /etc/group //检查是否创建成功tarena:x:502:[root@localhost ~]# chown gelin01:tarena /tarena1/ //更改其归属关系[root@localhost ~]# ls -ld /tarena1/ //查看是否更改成功drwxr-xr-x. 2 gelin01 tarena 4096 2月 26 17:10 /tarena1/[root@localhost ~]#
步骤三:使用户gelin01对此目录具有rwx权限,其他人对此目录无任何权限(更改时需注意对象要弄清,不要弄混)
命令操作如下所示:
[root@localhost ~]# ls -ld /tarena1/ //查看其权限划分情况drwxr-xr-x. 2 gelin01 tarena 4096 2月 26 17:10 /tarena1/
分析:想要gelin01用户权限为rwx,那么首先看gelin01是属于哪一种归属关系。可以看出是所有者身份。
[root@localhost ~]# chmod u=rwx /tarena1/ //更改所有者权限为rwx[root@localhost ~]# ls -ld /tarena1/ //查看是否更改成功drwxr-xr-x. 2 gelin01 tarena 4096 2月 26 17:10 /tarena1/
分析: 其他人无任何权限,利用命令chmod o= /tarena1/
[root@localhost ~]# ls -ld /tarena1/ //查看其权限划分情况drwxr-xr-x. 2 gelin01 tarena 4096 2月 26 17:10 /tarena1/[root@localhost ~]# chmod o= /tarena1/ //更改权限o没有任何权限[root@localhost ~]# ls -ld /tarena1/ //查看其权限划分情况drwxr-x---. 2 gelin01 tarena 4096 2月 26 17:10 /tarena1/[root@localhost ~]#
步骤四:使用户gelin02能进入、查看/tarena1文件夹
命令操作如下所示:
[root@localhost ~]# ls -ld /tarena1/ //查看其权限划分情况drwxr-x---. 2 gelin01 tarena 4096 2月 26 17:10 /tarena1/
分析: 首先gelin02这个用户对于tarena1目录的归属关系,因属于其他人,如果想让其能够查看必须要有r权限,想要进入必须要有x权限。可能有同学会想到利用chmod o=rx /tarena1 命令来完成此题,但这样做与上题相违背,所以不可。我们可以换一种方式,我们可以看到此目录的所属组具备rx权限,所以我们可以把gelin02加入到tarena组里,才是此题的正解。
[root@localhost ~]# id gelin02 //查看是否有gelin02用户id: gelin02:无此用户[root@localhost ~]# useradd gelin02 //创建gelin02用户[root@localhost ~]# gpasswd -a gelin02 tarena //将gelin02用户加入组tarenaAdding user gelin02 to group tarena[root@localhost ~]# grep tarena /etc/group //查看是否加入成功tarena:x:502:gelin02[root@localhost ~]# su - gelin02 //切换身份测试[gelin02@localhost ~]$ ls -l /tarena1/ //查看是否具备r权限总用量 0[gelin02@localhost ~]$ cd /tarena1/ //查看是否具备x权限[gelin02@localhost tarena1]$ pwd/tarena1
步骤五:请将gelin01加入tarena组,并将tarena1目录权限设置为450,测试gelin01用户能否进入该目录
命令操作如下所示:
[root@localhost ~]# grep tarena /etc/group //查看该组成员列表tarena:x:502:gelin02[root@localhost ~]# gpasswd -a gelin01 tarena //将gelin01用户加入tarena组Adding user gelin01 to group tarena[root@localhost ~]# grep tarena /etc/group //查看该组成员列表是否加入成功tarena:x:502:gelin02,gelin01[root@localhost ~]# ls -ld /tarena1/ //查看其权限划分情况drwxr-x---. 2 gelin01 tarena 4096 2月 26 17:10 /tarena1/[root@localhost ~]# chmod 450 /tarena1/ //更改权限[root@localhost ~]# ls -ld /tarena1/ //查看其权限划分情况dr--r-x---. 2 gelin01 tarena 4096 2月 26 17:10 /tarena1/
分析: 此时注意首先归属关系要清楚,gelin01是所有者而gelin01又属于tarena组,那接下来在看所有者权限是只读权限只有一个r权限,而所属组成员所具备的的是rx权限,这个时候我们要想一想了,现在权限发生不一致的情况,那么gelin01具备什么权限呢?是r还是rx。我们可以测试一下。
[root@localhost ~]# su - gelin01 //切换用户身份测试[gelin01@localhost ~]$ ls /tarena1/ //查看是否具备r权限[gelin01@localhost ~]$ //可以看到具备r权限[gelin01@localhost ~]$ cd /tarena1/ //能够切换成功说明是rx,否则是只读r权限-bash: cd: /tarena1/: 权限不够
分析: 很明显不能够切换成功,是只读权限。这里告诉大家Linux对于权限判别的一个优先顺序,是所有者>所属组>其他人,也就是说首先Linux系统判别的是你属于本目录的归属关系的哪一种,首先看你是不是所有者,再看你是不是所属组,最后看你是不是其他人。就拿本题来举例,首先看gelin01是不是所有者,可以看出gelin01是所有者那么权限直接就按照所有者的权限执行,也不会再看后面。也不会所有者权限与所属组权限取交或并,本题目的是让大家记住和体会Linux对于权限判别的一个优先顺序。
SUID是Linux特殊权限的一种,能够用来传递可执行程序所有者的身份及具备所有者的权限。
注意事项:只针对可执行程序文件、可执行程序所有者必须具备可执行权限、显示占用的是所有者的x位置。
实现此案例需要按照如下步骤进行。
步骤一:将mkdir命令复制为/bin/mymd1,添加SUID
分析: 要想复制mkdir命令程序并改名,首先得找到该命令的绝对路径。可以利用which命令搜索。
[root@localhost ~]# which mkdir //利用which找到mkdir命令的绝对路径/bin/mkdir[root@localhost ~]# cp /bin/mkdir /bin/mymd1 //复制并改名[root@localhost ~]# ls -l /bin/mymd1 //查看是否生成mymd1-rwxr-xr-x. 1 root root 49384 2月 27 10:34 /bin/mymd1[root@localhost ~]# chmod u+s /bin/mymd1 //添加SUID权限[root@localhost ~]# ls -l /bin/mymd1 //查看是否添加成功-rwsr-xr-x. 1 root root 49384 2月 27 10:34 /bin/mymd1
步骤二:以用户zhangsan登入,做下列测试:在其家目录下分别使用mkdir、mymd1命令尝试创建snew01、snew02
[root@localhost ~]# id zhangsan //查看zhangsan用户是否存在uid=500(zhangsan) gid=500(zhangsan) 组=500(zhangsan)[root@localhost ~]# su – zhangsan //切换用户身份测试[zhangsan@localhost ~]$ ls -l /bin/mkdir //查看mkdir命令程序权限的划分-rwxr-xr-x. 1 root root 49384 10月 17 2013 /bin/mkdir //可以看到没有SUID[zhangsan@localhost ~]$ mkdir snew01 //创建测试目录snew01[zhangsan@localhost ~]$ ls -ld snew01/ //查看snew01权限及归属关系drwxrwxr-x. 2 zhangsan zhangsan 4096 2月 27 10:40 snew01/ //属主与属组均是zhangsan[zhangsan@localhost ~]$ ls -l /bin/mymd1 //查看mymd1命令程序权限的划分-rwsr-xr-x. 1 root root 49384 2月 27 10:34 /bin/mymd1 //可以看到具备SUID[zhangsan@localhost ~]$ mymd1 snew02 //创建测试目录snew02[zhangsan@localhost ~]$ ls -ld snew02 //查看snew02权限及归属关系drwxrwxr-x. 2 root zhangsan 4096 2月 27 10:47 snew02
SGID是Linux特殊权限的一种,其作用主要体现如下:
1) 在一个具有SGID权限的目录下,新建的文档会自动继承此目录的属组身份。
注意事项:对可执行的程序/目录有效、可执行程序所属组必须具备可执行权限、显示占用的是所属组的x位置。
实现此案例需要按照如下步骤进行。
步骤一:创建/nsdpublic目录,将属组改为tarena
命令操作如下所示:
[root@localhost ~]# mkdir /nsdpublic //创建测试目录[root@localhost ~]# ls -ld /nsdpublic/ //查看权限及归属关系drwxr-xr-x. 2 root root 4096 2月 27 11:27 /nsdpublic/[root@localhost ~]# grep tarena /etc/group //查看tarena组是否存在tarena:x:502:gelin02,gelin01[root@localhost ~]# chown :tarena /nsdpublic/ //更改目录所属组为tarena组[root@localhost ~]# ls -ld /nsdpublic/ //查看是否修改成功drwxr-xr-x. 2 root tarena 4096 2月 27 11:27 /nsdpublic/
步骤二:新建子目录nsd01、子文件,查看两者的权限及归属
命令操作如下所示:
[root@localhost ~]# mkdir /nsdpublic/nsd01 //在nsdpublic目录下创建nsd01目录[root@localhost ~]# touch / //在nsdpublic目录下创建测试文件[root@localhost ~]# ls -l /nsdpublic/ //查看归属关系其属组均为root组总用量 4drwxr-xr-x. 2 root root 4096 2月 27 11:49 nsd01-rw-r--r--. 1 root root 0 2月 27 11:
步骤三:为此目录添加SGID权限,再新建子目录nsd02、子文件
命令操作如下所示:
[root@localhost ~]# chmod g+s /nsdpublic/ //为nsdpublic添加SGID权限[root@localhost ~]# ls -ld /nsdpublic/ //查看设置成功drwxr-sr-x. 3 root tarena 4096 2月 27 11:50 /nsdpublic/[root@localhost ~]# mkdir /nsdpublic/nsd02[root@localhost ~]# touch /[root@localhost ~]# ls -l /nsdpublic/ 总用量 8drwxr-xr-x. 2 root root 4096 2月 27 11:49 nsd01drwxr-sr-x. 2 root tarena 4096 2月 27 11:57 nsd02-rw-r--r--. 1 root root 0 2月 27 11:-rw-r--r--. 1 root tarena 0 2月 27 11:
分析: 可以看到当nsdpublic目录具备SGID权限时,之前创建的nsd01与其所属组均为发生变化,但新创建的nsd02与两者都继承的所属组身份及权限,其中还需注意的一点是我们也可以看到nsd02子目录也同样继承了SGID权限。
Sticky权限是Linux特殊权限的一种,主要用来对公共目录的w权限进行限制。
注意事项:适用于目录,用来限制用户滥用写入权、其他人必须具备可执行权限、显示占用的是其他人的x位置。
实现此案例需要按照如下步骤进行。
步骤一:为/tarena/public/目录设权限777,并添加粘滞位
命令操作如下所示:
[root@localhost ~]# mkdir -p /tarena/public //创建多级目录[root@localhost ~]# ls -R /tarena //递归查看目录结构/tarena:public/tarena/public:[root@localhost ~]# ls -ld /tarena/public //查看权限的划分情况drwxr-xr-x. 2 root root 4096 2月 27 14:47 /tarena/public/[root@localhost ~]# chmod 777 /tarena/public //设置权限为777[root@localhost ~]# ls -ld /tarena/public //查看设置结果drwxrwxrwx. 2 root root 4096 2月 27 14:47 /tarena/public/[root@localhost ~]# chmod o+t /tarena/public //设置特殊权限t权限[root@localhost ~]# ls -ld /tarena/public //查看设置结果drwxrwxrwt. 2 root root 4096 2月 27 14:47 /tarena/public/[root@localhost ~]#
步骤二:以用户zhangsan登入,在/tarena/public/目录下创建文件zhsfile2
命令操作如下所示:
[root@localhost ~]# id zhangsan //查看zhangsan用户是否存在uid=500(zhangsan) gid=500(zhangsan) 组=500(zhangsan)[root@localhost ~]# su – zhangsan //切换用户身份测试[zhangsan@localhost ~]$ touch /tarena/public/zhsfile2[zhangsan@localhost ~]$ ls -l /tarena/public //测试是否创建成功总用量 0-rw-rw-r--. 1 zhangsan zhangsan 0 2月 27 14:57 zhsfile2[zhangsan@localhost ~]$
步骤三:以用户lisi登入,在/tarena/public/目录下创建文件lsfile2
命令操作如下所示:
[root@localhost ~]# id lisi //查看lisi用户是否存在uid=503(lisi) gid=504(lisi) 组=504(lisi)[root@localhost ~]# su – lisi //切换用户身份[lisi@localhost ~]$ touch /tarena/public/lsfile2 [lisi@localhost ~]$ ls -l /tarena/public //测试是否创建成功总用量 0-rw-rw-r--. 1 lisi lisi 0 2月 27 15:03 lsfile2-rw-rw-r--. 1 zhangsan zhangsan 0 2月 27 14:57 zhsfile2[lisi@localhost ~]$
步骤四:查看文件zhsfile2、lsfile2的权限和归属
命令操作如下所示:
[lisi@localhost ~]$ ls -l /tarena/public/ 总用量 0-rw-rw-r--. 1 lisi lisi 0 2月 27 15:03 lsfile2-rw-rw-r--. 1 zhangsan zhangsan 0 2月 27 14:57 zhsfile2[lisi@localhost ~]$
步骤五:尝试删除zhsfile2、lsfile2文件(以lisi身份)
命令操作如下所示:
[lisi@localhost ~]$ whoami //查看当前用户身份Lisi[lisi@localhost ~]$ ls -ld /tarena/public //查看目录权限drwxrwxrwt. 2 root root 4096 2月 27 15:07 /tarena/public/[lisi@localhost ~]$ ls -l /tarena/public总用量 0-rw-rw-r--. 1 lisi lisi 0 2月 27 15:03 lsfile2-rw-rw-r--. 1 zhangsan zhangsan 0 2月 27 14:57 zhsfile2[lisi@localhost ~]$ rm -rf /tarena/public/lsfile2 //删除lisi自己文件[lisi@localhost ~]$ rm -rf /tarena/public/zhsfile2 //删除其他用户的文件rm: 无法删除"/tarena/public/zhsfile2": 不允许的操作
并不是所有的分区都支持ACL策略设置,后续会学习怎样让一个分区支持ACL。在安装系统时划分的分区默认是支持ACL策略的,而如果该分区是在安装系统之后创建的默认是不支持的。
ACL策略应用的情况是,当所有者、所属组、其他人三个归属关系,三种身份的权限都不能满足某个用户或组的权限设置。这个时候ACL可以为这个用户或组单独设置权限,使Linux权限划分设置更加灵活。
实现此案例需要按照如下步骤进行。
步骤一:创建账户:mike、john、kaka
命令操作如下所示:
[root@localhost ~]# useradd mike[root@localhost ~]# useradd john[root@localhost ~]# useradd kaka
步骤二:创建文件:/
命令操作如下所示:
[root@localhost ~]# touch /[root@localhost ~]# ls -l /-rw-r--r--. 1 root root 0 2月 27 15:38 /
步骤三:mike对文件有读写权限,john只有读权限。其他用户没有任何权限
分析: 此题涉及到三种不同的权限,我们可以这样来做,让mike来做所有者,让john属于此文件所属组成员,当然其他人就好说了直接设置即可。
命令操作如下所示:
[root@localhost ~]# ls -l / //查看权限及归属关系-rw-r--r--. 1 root root 0 2月 27 15:38 /[root@localhost ~]# chown mike:john / //更改所有者与所属组[root@localhost ~]# ls -l / //查看更改结果-rw-r--r--. 1 mike john 0 2月 27 15:38 /[root@localhost ~]# chmod o= / //设置权限,其他人无权限[root@localhost ~]# ls -l / //查看呢设置结果-rw-r-----. 1 mike john 0 2月 27 15:38 /[root@localhost ~]#
步骤四:kaka具有与john相同权限
分析: 我们可以把kaka加入到john组里面
命令操作如下所示:
[root@localhost ~]# id kaka //查询kaka用户信息uid=506(kaka) gid=507(kaka) 组=507(kaka)[root@localhost ~]# gpasswd -a kaka john //将kaka用户加入到john组Adding user kaka to group john[root@localhost ~]# id kaka //查询kaka用户信息uid=506(kaka) gid=507(kaka) 组=507(kaka),506(john)[root@localhost ~]#
步骤五:创建lily,lily对具有读执行权限,其他用户没有任何权限
分析: 这个时候就出现基本权限及归属关系不能解决,首先所有者已确定是mike,所属组权限rw所以也不行,最后其他人上面题有要求无任何权限。所以ACL策略就派上用场了。
命令操作如下所示:
[root@localhost ~]# echo 123456 > / //写入测试文字[root@localhost ~]# cat / //管理员测试123456[root@localhost ~]# id lily //查询是否存在lily用户id: lily:无此用户[root@localhost ~]# useradd lily //创建lily用户[root@localhost ~]# su – lily //切换用户身份[lily@localhost ~]$ cat / //测试在没有设置ACL前lily能否查看cat: /: 权限不够[lily@localhost ~]$ exit //退到root用户身份logout[root@localhost ~]# getfacl / //查看文件ACL策略getfacl: Removing leading '/' from absolute path names# file: # owner: mike# group: johnuser::rw-group::r--other::---[root@localhost ~]# setfacl -m u:lily:r / //设置ACL策略[root@localhost ~]# getfacl / //查看ACL策略getfacl: Removing leading '/' from absolute path names# file: # owner: mike# group: johnuser::rw-user:lily:r--group::r--mask::r--other::---[root@localhost ~]# su – lily //切换用户[lily@localhost ~]$ cat / //测试是否具有r权限123456
本文发布于:2024-01-30 02:11:50,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170655191218502.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |