当前位置: 首页 > 编程日记 > 正文

运维基础-文件权限管理

Linux是一个多用户操作系统,在多用户操作系统上我们需要一种方法来允许或者拒绝访问特定的文件和目录。文件有所属人和相关的单个组。我们可以设置所属人或者租的权限,以及所有其他人的权限。

文件只具有三个应用权限的用户类别。文件的所有者,通常是创建文件的用户。文件的所有组,通常是创建改文件的用户所在的主要组,但是可以进行更改。可以为文件的所属人、所属组和系统中除所属人和所属组的其它用户设置不同的权限。

id命令可以查看用户的主要组和补充组成员

可以使用三种权限:

权限,也就是对文件和目录的影响

r(读取):可以读取文件的内容,可以累出目录的内容(文件名)

w(写入):可以更改文件的内容,可以创建或者是删除目录中的任一文件

x(执行):可以作为命令执行的文件,可以访问目录的内容(取决于目录中文件的权限)

使用ls -l 和ls -ld命令来查看所有权、类型,和文件的权限

[root@localhost ~]# ls -l
总用量 8
-rw-------. 1 root root 1635 8月  20 19:18 anaconda-ks.cfg
-rw-r--r--. 1 root root 1666 8月  20 19:21 initial-setup-ks.cfg
[root@localhost ~]# ls -ld
dr-xr-x---. 5 root root 260 8月  23 08:18 .

一个文件的常见权限是:无,读 或者读/写

一个目录的时候,他们想要的一般是ls读取和cd执行

一个文件的写权限是允许修改文件(nano或者重定向),一个目录的写权限是允许修改目录的内容(touch,mkdir,cp,mv,rm)

通常用户对只读目录具有read和exec权限,因此他们可以列出目录并访问其中的内容。如果用户对目录具有read访问的权限,可以列出其中文件的名称,但是其他信息都不可以访问。如果用户对某个目录具有exec访问的权限,则他们不能列出该目录中文件的名称,但是他们如果已经知道具有读取权限的问价名称,那么可以通过绝对路径的方式来访问文件的内容。

对问价的所在目录具有写入权限的任何人都可以删除该目录下的文件,不论文件的所属人和权限如何。

从命令行管理文件系统的权限

更改文件/目录的权限

命令行更改权限可以使用chmod(change mode 更改命令)。

符号法:

chmod whowhatwhich file|directory

-who 是指u、g、o、a(表示用户,组,其她,全部)

-what是指+、-、=(表示添加,删除,精确设置)

-which 是指r、w、x(表示读取,写入,执行)

数值法:

chmod ### file|directory

-每个数字代表一个访问的级别:用户、组、其他

-#是r=4,w=2,x=1的组合

更改目录/文件的所属人和所属组

默认情况下,我虚拟键文件的所属人为创建该文件的用户,所属组为该用户的主要组

使用chown命令可以更改文件的所有权

配合-R选项,可以递归更改这个目录树的所有权

chown也可以用于更改文件的所属组,只需在组名称之前加上冒号(:)

练习:

一个目录可以让ateam组中的所有成员访问,alex创建的文件可以让zhang修改

1,在/home总中创建ateam-text目录

[root@localhost ~]# groupadd ateam
[root@localhost ~]# mkdir /home/ateam-text

2、将ateam-text目录的所有权更改为ateam

[root@localhost ~]# chown :ateam /home/ateam-text/

3、确保组成员在ateam-text中可以创建和删除文件

[root@localhost ~]# chmod g+w /home/ateam-text/

4、去报ateam-text禁止他人访问

[root@localhost ~]# chmod 770 /home/ateam-text/
[root@localhost ~]# ls -ld /home/ateam-text/
drwxrwx---. 2 root ateam 6 8月  23 08:39 /home/ateam-text/

5、退出root,切换到alex

[root@localhost ~]# su alex
[alex@localhost root]$ uname 
Linux
[alex@localhost root]$ id
uid=1001(alex) gid=1001(alex) 组=1001(alex),30000(shakespeare) 环境=unconfined_u:unconfined_r:unconf
ined_t:s0-s0:c0.c1023

