Linux之用户授权及权限安全
给文件设定权限可以限定使用文件的用户,从而保护文件的安全。Linux中文件的一般权限分为r(读)、w(写)和x(执行)。通过命令ls -l 文件/目录
或者ll 文件/目录
可以查看文件/目录的权限。
以文件file为例,介绍文件权限的查看。
第一位-
表示该文件类型为文件,我们分析后面的rw-rw-r--
。
read | write | execute | |
---|---|---|---|
user | yes | yes | no |
group | yes | yes | no |
other | yes | no | no |
如上表所示,rw-rw-r--
中,前三位表示文件所有者分别对该文件的读、写和可执行权限,中间三位表示用户组分别对该文件的读、写和可执行权限,后三位表示其他用户分别对对该文件的读、写和可执行权限。(目录同理)
修改文件/目录的一般权限
用户对于文件的一般权限是可以修改的,由超级用户root
通过命令chmod
实现。
增删法修改文件/目录的权限
若要修改默认的文件权限,可以使用如下方式:
1.首先要创建一个文件,因为要修改文件的权限,而一个普通用户的Desktop
目录里的文件对其他用户是不可见的,为了演示修改权限后文件的效果,重新在mnt
目录下新建一个文件file。
如图,该命令不被允许,我们查一下mnt
目录的权限:
由图可知mnt
目录的所有者和所在组均为root
,对于其他用户没有写权限,难怪普通用户zj
无法在该目录下建立文件了。
为了解决这个问题,我们先修改mnt
目录的权限:
1-1.切换到root
用户,增加其他用户对mnt
的写权限(只有超级用户可以修改文件的权限):
1-2.查看修改后mnt
的权限:
现在普通用户zj
可以在mnt
目录下建立文件了,我们再次用zj
执行touch /mnt/file
命令,不报错:
2.查看该文件的权限
可以看到文件file初始化的权限为rw-rw-r--
,其他用户无法对该文件进行写操作,我们尝试一下。切换到普通用户xz
,执行vim /mnt/file
命令,在文件中写入内容后以:wq
命令保存,结果如下:
以命令:wq!
强制保存,结果如下:
文件并没有成功退出,只有执行强制退出不保存命令:q!
时才退出vim编辑器。
3.给文件file
增加其他用户的写权限:
4.重新返回用户xz
编辑file
文件:
文件成功修改!!
此例中给出了目录和文件的权限方法,除了增加权限,还可以删除权限,与增加的符号相反,使用-
即可,例如:chmod o-x /mnt/file
。
被操作者除了其他人(other,o
),还有文件/目录的所有者(user,u
)以及user所在的组(group,g
)例如:给用户所有者增加写权限的命令是:chmod u+w file
;删除user所在组的读权限的命令是:chmod g-r file
。除了使用加减符号修改权限,还可以通过设定修改文件/目录的权限。在已知某一文件/目录权限的情况下可以对其权限进行增删,但若提前并不知,可使用设定值的方法对权限进行修改。
设定法修改文件/目录的权限
令user拥有读取文件和执行文件的权限,命令为chmod u=rx file
。
同理,要修改group和other的权限,可以使用chmod g=权限 file
和chmod o=权限 file
。
比较特殊的是,若要同时修改三种用户的权限,可以使用chmod a=权限 file
实现。例如令三种用户均仅有可读权限:
若要同时删除三种用户的某个权限,可以使用chmod -权限 file
实现。
数字法修改文件/目录的权限
例如可以使用chmod 777 /mnt/file
命令将file
的所有权限都打开。
数字与权限的对应
数字 | 含义 | 权限 |
---|---|---|
0 | - - - | 无任何权限 |
1 | - -x | 可执行 |
2 | -w- | 可写 |
3 | r- - | 可读 |
4 | -wx | 可写+可执行 |
5 | r-x | 可读+可执行 |
6 | rw- | 可读+可写 |
7 | rwx | 可读+可写+可执行 |
知道了数字与权限的对应关系就可以将权限修改为任意的格式。
复制权限
复制某一文件的权限有两种方法,一种是直接复制整个文件(包括文件的权限的内容),另一种是仅复制文件的权限。
方法一:利用cp
命令将文件/mnt/file
复制给文件/mnt/file2
,然后通过查询两个文件的权限和内容,可以看到这两个文件完全相同。
方法二:利用命令chmod --reference=源文件 目标文件
仅复制文件的权限。
注意:在执行此命令之前要确保目标文件已创建,如果/mnt/file2
不存在,则会报错。
遇到这种情况,我们先创建文件,再执行复制权限命令即可。
随后,通过查看文件的权限和内容可以看到,通过此命令并没有复制文件file的内容。
改变权限阀值
资源存在的意义是共享,对资源的权限开放的越大,资源的共享性就越好,但系统的安全性就越差。为保证系统安全性的同时尽可能的实现资源共享,需要保留使用资源的最小权限。这就需要设定权限阀值,在初始化资源时就定好某类型的资源应该拥有的最小权限。比如:文件的初始化权限是664
,目录的初始化权限是775
。
1.初始化file时的权限:
2.初始化一个目录dir并查看它的权限:
我们可以通过umask
命令查看权限阈值。
第一位是特殊位,先不予考虑,后面三位是002
,说明预留的权限是777-002=775
,正好是初始化目录的权限。初始化文件的权限在此基础上再减去了111
,即777-002-111=664
。
资源的权限阀值是可以修改的,分为临时修改和永久修改两种。
临时修改权限阀值
umask XXX ##将权限阀值修改为xxx,在此shell下成立
永久修改权限阀值
假如要将root的权限阀值修改为744
。
1.将用户切换为root
,执行vim /etc/bashrc
命令
2.搜索umask,命令模式下执行/umask
3.将else中的umask修改为033
4.执行vim /etc/profile
命令,将else中的umask修改033
5.更新修改过的两个配置文件
6.新建一个文件和目录,验证一下权限阀值是否已更改
可见新建的目录初始权限为744
,新建文件的初始权限为644
。(注意:系统默认文件的权限要在目录权限的基础撒谎嗯减去三类用户的执行权限,即111
)。
修改特殊权限
除了以上的r、w、x这三种一般权限,还有三种特殊权限SUID、SGID、STICKYID。
SUID
:用于二进制可执行文件,该权限开启时,运行程序时以文件拥有者的身份去运行。
SGID
:可用于二进制可执行文件和目录。作用于文件时,该权限可在运行程序时以文件所有组的身份去运行;作用于目录时,在该目录中新建的目录/文件所属组与该目录相同。
STICKYID
当该权限开启时,所有用户都可在目录下创建文件,但只有目录所有者和root用户才可删除文件。当该权限作用于文件时,即使文件未被调用也可以加载到交换空间中。
以下使用几个例子来说明这三种特殊权限的用法:
例1:chmod o+t 目录地址
后,只有文件所有者和root可以删除目录下的文件。
[root@localhost mnt]# su - xz ##切换到普通用户xz
[xz@localhost ~]$ mkdir /mnt/dir ##创建目录
[xz@localhost ~]$ ls -ld /mnt/dir ##查看目录权限
drwxrwxr-x. 2 xz xz 6 Dec 28 11:08 /mnt/dir
[xz@localhost ~]$ chmod o+t /mnt/dir ##给目录增加特殊权限t
[xz@localhost ~]$ ls -ld /mnt/dir ##查看修改后的目录权限
drwxrwxr-t. 2 xz xz 6 Dec 28 11:08 /mnt/dir
[xz@localhost ~]$ su - zj ##切换到普通用户xz
[zj@localhost ~]$ touch /mnt/dir/test ##创建文件test,发现无权限
touch: setting times of '/mnt/dir/test': Permission denied
[zj@localhost ~]$ su - root ##切换到超级用户xz
Password:
[root@localhost ~]# chmod o+w /mnt/dir ##给目录dir增加写权限
[root@localhost ~]# ls -ld /mnt/dir
drwxrwxrwt. 2 xz xz 6 Dec 28 11:08 /mnt/dir
[root@localhost ~]# logout
[xz@localhost ~]$ touch /mnt/dir/test{1..3} ##创建文件test1,test2,test3
[xz@localhost ~]$ su - tushansusu ##切换到普通用户tushansusu
[tushansusu@localhost ~]$ rm /mnt/dir/test1 ##删除由xz创建的文件,失败!
rm: remove write-protected regular empty file '/mnt/dir/test1'? y
rm: cannot remove '/mnt/dir/test1': Operation not permitted
[tushansusu@localhost ~]$ logout
[root@localhost ~]# rm /mnt/dir/test1 ##root删除由xz创建的文件test1,成功!
rm: remove regular empty file '/mnt/dir/test1'? y
[root@localhost ~]# logout
[xz@localhost ~]$ rm /mnt/dir/test2 ##xz删除由xz创建的文件test2,成功!
[xz@localhost ~]$ ls -lR /mnt/
/mnt/:
total 0
drwxrwxrwt. 2 xz xz 19 Dec 28 11:38 dir/mnt/dir:
total 0
-rw-rw-r--. 1 xz xz 0 Dec 28 11:18 test3
[xz@localhost ~]$
例2:chmod g+s 目录地址
,使目录下建立的文件的主组与目录相同。
[zj@localhost ~]$ touch /mnt/dir/test1 ##用普通用户zj在dir目录下创建文件test1
[zj@localhost ~]$ ls -lR /mnt/ ##查看目录和文件的权限
/mnt/:
total 0
drwxrwxrwt. 2 xz xz 32 Dec 28 11:46 dir/mnt/dir:
total 0
-rw-rw-r--. 1 zj zj 0 Dec 28 11:46 test1 ##发现test1的所有者和所在组均为zj
-rw-rw-r--. 1 xz xz 0 Dec 28 11:18 test3
[zj@localhost ~]$ su - root
Password:
[root@localhost ~]# chmod g+s /mnt/dir/ ##给目录dir增加特殊权限s
[root@localhost ~]# ls -ld /mnt/dir/ ##查看目录的权限
drwxrwsrwt. 2 xz xz 32 Dec 28 11:46 /mnt/dir/
[root@localhost ~]# logout
[zj@localhost ~]$ touch /mnt/dir/test2 ##用普通用户zj在dir目录下创建文件test2
[zj@localhost ~]$ ls -lR /mnt/ ##查看目录和文件的权限
/mnt/:
total 0
drwxrwsrwt. 2 xz xz 45 Dec 28 11:50 dir/mnt/dir:
total 0
-rw-rw-r--. 1 zj zj 0 Dec 28 11:46 test1
-rw-rw-r--. 1 zj xz 0 Dec 28 11:50 test2 ##test2的所在组为xz
-rw-rw-r--. 1 xz xz 0 Dec 28 11:18 test3
[zj@localhost ~]$
设定权限除了限制文件的使用者,还可以限制命令的使用者(命令也是一种特殊的文件)。
例3:将命令cat
修改为程序所有者调用。
watch -n 1 ps ax -o user,group,comm | grep cat ##监视调用cat命令的进程
[zj@localhost Desktop]$ cat ##执行cat命令
监视页面显示运行时文件的user是调用该命令的用户zj。
[zj@localhost Desktop]$ ls -l /usr/bin/cat ##查看cat命令的权限
-rwxr-xr-x. 1 root root 51856 Jan 11 2019 /usr/bin/cat
[zj@localhost Desktop]$ su - root
Password:
[root@localhost ~]# chmod u+s /bin/cat ##给cat命令的user增加特殊权限s
[root@localhost ~]# ls -l /bin/cat
-rwsr-xr-x. 1 root root 51856 Jan 11 2019 /bin/cat
[root@localhost ~]# logout
[zj@localhost Desktop]$ cat ##执行cat命令
监视页面显示运行命令时cat的user是命令的所有者root。
例4:将命令cat
修改为程序所在组调用。
[zj@localhost Desktop]$ su - root
Password:
[root@localhost ~]# chmod g+s /bin/cat ##给cat命令的group增加特殊权限s
[root@localhost ~]# ls -l /bin/cat
-rwxr-sr-x. 1 root root 51856 Jan 11 2019 /bin/cat
[root@localhost ~]# logout
[zj@localhost Desktop]$ cat ##执行cat命令
监视器显示运行命令时cat的group是命令的所在组root。
ACL-文件访问控制列表
上述对权限的控制都是分类控制用户对文件的使用权,若存在特殊用户与其余用户的权限均不同,可使用ACL。
可以使用命令getfacl 文件地址
查看某个文件/目录对应的用户的权限。
[zj@localhost Desktop]$ watch -n 1 getfacl /mnt/dir/test1
假设用户xz拥有对此文件的r、w、x功能,那么对于文件test1,xz就是一个特殊用户。要实现此功能,可以使用setfacl -m
命令。
[zj@localhost Desktop]$ su - root
Password:
[root@localhost ~]# setfacl -m u:xz:rwx /mnt/dir/test
[root@localhost ~]# ls -l /mnt/dir/test1
-rw-rwxr--+ 1 zj zj 0 Dec 28 11:46 /mnt/dir/test1 ##权限末尾由.变为+号
此时,监控器中增加了特殊用户xz对文件test1的权限。
若要删除该用户对test1的权限,可以使用命令setfacl -x
。
[root@localhost ~]# setfacl -x u:xz /mnt/dir/test1
[root@localhost ~]# ls -l /mnt/dir/test1
-rw-rw-r--+ 1 zj zj 0 Dec 28 11:46 /mnt/dir/test1
这时,监控器中的xz用户自动消失,但这个特殊权限并没有关闭。若要彻底关闭这个功能,可以使用命令setfacl -b
。
[root@localhost ~]# setfacl -b /mnt/dir/test1
[root@localhost ~]# ls -l /mnt/dir/test1
-rw-rw-r--. 1 zj zj 0 Dec 28 11:46 /mnt/dir/test1
Linux之用户授权及权限安全相关推荐
- linux授权执行权限6,linux的用户授权
接触使用linux也有一年了,但是一直没有使用过linux的用户授权之类的操作,前几天需要修改文件的权限,特意学了一下有关权限方面的操作, 今天记录总结一下: 一.创建用户: 1.使用命令 usera ...
- linux系统用户,组和权限的管理
PS: {最近一直在做毕业设计,前面博客也记录过我的一些过程.其中需要在Ubuntu上搭建一个FTP服务器,此处我选择Vsftpd,但是在我对vsftpd的配置文件vsftpd.conf设置正确后(对 ...
- mysql用户授权root权限管理_mysql用户权限管理
权限管理: 用户: 系统层面:用户就是一个用户名===>用户名:密码 能做什么? 1.登录系统 2.管理系统对象 MySQL: 不再是单纯的用户名和密码 用户名@'主机范围' 主机范围被称之为白 ...
- mysql取消权限设置_mysql用户授权与权限撤销
mysql用户授权与权限撤销 实验练习: 1.允许root从192.168.4.0/24网段访问,对所有库/表有完全控制权限,需要验证的密码为xujunxian. 2.建立一个管理账号dba007,对 ...
- linux设置用户的执行权限,Linux下ACL权限控制以及用sudo设置用户对命令的执行权限...
ACL权限分配 1.setfacl命令设置文件权限 setfacl -m u:user1:rw root.txt setfacl -m u:user2:rwx root.txt 2.getfacl命令 ...
- Python学习第四天----Linux之用户与用户组权限
Linux的用户及用户组管理 Linux是个多用户多任务的分时操作系统,所有一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面能帮助系统管理员对使 ...
- linux管理用户和文件权限
第四章:管理用户和文件权限实验报告 1 实验案例一:用户和文件权限管理 1.1 实验环境: 公司的Linux主机即将提供给技术部作为开发服务器使用,根据部门内项目 ...
- linux为用户添加sudo权限
用sudo时提示"xxx is not in the sudoers file. This incident will be reported.其中XXX是你的用户名,也就是你的用户名没有权 ...
- mysql 授权与回收权限_mysql用户授权以及权限收回
语法 GRANT privileges [(columns)] ON DATABASE.TABLE TO 'username'@'hostname' [IDENTIFIED BY [PASSWORD] ...
最新文章
- android怎么监听多点触摸_什么是多点触控技术,有哪些用途
- VDI序曲二十一 APP-V 4.6 SP1服务器端部署
- Java 中的语法糖,真甜。
- XmlReader and XmlWriter in .NET
- HTML5新特性---Form表单前台通过正则表达式自动验证邮箱
- hdu 3948(后缀数组+RMQ)
- DCMTK:DSRTree和DSRTreeNodeCursor类的测试程序
- toj 4319 盒子游戏
- 带你掌握C++中三种类成员初始化方式
- 快速排序多种方法代码Python
- 制作属于自己的个人博客-超详细教程
- android三国2,三国演义安卓单机版
- HYSPLIT模型后向轨迹制作
- c语言setlocale第二个参数,关于setlocale函数的参数问题
- 2021-2027全球与中国陶瓷基板市场现状及未来发展趋势
- LeetCode K站中转内最便宜的航班(回溯法、动态规划)
- 共识协议(5)DPOS委托权益证明
- 【学习笔记】min-height、max-height、line-height
- C语言(JS)浮点、16进制相互转换
- 【渝粤题库】陕西师范大学165105商务礼仪作业(高起专)