文件、目录权限和正则表达式练习

文件和目录的权限


权限 

文件系统的权限针对以下三类对象进行定义:

owner:属主,u 
group:属组,g 
other:其他,o

每个文件针对其访问者定义的三种普通权限:

r:readable 读取权限 
w:writable 写入权限 
x:executable 执行权限

三种权限对于目录和文件的意义:

  • 对于文件而言:
    • r:可以使用文件查看类工具获取其内容
    • w:可修改其内容
    • x:可以把此文件提请内核启动一个进程
  • 对于目录而言: 
    • r:可以使用ls来查看此目录中的文件列表
    • w:可在此目录中创建文件,也可以删除此目录中的文件
    • x:可以使用ls -l来查看此目录中文件列表,可cd进入此目录

权限的组合机制:

--- 000 0 
--x 001 1 
-w- 010 2 
-wx 011 3 
r-- 100 4 
r-x 101 5 
rw- 110 6 
rwx 111 7 

chmod


chmod命令用于更改文件、目录的权限。 
语法

  • chmod [option] MODE[,MODE]… file..
  • chmod [option] 760 file 760是权限的8进制表示法:rwxrw—
  • chmod [option] –reference=参考文件 file…

选项

  • -R:递归,将子目录中的文件权限一起修改

MODE

  • 赋权表示法:
    • u=权限
    • g=权限
    • o=权限
    • a=权限
  • 授权表示法: 
    • u+|-权限..
    • g+|-权限..
    • o+|-权限..
    • a+|-权限..

实例

[root@localhost ~]# ll modetest.txt 
-rw-r--r--. 1 root root 0 9月 7 16:46 modetest.txt 
[root@localhost ~]# chmod u=rwx modetest.txt 
[root@localhost ~]# ll modetest.txt 
-rwxr--r--. 1 root root 0 9月 7 16:46 modetest.txt 
[root@localhost ~]# chmod g=rx modetest.txt 
[root@localhost ~]# ll modetest.txt 
-rwxr-xr--. 1 root root 0 9月 7 16:46 modetest.txt 
[root@localhost ~]# chmod -x modetest.txt 
[root@localhost ~]# ll modetest.txt 
-rw-r--r--. 1 root root 0 9月 7 16:46 modetest.txt 
[root@localhost ~]# chmod o-r modetest.txt 
[root@localhost ~]# ll modetest.txt 
-rw-r-----. 1 root root 0 9月 7 16:46 modetest.txt 
[root@localhost ~]# chmod 764 modetest.txt 
[root@localhost ~]# ll modetest.txt 
-rwxrw-r--. 1 root root 0 9月 7 16:46 modetest.txt 

chown

chown命令用于修改文件的属主。 
语法

chown [option]… [OWNER][:[GROUP]] file.. 
其中:[OWNER][:[GROUP]]有三种表示方法 
1、 OWNER 只修改属主 
2、 OWNER:GROUP 修改属主和属组 
3、 GROUP 修改属组

选项

  • -R:递归

示例

[root@localhost ~]# ll modetest.txt 
-rw-r--r--. 1 root root 0 9月 7 16:46 modetest.txt 
[root@localhost ~]# chown wxq:wxq modetest.txt 
[root@localhost ~]# ll modetest.txt 
-rwxrw-r--. 1 wxq wxq 0 9月 7 16:46 modetest.txt 

chgrp

chgrp用于修改文件的属组 
语法

chgrp [option]… [GROUP] FILE…

选项

  • -R:递归。将目录下的子目录及其文件的权限一起修改

文件系统上的特殊权限

在Linux文件系统上有三种特殊权限,分别是:SUID、SGID、Sticky。 
进程安全上下文 
前提:进程有属主和属组,文件有属主和属组。

  • 任何一个可执行程序文件能否启动为进程,却绝育发起这对程序文件是否拥有执行权限。
  • 进程启动后,进程以起发起者的身份运行,进程的属主为发起者,进程的属组为发起者的所属的组。进程对文件的访问权限,取决于发起此进程的用户的权限。
  • 进程对文件的访问权限: 
    进程的属主与文件的属主是否相同,如果相同则应用属主权限,否则则检查进程的属主是否属于文件的属组,如果是则应用属组权限,否则应用other的权限。

SUID 
在默认情况下,用户发起的进程,进程的属主是其发起者,进程以发起者的身份运行。 
而SUID的作用在于:用户启动某程序后,如果此程序拥有SUID权限,那么此进程的属主为原程序文件自身的属主,而不是其进程的发起者。

权限设定:

chmod u+s FILE… 
chmod u-s FILE…

此权限的展示位置是在属主的执行权限位,如果属主原本有执行权限时显示为小写的s;原属主没有执行权限时显示为大写的S。

SGID 
默认情况下,用户创建文件时,其属组为此用户所属的基本组。 
若目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组。

权限设定:

chmod g+s DIR... 
chmod g-s DIR...