6、进入/home/ateam-text

[alex@localhost root]$ cd /home/ateam-text/
bash: cd: /home/ateam-text/: 权限不够
[alex@localhost root]$ su 
密码:
[root@localhost ~]# useradd -G ateam alex
useradd:用户“alex”已存在
[root@localhost ~]# usermod -G ateam alex
[root@localhost ~]# su alex
[alex@localhost root]$ cd /home/ateam-text/
[alex@localhost ateam-text]$ 

7、创建文件alexfile3

[alex@localhost ateam-text]$ touch alexfile3
[alex@localhost ateam-text]$ ls
alexfile3
[alex@localhost ateam-text]$ 

8、观察新文件默认的所属人和所属组

[alex@localhost ateam-text]$ ls -l alexfile3 
-rw-rw-r--. 1 alex alex 0 8月  23 08:55 alexfile3
[alex@localhost ateam-text]$

9、将文件的所属组更改为ateam

[alex@localhost ateam-text]$ chown :ateam alexfile3 
[alex@localhost ateam-text]$ ls -l alexfile3 
-rw-rw-r--. 1 alex ateam 0 8月  23 08:55 alexfile3

10、切换到zhang

[alex@localhost ateam-text]$ su - zhang
密码:
上一次登录:四 8月 23 08:18:24 CST 2018pts/1 上
[zhang@localhost ~]$ id
uid=1000(zhang) gid=1000(zhang) 组=1000(zhang),10(wheel) 环境=unconfined_u:unconfined_r:unconfined_t
:s0-s0:c0.c1023

11、进入/home/ateam-text,编辑alexfile3

[root@localhost zhang]# usermod -G ateam zhang
[root@localhost zhang]# su zhang
[zhang@localhost ~]$ cd /home/ateam-text/
[zhang@localhost ateam-text]$ echo 'text' >> alexfile3 
[zhang@localhost ateam-text]$ cat alexfile3 
text
[zhang@localhost ateam-text]$ 

管理默认权限和文件访问

配置一个目录,在这个目录下新创建文件,目录的所属成员自动具有写权限,使用特殊权限,和默认的umask设置

特殊权限

对于可执行的文件setuid(或setgid)权限表示以文件所属人(或者所属组)的身份运行命令,而不是以执行者的身份运行,例如passwd命令

[zhang@localhost ateam-text]$ ls -l /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd
[zhang@localhost ateam-text]$ 

目录的粘滞位(sticky)可以设置删除文件的特殊权限:仅文件的所有者(和root)可以删除目录中的文件,例如/tmp目录:

[zhang@localhost ateam-text]$ ls -ld /tmp/
drwxrwxrwt. 19 root root 4096 8月  23 09:05 /tmp/
[zhang@localhost ateam-text]$ 

目录的setgid权限表示在该目录中新建的文件将继承该目录的所属组,额不是创建用户的主要组。

设置特殊权限

用符号表示:setuid=u+s;setgid=g+s;sticky=o+t

用数值表示(第一位数字):setuid=4;setgid=2;sticky=1

在一个目录总创建的文件自动继承目录的组

默认设置允许系统上的素有用户组查看公共区域的文件,调整使得创建的文件拥有更多限制的权限。

默认文件权限

在系统中创建文件和目录的时候都会有默认权限,文件时666,目录是777.

但是我们会发现创建出的文件和目录不是666和777,这是因为其中一些权限被shell的umask屏蔽了。

bash shell的系统默认umask在/etc/profile 和/etc/bashrc文件中定义。用户可以通过自己的家目录中的.bash_profile 和.bashrc 文件的设置来覆盖系统默认值

创建新文件,查看默认umask对权限的影响

[root@localhost ateam-text]# touch newfile1
[root@localhost ateam-text]# ls -l newfile1 
-rw-r--r--. 1 root root 0 8月  23 09:12 newfile1
[root@localhost ateam-text]# mkdir newdir1
[root@localhost ateam-text]# ls -ld newdir1/
drwxr-xr-x. 2 root root 6 8月  23 09:12 newdir1/
[root@localhost ateam-text]# 

