NSD

  1. 设置基本权限
    问题
  1. 新建/nsddir1/目录,在该目录下新建文件readme.txt
  2. 使用户zhangsan能够在/nsddir1/目录下创建/删除子目录
  3. 使用户zhangsan不能够在/nsddir1/目录下创建/删除子目录
  4. 使用户zhangsan能够修改/nsddir1/readme.txt文件,调整/nsddir1/目录的权限,使任何用户都不能进入该目录,测试用户zhangsan是否还能修/nsddir1/readme.txt文件的内容
  5. 将/nsddir1/目录及其下所有内容的权限都设置为 rwxr-x–

NSD
·方案
设置基本权限的命令主要是chmod,本实验要分清三个基本权限rwx的意义。用户在访问一个目录或文件时,由设置的访问权限+归属关系共同决定最终权限访问权限。
r 读取:允许查看内容-readl
w 写入:允许修改内容-writel
x 可执行:允许运行和切换-excute
若对目录有r权限,表示可列出该目录内容
若对目录有w权限,表示可在该目录下新建/删除/移动文件或子目录。
若对目录有x权限,表示允许cd到该目录下。
·步骤
实现此案例需要按照如下步骤进行。
步骤一:新建/nsddir1/目录,在该目录下新建文件readme.txt
命令操作如下所示:[[email protected] ~]# mkdir /nsddir1
[[email protected] ~]# ls -ld /nsddir1/ //查看是否创建成功
drwxr-xr-x. 2 root root 4096 2月 26 09:55 /nsddir1/
[[email protected] ~]# touch /nsddir1/readme.txt
[[email protected] ~]# ls -l /nsddir1/readme.txt //查看是否创建成功
-rw-r–r--. 1 root root 0 2月 26 09:56 /nsddir1/readme.txt
[[email protected] ~]#
步骤二:使用户zhangsan能够在/nsddir1/目录下创建/删除子目录(此题考查对目录w权限的理解)
命令操作如下所示:
[[email protected] ~]# id zhangsan //查看zhangsan用户是否存在
id: zhangsan:无此用户
[[email protected] ~]# useradd zhangsan //创建zhangsan用户
[[email protected] ~]# ls -ld /nsddir1/ //查看nsddir1目录的权限
drwxr-xr-x. 2 root root 4096 2月 26 09:56 /nsddir1/
分析: 首先看zhangsan对于此目录具备有什么权限,zhangsan很明显属于其他人,权限对应为rx,要想让其能够创建、删除子目录,必须让其具备w权限
[[email protected] ~]# su – zhangsan //切换zhangsan用户测试
[[email protected] ~]$ mkdir /nsddir1/zhangdir //测试是否有权限创建
mkdir: 无法创建目录"/nsddir1/zhangdir": 权限不够
[[email protected] ~]KaTeX parse error: Expected 'EOF', got '#' at position 24: …[email protected] ~]#̲ chmod o+w /nsd… mkdir /nsddir1/zhangdir //测试是否有权限创建
[[email protected] ~]$ ls /nsddir1/ //查看是否创建成功readme.txt zhangdir
[[email protected] ~]$
步骤三:使用户zhangsan不能够在/nsddir1/目录下创建/删除子目录(此题考查对目录w权限的理解)
[[email protected] ~]# chmod o-w /nsddir1/ //为其他人去掉W权限
[[email protected] ~]# ls -ld /nsddir1/ //查看是否成功
drwxr-xr-x. 2 root root 4096 2月 26 09:56 /nsddir1/
[[email protected] ~]# su – zhangsan //切换zhangsan用户测试
[[email protected] ~]$ mkdir /nsddir1/zhangdir //测试是否有权限创建
mkdir: 无法创建目录"/nsddir1/zhangdir": 权限不够
步骤四:使用户zhangsan能够修改/nsddir1/readme.txt文件,调整/nsddir1/目录的权限,使任何用户都不能进入该目录,测试用户zhangsan是否还能修/nsddir1/readme.txt文件的内容。
分析: 首先要解决zhangsan用户能够修改readme.txt内容
命令操作如下所示:
[[email protected] ~]# ls -ld /nsddir1/readme.txt //查看readme.txt文件的权限
-rw-r–r--. 1 root root 0 2月 26 09:56 /nsddir1/readme.txt
分析: 首先看zhangsan对于此目录具备有什么权限,zhangsan很明显是其他人的权限是r权限,在想如何实现让zhangsan修改其内容,需加w权限
[[email protected] ~]# su – zhangsan //切换zhangsan用户测试
[[email protected] ~]$ echo 123 > /nsddir1/readme.txt //测试是否有权限写入
-bash: /nsddir1/readme.txt: 权限不够
[[email protected] ~]$ exit
logout
[[email protected] ~]# chmod o+w /nsddir1/readme.txt //添加w权限
[[email protected] ~]# ls -l /nsddir1/readme.txt //查看是否添加成功
-rw-r–rw-. 1 root root 0 2月 26 09:56 /nsddir1/readme.txt
[[email protected] ~]# su – zhangsan //切换zhangsan用户测试
[[email protected] ~]$ echo 123 > /nsddir1/readme.txt //测试是否有权限写入
[[email protected] ~]$ cat /nsddir1/readme.txt //查看写入成功
123
分析: zhangsan能够修改readme.txt内容了。现在设置/nsddir1权限是任何人都不能进入该目录,只需将所有人的x执行权限去掉即可。
命令操作如下所示:
[[email protected] ~]# ls -ld /nsddir1/
drwxr-xr-x. 2 root root 4096 3月 31 11:38 /nsddir1/
[[email protected] ~]# chmod a-x /nsddir1/
[[email protected] ~]# ls -ld /nsddir1/
drw-r–r--. 2 root root 4096 3月 31 11:38 /nsddir1/
[[email protected] ~]# su - zhangsan
[[email protected] ~]$ cd /nsddir1/-bash: cd: /nsddir1/: 权限不够
[[email protected] ~]$ echo 123 > /nsddir1/readme.txt //zhangsan用户无权限修改
-bash: /nsddir1/readme.txt: 权限不够
步骤五:将/nsddir1/目录及其下所有内容的权限都设置为 rwxr-x—(本题主要考察选项-R,依然是利用chmod来完成)
命令操作如下所示:
[[email protected] ~]# chmod -R 750 /nsddir1/ //-R为递归修改
[[email protected] ~]# ls -ld /nsddir1/ //查看目录本身权限是否修改
drwxr-x—. 3 root root 4096 2月 26 16:00 /nsddir1/
[[email protected] ~]# ls -l /nsddir1/ //查看子目录子文件权限是否修改
总用量 8
-rwxr-x—. 1 root root 4 2月 26 16:14 readme.txt
drwxr-x—. 2 zhangsan zhangsan 4096 2月 26 16:00 zhangdir
2. 文件/目录的默认权限
·问题
1)以用户root登入测试umask掩码值
·查看当前的umask值l
·新建目录udir1、文件ufile1,查看默认权限l
·将umask设为077,再新建目录udir2、文件ufile2,查看默认权限l
·请把umask值重新设置为022
2)以用户zhangsan登入,查看当前的umask值
3)请问为什么普通用户的家目录权限都是700
·方案
本题的主要目的主要是让大家能够记住并理解umask值的作用,它决定着这个Shell环境创建文件以及目录的默认权限。
·步骤
实现此案例需要按照如下步骤进行。
步骤一:以用户root登入,测试umask掩码值l
查看当前的umask值l
新建目录udir1、文件ufile1,查看默认权限l
将umask设为077,再新建目录udir2、文件ufile2,查看默认权限l
请把umask值重新设置为022命令操作如下所示:
[[email protected] ~]# whoami //确保自己登录身份是root
root
[[email protected] ~]# umask //查看当前umask值,需用最大权限777减去022
0022
[[email protected] ~]# umask –S //另外一种查看方式,-S选项是直接显示默认权限
u=rwx,g=rx,o=rx
分析: 查看创建目录以及文件的默认权限,是否与umask一致,注意文件默认安全起见没有赋予x执行权限[[email protected] ~]# mkdir /udir1 //创建测试目录
[[email protected] ~]# touch /ufile1 //创建测试文件
[[email protected] ~]# ls -ld /udir1/ //查看是否与umask值相符合
drwxr-xr-x. 2 root root 4096 2月 26 16:37 /udir1/
[[email protected] ~]# ls -l /ufile1 //查看是否与umask值相符合
-rw-r–r--. 1 root root 0 2月 26 16:37 /ufile1
[[email protected] ~]# umask 077 //更改umask值
[[email protected] ~]# umask //查看是否修改成功
0077
[[email protected] ~]# umask –S u=rwx,g=,o=
[[email protected] ~]# mkdir /udir2 //创建测试目录
[[email protected] ~]# touch /ufile2 //创建测试文件
[[email protected] ~]# ls -ld /udir2 //查看是否与umask值相符合
drwx------. 2 root root 4096 2月 26 16:43 /udir2
[[email protected] ~]# ls -l /ufile2 //查看是否与umask值相符合
-rw-------. 1 root root 0 2月 26 16:44 /ufile2
[[email protected] ~]# umask 022 //更改umask值为022
[[email protected] ~]# umask //查看是否修改成功
0022
步骤二:以用户zhangsan登入,查看当前的umask值(本题的目的主要是为了让大家知道管理员与普通用户的默认umask是不同的)
命令操作如下所示:
[[email protected] ~]# umask //查看root的umask值
0022
[[email protected] ~]# su – zhangsan //切换zhangsan用户身份
[[email protected] ~]$ umask //查看zhangsan的umask值
0002
步骤三:请问为什么普通用户的家目录权限都是700
分析: 本题主要考察,useradd这条命令在执行的时候,与那些默认配置文件相关,有两个配置文件分别为/etc/default/useradd、/etc/login.defs。
命令操作如下所示:
[[email protected] ~]# grep -v “^#” /etc/login.defs | grep -v “^KaTeX parse error: Expected 'EOF', got '#' at position 427: …[email protected] ~]#̲ mkdir /tarena1… ls -l /tarena1/ //查看是否具备r权限
总用量 0
[[email protected] ~]$ cd /tarena1/ //查看是否具备x权限
[[email protected] tarena1]$ pwd
/tarena1
步骤五:请将gelin01加入tarena组,并将tarena1目录权限设置为450,测试gelin01用户能否进入该目录
命令操作如下所示:
[[email protected] ~]# grep tarena /etc/group //查看该组成员列表
[[email protected] ~]# gpasswd -a gelin01 tarena //将gelin01用户加入tarena组
Adding user gelin01 to group tarena
[[email protected] ~]# grep tarena /etc/group //查看该组成员列表是否加入成功
tarena❌502:gelin02,gelin01
[[email protected] ~]# ls -ld /tarena1/ //查看其权限划分情况
drwxr-x—. 2 gelin01 tarena 4096 2月 26 17:10 /tarena1/
[[email protected] ~]# chmod 450 /tarena1/ //更改权限
[[email protected] ~]# ls -ld /tarena1/ //查看其权限划分情况
dr–r-x—. 2 gelin01 tarena 4096 2月 26 17:10 /tarena1/
分析: 此时注意首先归属关系要清楚,gelin01是所有者而gelin01又属于tarena组,那接下来在看所有者权限是只读权限只有一个r权限,而所属组成员所具备的的是rx权限,这个时候我们要想一想了,现在权限发生不一致的情况,那么gelin01具备什么权限呢?是r还是rx。我们可以测试一下。
[[email protected] ~]# su - gelin01 //切换用户身份测试
[[email protected] ~]$ ls /tarena1/ //查看是否具备r权限
[[email protected] ~]$ //可以看到具备r权限
[[email protected] ~]$ cd /tarena1/ //能够切换成功说明是rx,否则是只读r权限
-bash: cd: /tarena1/: 权限不够
分析: 很明显不能够切换成功,是只读权限。这里告诉大家Linux对于权限判别的一个优先顺序,是所有者>所属组>其他人,也就是说首先Linux系统判别的是你属于本目录的归属关系的哪一种,首先看你是不是所有者,再看你是不是所属组,最后看你是不是其他人。就拿本题来举例,首先看gelin01是不是所有者,可以看出gelin01是所有者那么权限直接就按照所有者的权限执行,也不会再看后面。也不会所有者权限与所属组权限取交或并,本题目的是让大家记住和体会Linux对于权限判别的一个优先顺序。
4. SUID权限测试
·问题
1)将mkdir命令复制为/bin/mymd1,添加SUID
2) 以用户zhangsan登入,做下列测试:在其家目录下分别使用mkdir、mymd1命令尝试创建snew01、snew02
3) 查看snew01、snew02权限及归属关系
·方案
SUID是Linux特殊权限的一种,能够用来传递可执行程序所有者的身份及具备所有者的权限。
注意事项:只针对可执行程序文件、可执行程序所有者必须具备可执行权限、显示占用的是所有者的x位置。
·步骤
实现此案例需要按照如下步骤进行。
步骤一:将mkdir命令复制为/bin/mymd1,添加SUID
分析: 要想复制mkdir命令程序并改名,首先得找到该命令的绝对路径。可以利用which命令搜索。
[[email protected] ~]# which mkdir //利用which找到mkdir命令的绝对路径
/bin/mkdir
[[email protected] ~]# cp /bin/mkdir /bin/mymd1 //复制并改名
[[email protected] ~]# ls -l /bin/mymd1 //查看是否生成mymd1
-rwxr-xr-x. 1 root root 49384 2月 27 10:34 /bin/mymd1
[[email protected] ~]# chmod u+s /bin/mymd1 //添加SUID权限
[[email protected] ~]# ls -l /bin/mymd1 //查看是否添加成功
-rwsr-xr-x. 1 root root 49384 2月 27 10:34 /bin/mymd1
步骤二:以用户zhangsan登入,做下列测试:在其家目录下分别使用mkdir、mymd1
命令尝试创建snew01、snew02
[[email protected] ~]# id zhangsan //查看zhangsan用户是否存在
uid=500(zhangsan) gid=500(zhangsan) 组=500(zhangsan)
[[email protected] ~]# su – zhangsan //切换用户身份测试
[[email protected] ~]$ ls -l /bin/mkdir //查看mkdir命令程序权限的划分
-rwxr-xr-x. 1 root root 49384 10月 17 2013 /bin/mkdir //可以看到没有SUID
[[email protected] ~]$ mkdir snew01 //创建测试目录snew01
[[email protected] ~]$ ls -ld snew01/ //查看snew01权限及归属关系
drwxrwxr-x. 2 zhangsan zhangsan 4096 2月 27 10:40 snew01/ //属主与属组均是zhangsan
[[email protected] ~]$ ls -l /bin/mymd1 //查看mymd1命令程序权限的划分
-rwsr-xr-x. 1 root root 49384 2月 27 10:34 /bin/mymd1 //可以看到具备SUID
[[email protected] ~]$ mymd1 snew02 //创建测试目录snew02
[[email protected] ~]$ ls -ld snew02 //查看snew02权限及归属关系
drwxrwxr-x. 2 root zhangsan 4096 2月 27 10:47 snew02
分析: 可以看到归属关系中所有者发生变化,继承了mymd1命令程序的所有者root。
5. SGID权限测试
·问题
1将mkdir命令程序复制为/bin/mymd2,为其添加SGID权限,并完成下列操作。
2以用户lisi登入,使用mkdir创建子目录snew01、使用mymd2创建子目录snew02,查看子目录snew01、snew02的权限及归属。
3) 创建/nsdpublic目录,将属组改为tarena。
4新建子目录nsd01、子文件test01.txt,查看两者的权限及归属
5 )为此目录添加SGID权限,再新建子目录nsd02、子文件test02.txt。
6) 查看上述子目录及文件的权限及归属。
·方案
SGID是Linux特殊权限的一种,其作用主要体现如下:
1)能够传递可执行程序所属组的身份及具备所属组的权限。
2) 在一个具有SGID权限的目录下,新建的文档会自动继承此目录的属组身份。注意事项:对可执行的程序/目录有效、可执行程序所属组必须具备可执行权限、显示占用的是所属组的x位置。
·步骤
实现此案例需要按照如下步骤进行。
步骤一:将mkdir命令程序复制为/bin/mymd2,为其添加SGID权限
命令操作如下所示:
[[email protected] ~]# which mkdir //利用which查看mkdir命令的绝对路径
/bin/mkdir
[[email protected] ~]# cp /bin/mkdir /bin/mymd2 //复制并改名
[[email protected] ~]# ls -l /bin/mymd2 //查看是否生成mymd2
-rwxr-xr-x. 1 root root 49384 2月 27 11:06 /bin/mymd2
[[email protected] ~]# chmod g+s /bin/mymd2 //添加SGID权限
[[email protected] ~]# ls -l /bin/mymd2 //查看是否设置成功
-rwxr-sr-x. 1 root root 49384 2月 27 11:06 /bin/mymd2
步骤二:以用户lisi登入,使用mkdir创建子目录snew01、使用mymd2创建子目录snew02,查看子目录snew01、snew02的权限及归属
命令操作如下所示:
[[email protected] ~]# id lisi //查看lisi是否存在
id: lisi:无此用户
[[email protected] ~]# useradd lisi //创建用户
[[email protected] ~]# su – lisi //切换用户身份
[[email protected] ~]$ ls -l /bin/mkdir //查看mkdir命令权限,没有SGID
-rwxr-xr-x. 1 root root 49384 10月 17 2013 /bin/mkdir
[[email protected] ~]$ mkdir snew01 //创建测试目录snew01
[[email protected] ~]$ ls -ld snew01/ //查看权限及归属关系,属主与属组均是lisi
drwxrwxr-x. 2 lisi lisi 4096 2月 27 11:16 snew01/
[[email protected] ~]$ ls -l /bin/mymd2 //查看mkdir命令权限,具备SGID权限
-rwxr-sr-x. 1 root root 49384 2月 27 11:06 /bin/mymd2
[[email protected] ~]$ mymd2 snew02 //创建测试目录snew02
[[email protected] ~]$ ls -ld snew02/ //查看权限及归属关系,属组继承为root组
drwxrwxr-x. 2 lisi root 4096 2月 27 11:20 snew02/
步骤三:创建/nsdpublic目录,将属组改为tarena
命令操作如下所示:
[[email protected] ~]# mkdir /nsdpublic //创建测试目录
[[email protected] ~]# ls -ld /nsdpublic/ //查看权限及归属关系
drwxr-xr-x. 2 root root 4096 2月 27 11:27 /nsdpublic/
[[email protected] ~]# grep tarena /etc/group //查看tarena组是否存在
tarena❌502:gelin02,gelin01
[[email protected] ~]# chown :tarena /nsdpublic/ //更改目录所属组为tarena组
[[email protected] ~]# ls -ld /nsdpublic/ //查看是否修改成功
drwxr-xr-x. 2 root tarena 4096 2月 27 11:27 /nsdpublic/
步骤四:新建子目录nsd01、子文件test01.txt,查看两者的权限及归属
命令操作如下所示:
[[email protected] ~]$ 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
[[email protected] ~]$
步骤五:尝试删除zhsfile2、lsfile2文件(以lisi身份)
命令操作如下所示:
[[email protected] ~]$ whoami //查看当前用户身份
Lisi[[email protected] ~]$ ls -ld /tarena/public //查看目录权限
drwxrwxrwt. 2 root root 4096 2月 27 15:07 /tarena/public/
[[email protected] ~]$ 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
[[email protected] ~]$ rm -rf /tarena/public/lsfile2 //删除lisi自己文件
[[email protected] ~]$ rm -rf /tarena/public/zhsfile2 //删除其他用户的文件
rm: 无法删除”/tarena/public/zhsfile2": 不允许的操作
6. 定义ACL控制策略
·问题
1) 创建账户:mike、john、kaka
2) 创建文件:/data/file1.txt
3) mike对文件有读写权限,john只有读权限。其他用户没有任何权限
4) kaka具有与john相同权限
5) 创建lily用户,lily对file1.txt具有读执行权限,其他用户没有任何权限
方案
并不是所有的分区都支持ACL策略设置,后续会学习怎样让一个分区支持ACL。在安装系统时划分的分区默认是支持ACL策略的,而如果该分区是在安装系统之后创建的默认是不支持的。
ACL策略应用的情况是,当所有者、所属组、其他人三个归属关系,三种身份的权限都不能满足某个用户或组的权限设置。这个时候ACL可以为这个用户或组单独设置权限,使Linux权限划分设置更加灵活。
Ÿ 步骤
实现此案例需要按照如下步骤进行。
步骤一:创建账户:mike、john、kaka
命令操作如下所示:
[[email protected] ~]# useradd mike
[[email protected] ~]# useradd john
[[email protected] ~]# useradd kaka
步骤二:创建文件:/data/file1.txt
命令操作如下所示:
[[email protected] ~]# touch /data/file1.txt
[[email protected] ~]# ls -l /data/file1.txt
-rw-r–r--. 1 root root 0 2月 27 15:38 /data/file1.txt
步骤三:mike对文件有读写权限,john只有读权限。其他用户没有任何权限
分析: 此题涉及到三种不同的权限,我们可以这样来做,让mike来做所有者,让john属于此文件所属组成员,当然其他人就好说了直接设置即可。
命令操作如下所示:
[[email protected] ~]# ls -l /data/file1.txt //查看权限及归属关系
-rw-r–r--. 1 root root 0 2月 27 15:38 /data/file1.txt
[[email protected] ~]# chown mike:john /data/file1.txt //更改所有者与所属组
[[email protected] ~]# ls -l /data/file1.txt //查看更改结果
-rw-r–r--. 1 mike john 0 2月 27 15:38 /data/file1.txt
[[email protected] ~]# chmod o= /data/file1.txt //设置权限,其他人无权限
[[email protected] ~]# ls -l /data/file1.txt //查看呢设置结果
-rw-r-----. 1 mike john 0 2月 27 15:38 /data/file1.txt
[[email protected] ~]#