此权限的展示位置是在属组的执行权限位,如果属组原本有执行权限时显示为小写的s;原属组没有执行权限时显示为大写的S

Sticky 
对于属组或者全局可写的目录,组内的所有用户或系统上的所有用户对此目录都能创建文件和删除文件,若设置了Sticky权限,则每个用户能创建新文件,且仅能删除自己的文件。

权限设定:

chmod o+t DIR… 
chmod o-t DIR…

此权限的展示位置:其他用户的执行权限位, 
如果其他用户原本有执行权限时显示为t;原其他用户组没有执行权限时显示为大写的T

管理特殊权限 
三个特殊权限位组成一组权限,即:suidsgidsticky。可表示为:

二进制表示法 八进制表示法
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

基于八进制方式赋权时,可用于默认的三位八进制数字左侧再加以为八进制数字:

例如:chmod 4755 /path/to/dir 其中4为一组特殊权限,二进制表示为100,代表特殊权限SUID

 


练习


1、 复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。

[root@localhost ~]# cp -r /etc/skel /home/tuser1 
[root@localhost ~]# ll -d /home/tuser1 
drwxr-xr-x. 3 root root 78 9月 7 17:03 /home/tuser1 
[root@localhost ~]# ll -a /home/tuser1 
总用量 12 
drwxr-xr-x. 3 root root 78 9月 7 17:03 . 
drwxr-xr-x. 4 root root 31 9月 7 17:03 .. 
-rw-r--r--. 1 root root 18 9月 7 17:03 .bash_logout 
-rw-r--r--. 1 root root 193 9月 7 17:03 .bash_profile 
-rw-r--r--. 1 root root 231 9月 7 17:03 .bashrc 
drwxr-xr-x. 4 root root 39 9月 7 17:03 .mozilla 
[root@localhost ~]# chmod -R 700 /home/tuser1 
[root@localhost ~]# ll -d /home/tuser1 
drwx------. 3 root root 78 9月 7 17:03 /home/tuser1 
[root@localhost ~]# ll -a /home/tuser1 
总用量 12 
drwx------. 3 root root 78 9月 7 17:03 . 
drwxr-xr-x. 4 root root 31 9月 7 17:03 .. 
-rwx------. 1 root root 18 9月 7 17:03 .bash_logout 
-rwx------. 1 root root 193 9月 7 17:03 .bash_profile 
-rwx------. 1 root root 231 9月 7 17:03 .bashrc 
drwx------. 4 root root 39 9月 7 17:03 .mozilla 

2、 编辑/etc/group文件,添加组hadoop。

[root@localhost ~]# vim + /etc/group 
slocate:x:21: 
postdrop:x:90: 
postfix:x:89: 
tcpdump:x:72: 
wxq:x:1000:wxq 
hadoop:x:1001: 
[root@localhost ~]# tail -1 /etc/group 
hadoop:x:1001: 

3、 手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。

[root@localhost ~]# vim + /etc/passwd 
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin 
root:x:0:0:root:/root:/bin/bash 
bin:x:1:1:bin:/bin:/sbin/nologin 
postfix:x:89:89::/var/spool/postfix:/sbin/nologin 
tcpdump:x:72:72::/:/sbin/nologin 
wxq:x:1000:1000:wxq:/home/wxq:/bin/bash 
hadoop:x:1001:1001:hadoop:/home/hadoop:/bin/bash 
[root@localhost ~]# tail -1 /etc/passwd 
hadoop:x:1001:1001:hadoop:/home/hadoop:/bin/bash 
[root@localhost ~]# id hadoop 
uid=1001(hadoop) gid=1001(hadoop) 组=1001(hadoop) 

4、 复制/etc/skel目录为/home/hadoop,要求修改hadoop目录的属组和其它用户没有任何访问权限。

[root@localhost ~]# cp -r /etc/skel /home/hadoop 
[root@localhost ~]# ll -d /home/hadoop 
drwxr-xr-x. 3 root root 78 9月 7 18:13 /home/hadoop 
[root@localhost ~]# ll -a /home/hadoop 
总用量 12 
drwxr-xr-x. 3 root root 78 9月 7 18:13 . 
drwxr-xr-x. 5 root root 45 9月 7 18:13 .. 
-rw-r--r--. 1 root root 18 9月 7 18:13 .bash_logout 
-rw-r--r--. 1 root root 193 9月 7 18:13 .bash_profile 
-rw-r--r--. 1 root root 231 9月 7 18:13 .bashrc 
drwxr-xr-x. 4 root root 39 9月 7 18:13 .mozilla 
[root@localhost ~]# chmod go=--- /home/hadoop 
[root@localhost ~]# ll -d /home/hadoop 
drwx------. 3 root root 78 9月 7 18:13 /home/hadoop 

5、 修改/home/hadoop目录及其内部所有文件的属主为hadoop,属组为hadoop。