将umask设置为0,次设置不会屏蔽新文件的任何权限

[root@localhost ateam-text]# umask 0
[root@localhost ateam-text]# touch newfile2
[root@localhost ateam-text]# ls -l newfile
ls: 无法访问newfile: 没有那个文件或目录
[root@localhost ateam-text]# ls -l newfile2
-rw-rw-rw-. 1 root root 0 8月  23 09:13 newfile2
[root@localhost ateam-text]# mkdir newdir2
[root@localhost ateam-text]# ls -ld newdir2
drwxrwxrwx. 2 root root 6 8月  23 09:13 newdir2
[root@localhost ateam-text]# 

将umask设置为007,此设置将屏蔽其他人的权限

[root@localhost ateam-text]# umask 007
[root@localhost ateam-text]# ls
alexfile3  newdir1  newdir2  newfile1  newfile2  newfile3
[root@localhost ateam-text]# ls -l newfile3
-rw-rw----. 1 root root 0 8月  23 09:15 newfile3
[root@localhost ateam-text]# mkdir newdir3
[root@localhost ateam-text]# ls -ld newdir3
drwxrwx---. 2 root root 6 8月  23 09:16 newdir3
[root@localhost ateam-text]# 

将umask设置为027,次设置将屏蔽组的写权限和其他人的所有权限

[root@localhost ateam-text]# umask 027
[root@localhost ateam-text]# touch newfile4
[root@localhost ateam-text]# ls -l newfile4
-rw-r-----. 1 root root 0 8月  23 09:17 newfile4
[root@localhost ateam-text]# mkdir newdir4
[root@localhost ateam-text]# ls -ld newdir4
drwxr-x---. 2 root root 6 8月  23 09:17 newdir4
[root@localhost ateam-text]# 

使用root用户登录更改费特权用户默认的umask,拒绝非组中的用户所有访问。

修改/etc/bshrc 和/etc/profile更改bash shell 用户的默认umask,因为非特权用户的默认umask是002,在文件中找到umask命令设置umask值,更改他们,所属组为007.

umask:Linux中新建文件或者目录的初始权限

练习:

1、切换到alex用户,确定用户的umask

[root@localhost ateam-text]# su alex
[alex@localhost ateam-text]$ umask 
0002
[alex@localhost ateam-text]$ 

2、创建新目录/tmp/shared 和新文件/tmp/shared/defaults,查看默认umask对权限的影响

[alex@localhost ateam-text]$ mkdir /tmp/shared
[alex@localhost ateam-text]$ ls -ld /tmp/shared/
drwxrwxr-x. 2 alex alex 6 8月  23 09:25 /tmp/shared/
[alex@localhost ateam-text]$ touch /tmp/shared/defaults
[alex@localhost ateam-text]$ ls -l /tmp/shared/defaults 
-rw-rw-r--. 1 alex alex 0 8月  23 09:25 /tmp/shared/defaults
[alex@localhost ateam-text]$ 

3、将/tmp/share目录所属组改为ateam

[alex@localhost ateam-text]$ chown :ateam /tmp/shared/
[alex@localhost ateam-text]$ ls -ld /tmp/shared/
drwxrwxr-x. 2 alex ateam 22 8月  23 09:25 /tmp/shared/
[alex@localhost ateam-text]$ 

4、在/tmp/shared目录中创建一个新的文件

[alex@localhost ateam-text]$ touch /tmp/shared/alex3
[alex@localhost ateam-text]$ ls -l /tmp/shared/alex3 
-rw-rw-r--. 1 alex alex 0 8月  23 09:27 /tmp/shared/alex3
[alex@localhost ateam-text]$ 

5、确保在/tmp/shared目录中新建的文件能够继承ateam组

