网络安全学习内容
六、文件权限
一、文件权限与归属
1.Linux系统中一切都是文件,文件和目录的所属与权限——来分别规定所有者、所有组、其余人的读,写,执行权限。
读(read),写(write),执行e(xecute)简写即为(r,w,x),亦可用数字(4,2,1)表示
-:普通文件,d:目录文件,l:链接文件,b:块设备文件,c:字符设备文件,p:管道文件
2.例如下图中的文件所有者(属主)为root,所有组(属组)为root,文件名为instsall.log,权限位的第一个减号”–“代表的是文件类型:
-:普通文件,d:目录文件,l:链接文件,b:块设备文件,c:字符设备文件,p:管道文件
文件的权限为rw-r–r–也就是分别表示所有者(属主)有读写权限,所有组(属组)有读权限,其余人也仅有读权限。
普通文件即实际保存数据的地方,其并不具备删除自身的权限:
r:可读取文件的实际内容
w:可编辑/新增/修改该文件的实际内容
x:可被执行
目录文件即保存有目录结构和文件权限:
r:可读取目录结构和权限
w:可更改目录结构列表、新建/删除/重命名/转移子文件/目录。
x:表示用户可进入到该目录中
二、文件的特殊权限
单纯对文件位置的rwx权限肯定不能满足我们对安全、便捷工作的需求,所以便有了SUID与SGID的特殊权限机制。
1.SUID:让执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
比如所有用户都可以执行用于修改用户密码的passwd命令,但用户密码保存在/etc/shadow文件中,默认权限是000即除了超级用户root外的所有用户都没有查看或编辑该文件的权限,所以对passwd命令加上SUID权限位,则可让普通用户临时获得程序所有者的身份,即以root用户的身份将变更的密码信息写入到shadow文件中。
2.SGID:
功能一:让执行者临时拥有属组的权限(对拥有执行权限的二进制程序设置)
举例来说/dev/kmem是一个字符设备文件,用于存储内核程序要访问的数据,权限为:
cr–r—– 1 root system 2, 1 Feb 11 2015 kmem
读者们看出问题了吗?除了以root身份或system组成员的用户都没有读取该文件的权限,但用户又需要使用系统的ps命令来查看系统进程状态,所以为了让用户能够获取到系统状态信息,ps命令的权限被加了SGID位:
-r-xr-sr-x 1 bin system 59346 Feb 11 2015 ps
这样因为被给予了SGID权限,所以当用户执行了ps命令,实际有效用户组就是system啦,于是便能够顺利的读取设备文件啦~
功能二:在该目录中创建的文件自动继承此目录的用户组(只可以对目录设置)
比如我们将某个部门的工作目录给予了SGID权限,这样所有人创建的文件都归相同的工作组,这样方便以后的管理。
chmod命令用于修改文件或目录的权限,格式为:”chmod [参数] 权限 文件或目录名称”。
chown命令用于修改文件或目录的所属主与所属组,格式为:“chown [参数] 所属主:所属组 文件或目录名称”。
chmod与chown的命令参数很简单记——对于文件不加参数,遇到目录加大写-R(递归,修改目录内所有文件的属性)。
创建工作目录并给予GID权限:
[root@linuxprobe ~]# cd /tmp
[root@linuxprobe tmp]# mkdir testdir
[root@linuxprobe tmp]# ls -ald testdir/
drwxr-xr-x. 2 root root 6 Feb 11 11:50 testdir/
[root@linuxprobe tmp]# chmod -Rf 777 testdir/
[root@linuxprobe tmp]# chmod -Rf g+s testdir/
[root@linuxprobe tmp]# ls -ald testdir/
drwxrwsrwx. 2 root root 6 Feb 11 11:50 testdir/
切换至普通用户linuxprobe,在该目录创建文件:
[root@linuxprobe tmp]# su - linuxprobe
Last login: Wed Feb 11 11:49:16 CST 2015 on pts/0
[linuxprobe@linuxprobe ~]$ cd /tmp/testdir/
[linuxprobe@linuxprobe testdir]$ echo "linuxprobe.com" > test
[linuxprobe@linuxprobe testdir]$ ls -al
total 8
drwxrwsrwx. 2 root root 17 Feb 11 11:50 .
drwxrwxrwt. 18 root root 4096 Feb 11 11:50 ..
-rw-rw-r--. 1 linuxprobe root 15 Feb 11 11:50 test
3.SBIT(Sticky Bit):只可管理自己的数据而不能删除他人文件(仅对目录有效)
一般老师希望学生可以将作业上传到某个特定目录——但为了避免某些小破坏份子,想限制删除其他人文件的话,那就要设置SBIT位了,当然也可以叫做特殊权限位之粘滞位。
切换至普通用户,进入tmp目录:
[root@linuxprobe tmp]# su - linuxprobe
Last login: Wed Feb 11 12:41:20 CST 2015 on pts/0
[linuxprobe@linuxprobe ~]$ cd /tmp
查看目录权限,最后的t就是代表的粘滞位:
[linuxprobe@linuxprobe tmp]$ ls -ald
drwxrwxrwt. 17 root root 4096 Feb 11 13:03 .
创建一个文件吧:
[linuxprobe@linuxprobe tmp]$ echo "for test " > test
[linuxprobe@linuxprobe tmp]$ chmod -Rf 777 test
给予这个文件最大的权限(rwxrwxrwx,777):
[linuxprobe@linuxprobe tmp]$ ls -al test
-rwxrwxrwx. 1 linuxprobe linuxprobe 10 Feb 11 12:59 test
此时切换到普通用户blackshield尝试删除该文件:
[root@linuxprobe tmp]# su - blackshield
Last login: Wed Feb 11 12:41:29 CST 2015 on pts/1
[blackshield@linuxprobe ~]$ cd /tmp
[blackshield@linuxprobe tmp]$ rm test
rm: remove write-protected regular file ‘test’? y
rm: cannot remove ‘test’: Operation not permitted
删除该文件时会提示错误,所以即便权限很充足,但因为特殊权限SBIT的缘故所以依然无法删除其他人的文件。
三、su命令与sudo服务
1.su命令用于变更使用者的身份(切换登陆者),格式为:“su [-] 用户名”。
root用户切换到其他用户时无需输入密码,尝试切换到普通用户linuxprobe:
[root@linuxprobe ~]# su linuxprobe
成功切换后查看环境变量:
[linuxprobe@linuxprobe root]$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
普通用户再切换用户需要输入对方帐户密码才可以:
[linuxprobe@linuxprobe root]$ su root
Password:
若需将环境变量改变为新用户的,请加参数”-“:
[root@linuxprobe ~]# su - linuxprobe
Last login: Mon Aug 24 19:27:09 CST 2015 on pts/0
再次查看环境变量:
[linuxprobe@linuxprobe ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/linuxprobe/.local/bin:/home/linuxprobe/bin
从su切换用户模式中退出:
[linuxprobe@linuxprobe ~]$ exit
logout
回到root用户的身份:
[root@linuxprobe ~]#
2.sudo命令用于给普通用户提供额外权利来完成原本超级用户才能完成的任务,格式为:“sudo [参数] 命令名称”。
上面su命令允许普通用户完全变更为超级管理员的身份,但这也无疑会让系统增添很多的安全隐患,我们使用sudo程序可以仅将特定的命令/程序执行权限赋予给指定的用户,同时也避免了过多使用root身份,只要合理的配置sudo功能便可以合理的兼顾系统的安全性和用户便捷性,给读者的原则:
在保证普通用户完成工作的前提下,尽可能少的给予额外的权限。
总结来说sudo的特色功能有:
1:限制用户执行指定的命令。
2:记录用户执行的每一条命令。
3:配置文件(/etc/sudoers)提供集中的管理用户、权限与主机等参数。
4:验证过密码后5分钟(默认值)内无须再让用户验证密码,更加的方便。
sudo命令的常用参数包括有:
参数 |
作用 |
-h |
列出帮助信息。 |
-l |
列出当前用户可执行的命令。 |
-u 用户名或UID值 |
以指定的用户身份执行命令。 |
-k |
清空安全时间,下次执行sudo时需要再次密码验证。 |
-b |
在后台执行指定的命令。 |
-p |
更改询问密码的提示语。 |
四、文件访问控制列表
ACL就是设置指定的特定用户或用户组对某个文件的操作权限。
1.setfacl命令用于增加或者修改ACL规则,格式为:”setfacl [参数] 文件”。
参数 |
作用 |
-R |
递归(对目录使用) |
-m |
设置文件的acl规则 |
-b |
删除acl规则 |
getfacl命令用于显示文件的ACL规则,格式为:”getfacl 文件”。
[root@linuxprobe ~]# getfacl /root
当然现在还不能用,等下次细讲!!!