[root@localhost ~]# ll -d /home/hadoop 
drwx------. 3 root root 78 9月 7 18:13 /home/hadoop 
[root@localhost ~]# chown -R hadoop:hadoop /home/hadoop 
[root@localhost ~]# ll -d /home/hadoop 
drwx------. 3 hadoop hadoop 78 9月 7 18:13 /home/hadoop 
[root@localhost ~]# ll -A /home/hadoop 
总用量 12 
-rw-r--r--. 1 hadoop hadoop 18 9月 7 18:13 .bash_logout 
-rw-r--r--. 1 hadoop hadoop 193 9月 7 18:13 .bash_profile 
-rw-r--r--. 1 hadoop hadoop 231 9月 7 18:13 .bashrc 
drwxr-xr-x. 4 hadoop hadoop 39 9月 7 18:13 .mozilla 

6、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式;

[root@localhost ~]# grep "^[sS] " /proc/meminfo 
SwapCached: 0 kB 
SwapTotal: 3145724 kB 
SwapFree: 3145724 kB 
Shmem: 15168 kB 
Slab: 155300 kB 
SReclaimable: 79176 kB 
SUnreclaim: 76124 kB 
[root@localhost ~]# grep -i "^[s]" /proc/meminfo 
SwapCached: 0 kB 
SwapTotal: 3145724 kB 
SwapFree: 3145724 kB 
Shmem: 15168 kB 
Slab: 155300 kB 
SReclaimable: 79176 kB 
SUnreclaim: 76124 kB 

7、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;

[root@localhost ~]# grep -v "/sbin/nologin$ " /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
sync:x:5:0:sync:/sbin:/bin/sync 
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 
halt:x:7:0:halt:/sbin:/sbin/halt 
wxq:x:1000:1000:wxq:/home/wxq:/bin/bash 
hadoop:x:1001:1001:hadoop:/home/hadoop:/bin/bash 

8、显示/etc/passwd文件中其默认shell为/bin/bash的用户;

[root@localhost ~]# grep "/bin/bash$ " /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
wxq:x:1000:1000:wxq:/home/wxq:/bin/bash 
hadoop:x:1001:1001:hadoop:/home/hadoop:/bin/bash 

9、找出/etc/passwd文件中的一位数或两位数;

[root@localhost ~]# grep -oE " \<[[:digit:]]{,2}\> " /etc/passwd 
0 
0 
1 
1 
2 
2 
3 
4 
4 
7 

10、显示/boot/grub2/grub.cfg中以至少一个空白字符开头的行;

[root@localhost ~]# grep -E "^[[:space:]]+.* " /boot/grub2/grub.cfg 
load_env 
set default="${next_entry}" set next_entry= save_env next_entry set boot_once=true set default="${saved_entry}" 
menuentry_id_option="--id" 
menuentry_id_option="" 
set saved_entry="${prev_saved_entry}" save_env saved_entry set prev_saved_entry= save_env prev_saved_entry set boot_once=true if [ -z "${boot_once}" ]; then 
saved_entry="${chosen}" save_env saved_entry fi if [ x$feature_all_video_module = xy ]; then 
insmod all_video 
else 
insmod efi_gop 
insmod efi_uga 
insmod ieee1275_fb 
insmod vbe 
insmod vga 
insmod video_bochs 
insmod video_cirrus 

11、显示/etc/grub2.cfg文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

[root@localhost ~]# grep "^#[[:space:]]\+[[:graph:]]\+ " /etc/grub2.cfg 
`# DO NOT EDIT THIS FILE 
`# It is automatically generated by grub2-mkconfig using templates 
`# from /etc/grub.d and settings from /etc/default/grub 
`# Fallback normal timeout code in case the timeout_style feature is 
`# unavailable. 
`# This file provides an easy way to add custom menu entries. Simply type the 
`# menu entries you want to add after this comment. Be careful not to change 
`# the 'exec tail' line above. 

12、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;

[root@localhost ~]# netstat -tan | grep "LISTEN[[:space:]]*$ " 
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 
tcp6 0 0 :::111 :::* LISTEN 
tcp6 0 0 :::22 :::* LISTEN 
tcp6 0 0 ::1:631 :::* LISTEN 
tcp6 0 0 ::1:25 :::* LISTEN 
tcp6 0 0 ::1:6010 :::* LISTEN 

13、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;

[root@localhost ~]# grep -E "^([[:alpha:]]+):.*\1$ " /etc/passwd 
sync:x:5:0:sync:/sbin:/bin/sync 
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 
halt:x:7:0:halt:/sbin:/sbin/halt 
bash:x:1002:1002::/home/bash:/bin/bash 
nologin:x:1005:1005::/home/nologin:/sbin/nologin 

原创文章,作者:N32_王先桥,如若转载,请注明出处:http://www.178linux.com/123826

评论列表(1条)

  • 马哥教育
    马哥教育 2018-09-13 10:22

    写的很好,如果都可以用多种方式来解答回更好

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code