[alex@localhost ateam-text]$ chmod g+s /tmp/shared/
[alex@localhost ateam-text]$ ls -ld /tmp/shared/
drwxrwsr-x. 2 alex ateam 35 8月  23 09:27 /tmp/shared/
[alex@localhost ateam-text]$ touch /tmp/shared/alex4
[alex@localhost ateam-text]$ ls -l /tmp/shared/alex4
-rw-rw-r--. 1 alex ateam 0 8月  23 09:28 /tmp/shared/alex4
[alex@localhost ateam-text]$ 

6、更改Alex的umask,使得创建的新文件所属组拥有只读权限,其他人,没有访问权限

[alex@localhost ateam-text]$ umask 
0002
[alex@localhost ateam-text]$ umask 027
[alex@localhost ateam-text]$ touch /tmp/shared/alex5
[alex@localhost ateam-text]$ ls -l /tmp/shared/alex5
-rw-r-----. 1 alex ateam 0 8月  23 09:30 /tmp/shared/alex5
[alex@localhost ateam-text]$ 

7、切换到alex,打开一个新的shell查看umask

[alex@localhost ateam-text]$ su - alex
密码:
上一次登录:四 8月 23 09:23:41 CST 2018pts/1 上
[alex@localhost ~]$ umask
0002
[alex@localhost ~]$ 

8、将Alex默认的umask更改为禁止不属于组的用户的所有访问权限

[alex@localhost ~]$ echo 'umask 007' >> ~/.bashrc 
[alex@localhost ~]$ cat ~/.bashrc 
# .bashrc# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fi# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=# User specific aliases and functions
umask 007
[alex@localhost ~]$ 

从新使用Alex登录

[alex@localhost ~]$ umask
0007
[alex@localhost ~]$ 

转载于:https://www.cnblogs.com/52-qq/p/9521893.html

相关文章:

android帧动画实现方法之一

好多动画离不开帧动画的使用&#xff0c;下面就实现帧动画的制作方式之一&#xff0c;以后会推出其他方法。 上面是文件存放位置。 a.xml文件的代码如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <animation-list xmlns:android"…

python技术晨讲_python系列教程14

声明&#xff1a;在人工智能技术教学期间&#xff0c;不少学生向我提一些python相关的问题&#xff0c;所以为了让同学们掌握更多扩展知识更好的理解人工智能技术&#xff0c;我让助理负责分享这套python系列教程&#xff0c;希望能帮到大家&#xff01;好了&#xff0c;是开始…

三字母词和转义字符

1. 三字母词 在C语言中有一种三字母词的说法&#xff0c;trigraph sequences&#xff0c;目前为止有九种三字母词&#xff0c;如下 ?? # ??) ] ??! | ??( [ …

写了个Python脚本监控nginx进程

写了个Python脚本监控nginx进程 Xiaoxia[PG]写了个Python脚本监控nginx进程接上一文用iptables让SSH服务对陌生人说不。还是有点担心这个学期内&#xff0c;nginx可能会因为系统各种原因而出现异常退出&#xff0c;导致Web服务暂停。所以&#xff0c;又来了一个方案。view pla…

Linux shell 脚本报错:/bin/bash^M: bad interpreter: No such file or directory

今天遇到一个很诡异的问题&#xff0c;一直运行很正常的shell脚本失败了&#xff0c;只是昨天增加了一个参数而已。 报错信息&#xff1a; /bin/bash^M: bad interpreter: No such file or directory 后来发现root cause, 昨天修改文件的时候在windows中修改保存&#xff0c;然…

C语言volatile关键字详解

volatile提醒编译器它后面所定义的变量随时都有可能改变&#xff0c;因此编译后的程序每次需要存储或读取这个变量的时候&#xff0c;都会直接从变量地址中读取数据。如果没有volatile关键字&#xff0c;则编译器可能优化读取和存储&#xff0c;可能暂时使用寄存器中的值&#…

python储存数据的容器_Python基础四容器类数据

一、上周内容回顾int bool str 之间的互相转换int str:str(int)int(str) #字符串必须是数字组成int bool:bool(int):非零即TrueTrue --->1 Fasle --->0bool str:str-->bool #非空即Truestr&#xff1a;BIF自己去背吧二、列表why&#xff1a;1.取值费劲。2.对字符串…

Android 清单文件 详解

转载于:https://www.cnblogs.com/mohe/archive/2013/03/31/2991642.html

android屏幕分辨率详解 ldpi mdpi hdpi 程序UI自适应 《官方翻译》

2019独角兽企业重金招聘Python工程师标准>>> 看世界杯的空闲 时间&#xff0c;翻译一下 官方文档。分辨率 问题是大家都很关心的&#xff08;720480会不会悲剧&#xff09;&#xff0c;而关于这个问题&#xff0c;android官方的文档无疑最有说服力。由于不是所有的人…

010 并发的三个特性

一 . 概述 在之前,我们使用synchronized关键词解决了原子性的操作,本节我们分析一个JVM内存模型导致的另外的两个问题. 二 . 可见性 为了加速线程的运行的速度,JVM的内存模型中设置了线程栈中的缓存,当一个线程使用了堆内存的数据的时候,首先会将这个数据缓存到线程栈之中, 当这…

LeetCode: Longest Consecutive Sequence

想到map了&#xff0c;可惜没想到用erase来节省空间&#xff0c;看了网上答案 1 class Solution {2 public:3 int longestConsecutive(vector<int> &num) {4 // Start typing your C/C solution below5 // DO NOT write int main() function6 …

python做测试书籍推荐_学习pytest应该观看的书籍?

这本书有中文版了pytest是动态编程语言Python专用的测试框架&#xff0c;它具有易于上手、功能强大、第三方插件丰富、效率高、可扩展性好、兼容性强等特点。《pytest测试实战》深入浅出地讲解了pytest的使用方法&#xff0c;尤其是具有特色的fixture的用法。作者通过丰富的测试…

路由器、路由与路由表

2019独角兽企业重金招聘Python工程师标准>>> 路由器、路由与路由表 路由器就是一台网络设备&#xff0c;它配备多个网络接口卡(NIC)&#xff0c;能利用它的网络知识正确转发入口流量。 决定一个入口封包应当送给本地主机还是转发所需要的信息&#xff0c;以及在转发…

Hadoop虚拟机的jdk版本和本地eclipse的版本不一致怎么办

在本周学习Hadoop遇到了一个问题&#xff0c;困扰了半天&#xff0c;本人在安装Hadoop时是按照视频来的&#xff0c;结果发现Hadoop上的jdk版本和本地eclipse的版本不一致&#xff0c;导致本地的程序到处jar包传到虚拟机上运用Hadoop不能正常运行&#xff0c;如果你遇到相同的问…

操作符和表达式

一. 操作符 1. 算术操作符 - * / % 除了%之外其余的几个操作符既可以用于计算整型也可以用于计算浮点型数据&#xff0c;%只能计算整型数据&#xff0c;得到的结果是余数 2. 移位操作符 << 左移位操作符 >> 右移位操作符 <<左移…

kuayu react_react跨域解决方案

react跨域解决方案1.开发环境:reactaxioselement2.电脑系统:windows10专业版3.在使用react开发的过程中,我们总是会遇到跨域的问题,下面我来分享一下,在react中跨域处理方法!4.我使用的是axios向后台发送请求,安装axios:npm i axios --save5.安装代理中间件(http-proxy-middlew…

HDU 1429 胜利大逃亡(续) (BFS+位压缩)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3309 Accepted Submission(s): 1063 Problem DescriptionIgnatius再次…

Ext fucionchart插件

http://code.google.com/p/uxmedia/downloads/list转载于:https://www.cnblogs.com/jerome-rong/archive/2012/06/09/2543565.html

前端 ----jQuery的动画效果

03-jQuery动画效果 jQuery提供的一组网页中常见的动画效果&#xff0c;这些动画是标准的、有规律的效果&#xff1b;同时还提供给我们了自定义动画的功能。 显示动画 方式一&#xff1a; $("div").show(); 解释&#xff1a;无参数&#xff0c;表示让指定的元素直接显…

结构和联合--结构体内存和位段内存开辟规则

一. 结构的基本知识 聚合数据类型能够存储多个数据&#xff0c;C语言提供了两种类型的聚合数据类型&#xff0c;数组和结构。数组是相同的数据&#xff0c;结构是不同类型的数据聚合。结构也是一些值得集合&#xff0c;这些值成为它的成员&#xff0c;每个结构都有它的名字&a…

antd自定义分页器_自定义分页器

classPagination(object):def __init__(self, current_page, all_count, per_page_num10, pager_count11):"""封装分页相关数据:param current_page: 当前页:param all_count: 数据库中的数据总条数:param per_page_num: 每页显示的数据条数:param pager_count:…

.net实现跨页面传值

//一般用于向php&#xff0c;jsp等传值&#xff0c;因为跨语言session等不能共用&#xff0c;只有通过post提交 //下面演示的是服务器端控件提交 PostBackUrl"WebForm3.aspx"//这个页面只需要修改控件属性就能把值传给下一页面 protected void Page_Load(object send…

进程的同步、互斥以及PV原语

在处理进程间的同步与互斥问题时&#xff0c;我们离不开信号量和PV原语&#xff0c;使用这两个工具的目的在于打造一段不可分割不可中断的程序。应当注意的是&#xff0c;信号量和PV原语是解决进程间同步与互斥问题的一种机制&#xff0c;但并不是唯一的机制。 信号量&#xff…

ListT中,Remove和RemoveAt区别

Remove删除的是匹配的第一项。比如你的list里面有2个相同的项。那么就删除第一个。后面的不删除&#xff0c;找不到元素和删除失败都返回falseRemoveAt是删除索引下的项 转载于:https://www.cnblogs.com/mcyushao/p/9526208.html

vue 如何处理两个组件异步问题_Vue动态异步组件实现思路及其问题

前言&#xff1a;在vue官方资料中&#xff0c;我们可以可以很学会如何通过vue构建“动态组件”以及“异步组件”&#xff0c;然而&#xff0c;在官方资料中&#xff0c;并没有涉及到真正的“动态异步”组件&#xff0c;经过大量的时间研究和技术分析&#xff0c;我们给出目前比…

[转载] 七龙珠第一部——第004话 掳人的妖怪——乌龙

转载于:https://www.cnblogs.com/6DAN_HUST/archive/2013/04/07/3003566.html

如何解决资料下载下来为index.html和PHP文件的问题?

最近很多Down友反映&#xff0c;在下载中心下载资料时&#xff0c;明明是pdf、rar、zip格式的文件&#xff0c;下载完后怎么就变成index.html、php格式的文件了&#xff1f;既浪费了下载豆&#xff0c;文件还不能用&#xff0c;心疼啊&#xff01;这是因为下载系统是动态获取的…

给大家推荐8个SpringBoot精选项目

前言 2017年&#xff0c;曾在自己的博客中写下这样一段话&#xff1a;有一种力量无人能抵挡&#xff0c;它永不言败生来倔强。有一种理想照亮了迷茫&#xff0c;在那写满荣耀的地方。 如今2018年已过大半&#xff0c;虽然没有大理想抱负&#xff0c;但是却有自己的小计划。下面…

点击Notification正确回调到之前已经放置在后台的Task中的对应Activity,而不是创建它的一个新实例...

NotificationManager notificationManager (NotificationManager)getSystemService(NOTIFICATION_SERVICE);Notification notification new Notification(R.drawable.logo_icon_16,"移动营销", System.currentTimeMillis());Intent intent new Intent(Intent.ACTI…

函数返回类的对象与拷贝构造函数

C中&#xff0c;如果我们在一个函数中&#xff0c;定义了一个类的对象&#xff0c;然后返回这个对象&#xff0c;在main函数中用一个对象去接受这个返回的对象的时候&#xff0c;这里面参与的函数调用大家可能不熟悉&#xff0c;这里通过程序和注释的方式给大家讲解一下。编译的…