Linux之权限管理
一、文件基本权限
1) 基本权限的修改
第一位“-”为文件类型(-代表文件;d代表目录;l代表软链接文件即快捷方式),后面每3位一组。
-rw-r--r--
rw- u所有者
r-- g所属组(相同身份、相同权限)
r-- o其他人
r读 w写 x执行
1、 chmod命令
chmod [选项] 模式 文件名
选项
-R:递归
模式
[ugoa][+-=][rwx]
[mode=421]
2、 修改权限的方式
chmod u+x test.txt(给所有者执行权限)
chmod g+w,o+w test.txt(给所属组和其他人写权限。)
chmod a=rwx text.txt(给所有全部的人读、写、执行权限。)
chmod u-x cangls.av(取消所有者的执行权限。)
chmod g-w,o-w cangls.av(取消所属组和其他人的写权限。)
3、 权限的数字表示
r----4
w----2
x----1
rwxr-xr-x
7 5 5
2) 权限的作用
1、权限对文件的作用
r:读取文件内容(cat more tail head)
w:编辑、新增、修改文件内容(vi echo)
#但是不包括删除文件
x:可执行
注:
为什么文件有写权限不代表有删权限?因为文件名存在目录储存块(block)里(Linux中一切皆文件),文件数据存在文件储存块里,要删除文件数据,意味着要删除文件名,而文件名储存位置在更高一级(目录中),所以没有删除权限。要想进行删除操作,必须对目录储存块进行操作。
文件夹<----文件<----文件数据
2、权限对目录的作用
r:可以查询目录下文件名 (ls)
w:具有修改目录结构的权限。如新建文件和目录,删除此目录下文件和目录,重命名此目录下文件和目录,剪切(touch rm mv cp)
x: 可以进入目录 (cd)
总结:
对文件来讲 最高权限是x
对目录来讲 最高权限是w
注:对目录来讲赋予权限,就只有0,5,7,赋其他的权限没有意义。因为只有执行权限才可以进入这个目录,不赋予执行权限其他权限都没有意义,例如:赋4,1,6都是没有意义的权限
3) 其他权限命令
1、 修改文件的所有者
chown 用户名 文件名
例如:chown ds abc.txt
2、 修改文件的所属组
chgrp 组名 文件名
例如:chgrp group1 abc.txt
chown root:root 123
等价于
chown root 123 chgrp root 123
分配文件基本权限时,核心原则:在最小权限情况下能够实现要求即可。
二、文件默认权限
1) 查看默认权限的命令
umask
查看默认权限
0022
第一位0:文件特殊权限
022:文件默认权限
2) 文件的默认权限
#文件默认不能建立为执行文件,必须手工赋予执行权限
#所以文件默认权限最大为666
#默认权限需要换算成字母再相减
#建立文件之后的默认权限,为666减去umask值
例如:
文件默认最大权限666 umask值022
-rw-rw-rw- 减去 -----w--w- 等于 -rw-r--r--
例如:
文件默认最大权限666 umask值033
-rw-rw-rw- 减去 -----wx-wx 等于 -rw-r--r--
3) 目录的默认权限
#目录默认权限最大为777
#默认权限需要换算成字母再相减
#建立文件之后的默认权限,为777减去umask值
例如:
文件默认最大权限777 umask值022
-rwxrwxrwx 减去 -----w--w- 等于 -rw-r--r--
4) 修改umask值
临时修改
[root@localhost ~]# umask 0002
永久修改
[root@localhost ~]# vi /etc/profile(该文件称为环境变量配置文件)
三、ACL权限
1) ACL权限简介与开启
1、 ACL权限简介
在linux中文件和文件夹的用户身份就这三个:
所有者、所属组、其他权限。
有时候三个身份不够用,这时候就需ACL权限用来解决用户身份不足的问题。
2、 查看分区ACL权限是否开启
首先我们查看有哪些分区
[zm@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 16G 2.4G 13G 16% /
tmpfs 935M 228K 935M 1% /dev/shm
/dev/sda1 291M 37M 240M 14% /boot
/dev/sda2 251M 45M 165M 23% /home
其中tmpfs是一种基于内存的文件系统。根分区是sda3
[root@localhost ~]# dumpe2fs -h /dev/sda3
#dumpe2fs命令时查询指定分区详细文件系统信息的命令
选项:
-h 仅显示超级块中信息,而不显示磁盘块的详细信息。
执行中该命令,显示出来的超级块中可以看到有一行
Default mount option :user_xattr acl
从中可以看到包含了acl权限,说明分区支持ACL权限,可以使用ACL命令
3、 临时开启分区ACL权限
[root@localhost ~]# mount -o remount,acl /
#重新挂载根分区,并挂载加入acl权限
4、 永久开启分区ACL权限
[root@localhost ~]# vi /etc/fstab
#该文件会影响linux系统的启动,千万谨慎修改。
UUID=c2ca6f57-b15c-43ea=bca0-f239083d8bd2 / ext4
Defaults,acl 1(启动是否需要检测) 1(启动是否需要备份)
#加入acl
[root@localhost ~]# mount -o remount /
#重新挂载文件系统或重启系统,使修改生效
2) 查看与设定ACL权限
1、 查看ACL命令
[root@localhost ~]# getfacl 文件名 //查看acl权限
# file:av
# owner:tony
# group:stu
user::rwx(所有者)
user:lw:r-x
group::rwx(所属组)
mask::rwx
other::---(其它人)
2、 设定ACL权限的命令
[root@localhost ~]# setfacl 选项 文件名 //设定ACL权限的命令;
选项:
-m:设定ACL权限;
-x:删除指定的ACL权限;
-b:删除所有的ACL权限;
-d:设定默认ACL权限;
-k:删除默认ACL权限;
-R:递归设定ACL权限;
3、 给用户设定ACL权限
[root@localhost ~]# useradd tony
[root@localhost ~]# groupadd stu
[root@localhost ~]# mkdir /av
[root@localhost ~]# chown tony:stu /av
[root@localhost ~]# chmod 770 /av
[root@localhost ~]# useradd lw
[root@localhost ~]# setfacl –m u:lw:rx /av
#给用户st赋予r-x权限,使用“u:用户名:权限”格式
4、 给用户组设定ACL权限
[root@localhost ~]# groupadd tgroup2(添加一个组)
[root@localhost ~]# setfacl -m g:tgroup2:rwx /av
#为组tgroup2分配ACL权限。使用“g:组名:权限”格式
3) 最大有效权限与删除ACL权限
1、 最大有效权限mask
mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和
mask的权限“相与”(逻辑与运算)才能得到用户的真正权限
#逻辑与运算:
A |
B |
and |
r |
r |
r |
r |
- |
- |
- |
r |
- |
- |
- |
- |
2、 修改最大有效权限
[root@localhost ~]# setfacl -m m:rx 文件名
#设定mask权限为r-x。使用“m:权限”格式
3、 删除ACL权限
[root@localhost ~]# setfacl -x u:用户名 文件名
#删除指定用户的ACL权限
[root@localhost ~]# setfacl -x g:组名 文件名
#删除指定用户组的ACL权限
[root@localhost ~]# setfacl -b 文件名
#删除文件所有的ACL权限
4) 默认ACL权限和递归ACL权限
1、 递归ACL权限
① 递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。
② setfacl -m u:用户名:权限 -R 目录名。
③ 递归权限仅能赋予目录,不能赋予文件。
2、 默认ACL权限
① 默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。
② setfacl -m d:u:用户名:权限 -R目录名。
四、文件特殊权限
1) SetUID
1、 功能
#只有可以执行的二进制程序才能设定SUID权限
#命令执行者队该程序拥有x(执行)权限
#命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件属主)
#SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
#如果对这个文件没有执行权限,然后赋予SetUID权限,s会变成大S。
[root@localhost ~]# chmod 4644 abc
[root@localhost ~]# ll
-rwSr--r--. 1 root root 1498 7月 1 12:02 abc
#在SetUID权限里,大S是不能正确使用的。
2、 设定SetUID的方法
- 4代表SUID
#chmod 4755 文件名
#chmod u+s 文件名(u代表所有者,s代表SetUID)
#chmod 0755 文件名(取消SUID权限)
#chmod u-s 文件名
- u所有者
g所属组(相同身份、相同权限)
o其他人
u+s:SUID权限
g+s:GUID权限
o+s:SBIT
3、 举例
[root@localhost ~]# ll /etc/shadow (保存所有用户密码的文件)
----------. 1 root root 1498 7月 1 12:02 /etc/shadow
#权限都为零,可见只有root用户和超级用户才能查看、修改这个文件。
#但普通用户可以修改自己的密码,shadow权限又是零,是怎么做到的呢?
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root /usr/bin/passwd
#原因就是passwd这个指令有SetUID权限,权限范围可以看出任何用户都有执行权限。任何用户在执行该命令的时候,会以root身份或者所有者身份来执行。
#也就是说,只有文件具有SetUID权限,命令执行时当前用户身份才会切换到文件的所有者身份(类似灵魂附体)
#既然这样,那不就能修改其他用户的密码了吗?
#实际上linux限制了 passwd后面不能加其他参数,只有根用户才能指定用户名称。普通用户输入passwd 直接回车,修改当前用户的密码
#cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容
[root@localhost ~]# ll /bin/cat
-rwxr-xr-x 1 root root 47976 6月 22 2017 / bin/cat
4、 危险的SetUID
#关键目录应严格控制写权限。比如“/”、“/usr”等
#用户的密码设置要严格遵守密码三原则(复杂性、易记忆性、时效性)
#对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限
参考下面SUID与SGID检测脚本:
#!/bin/bash
find / -perm -4000 -o -perm -2000 > /tmp/setuid.check
#搜索系统中所有拥有SUID和SGID的文件,并保存到临时目录中
for i in $(cat /tmp/setuid.check)
#做循环,每次循环取出临时文件中的文件名
do
grep $i /root/suid.log > /dev/null
#比对这个文件名是否在模板文件中
if[ "$?" != "0" ]
#检测上一个命令的返回值,如果不为0,证明上一个命令报错
then
echo "$i isn't in listfile!" >> /root/suid_log_$(data+%F)
#如果文件名不在模板文件中,则输出错误信息,并把错误写到日志中
fi
done
rm -rf /tmp/setuid.check
#删除临时文件
2) SetGID
1、 SetGID针对文件的作用
只有可执行二进制程序才能设定SGID权限
命令执行者要对该程序拥有x(执行)权限
命令执行执行程序时,组身份升级为该程序文件的属组
SetGID权限只在程序执行过程中有效
[root@localhost ~]# ll /usr/bin/locate
-rwx--s--x 1 root slocate /usr/bin/locate
[root@localhost ~]# ll /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate /var/lib/mlocate/mlocate.db
#/usr/bin/locate是可执行二进制程序,可以赋予SGID
#执行用户lamp对/usr/bin/locate命令拥有执行权限
#执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对
/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库
#命令结束,lamp用户的组身份返回为lamp组
2、 SetGID针对目录的作用
普通用户必须对此目录必须拥有r和x权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的属组
若普通用户对此目录拥有w权限,新建的文件的默认属组是这个目录的属组
3、 设定SetGID
- 2代表SGID
chmod g+s 文件名
chmod 2755 文件名
4、 取消SetGID
chmod g-s 文件名
chmod 0755 文件名
3) Sticky BIT
1、 SBIT粘着位作用
- 粘着位目前只对目录有效
- 普通用户对该目录拥有w和x权限,即普通用户可以在此目录有写入权限
- 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了root可以删除所有文件,普通用户就算有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件
2、 设置粘着位
chmod 1755 目录名
chmod o+t 目录名
3、 取消粘着位
chmod 0777 目录名
chmod o-t 目录名
注:如果没有特殊需求,特殊权限尽量少修改,特别是SetUID和SetGID。
五、不可改变位权限
1) chattr命令
charrt [+-=] [选项] 文件名或目录名
[+-=]
+:增加权限
-:删除权限
=:等于某权限
[选项]:常用的选项包括i和a
i(insert):将此文件锁定
如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不能建立和删除文件。
a(append):冻结此文件
如果对文件设置a属性,那么只能在文件中增加数据,但不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但不允许删除。(添加内容只能用 echo >>输出重定向到文件中;禁止用vi,因为不能判断是修改还是增删内容)
2) 查看文件系统属性
lsattr 选项 文件名
选项:
-a 显示所有文件和目录
-d 若目标是目录,仅列出目录本身的属性,而不是子文件的
六、sudo权限
1) sudo权限
1、root把本来只能超级用户执行的命令赋予普通用户执行
2、sudo的操作对象是系统命令
2) sudo使用
1、[root@localhost ~]# visudo
#实际修改的是/etc/sudoers文件
2、运行上述命令,其中有这么一句话
##Allow root to run any commands anywhere
##Allows people in group wheel to run all commands
root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可使用的身份)授权命令(绝对路径)
3、 举例1
普通用户(如usr1)是不能执行shutdown命令的。授权普通用户可以重启服务器
[root@localhost ~]# visudo
#在最后面添加以下命令,保存退出
user1 ALL=(ALL) /sbin/shutdown –r now(写的越详细,权限越小)
[root@localhost ~]# su -user1
[root@localhost ~]$ sudo -l(查看可用的sudo命令)
[user1@localhost ~]$ sudo /sbin/shutdown -r now
#普通用户执行sudo赋予的命令
举例2
授权普通用户可以添加其它用户
[root@localhost ~]# visudo
#在最后面添加以下命令,保存退出。授予用户设定密码的权限
user1 ALL=(ALL) /usr/sbin/useradd
user1 ALL=(ALL) /usr/sbin/passwd
[user1@localhost ~]$ sudo /usr/sbin/useradd 用户名
[user1@localhost ~]$ sudo /usr/sbin/passwd 用户名
这样授予的权限是很危险的,如果passwd后面不加用户名会以root身份执行
命令,需写详细点,如:
user1 All=/usr/bin/passwd
[A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
#该命令中间注意空格,顺序不能颠倒。第一个是正则表达式,第二个感叹号是
取反的意思,双引号里面空格是表达passwd后面不能有空格。
4、# %wheel ALL=(ALL) ALL
#%组名 被管理主机的地址=(可使用的身份)授权命令(绝对路径)
Linux之权限管理的更多相关文章
- linux用户管理,linux用户口令管理,linux用户组管理,linux用户权限管理详解
linux用户管理 http://www.qq210.com/shoutu/android 用户账号的添加(新加用户需添加用户口令) :增加用户账号就是在/etc/passwd文件中为新用户增加一条记 ...
- Linux目录权限管理
Linux目录权限管理 实验目标: 通过本实验掌握centos7/rhel7目录权限的管理.包括配置目录的所属组.SGID.读/写/执行权限等. 实验步骤: 1.创建目录/home/instruc ...
- Linux 文件权限管理
1.文件权限的概述 在Linux系统下,使用权限来保护资源的安全将是一种不错的选择.系统中每个文件的权限都有可读(r).可写(w)和可执行(x)这三种权限,它们分别对应权限数值4.2 和1.系统为每个 ...
- Linux系统文件权限管理(6)
Linux操作系统是多任务(Multi-tasks)多用户(Multi-users)分时操作系统,linux操作系统的用户就是让我们登录到linux的权限,每当我们使用用户名登录操作系统时,linux ...
- Linux命令--权限管理
chmod命令 Linux/Unix 的文件调用权限分为三级 : 文件拥有者.群组.其他.利用 chmod 可以藉以控制文件如何被他人所调用. 使用权限 : 所有使用者 语法 chmod [-cfvR ...
- Linux的权限管理操作-Linux从入门到精通第七天(非原创)
文章大纲 一.权限概述二.权限设置三.属主与属组设置四.扩展五.学习资料下载六.参考文章 一.权限概述 总述:Linux系统一般将文件可存/取访问的身份分为3个类别:owner.group.other ...
- [Linux] 010 权限管理命令 chmod
1. 权限管理命令:chmod 命令名称:chmod 命令英文原意:change the permissions mode of a file 命令所在路径:/bin/chmod 执行权限:所有用户 ...
- 一个故事看懂Linux文件权限管理
前情回顾: 我通过open这个系统调用虫洞来到了内核空间,又在老爷爷的指点下来到了sys_open的地盘,即将开始打开文件的工作. 详情参见:内核地址空间大冒险:系统调用 open系统调用链 我是一个 ...
- Linux chmod权限管理需要小心的地方
档案的权限管理和简单,比如chmod 775 /tmp/test.sh 另外使用chmod +w /tmp/test.sh,会给档案的拥有者,群组,其他人的权限都加上了可编辑.这样就有安全隐患了.所以 ...
- chmod g+s 、chmod o+t 、chmod u+s:Linux高级权限管理
关于linux下权限操作chmod的一些说明!比rxw高级内容! 转载自http://blog.chinaunix.net/uid-26642180-id-3378119.html Set uid, ...
随机推荐
- Ubuntu16.04+Apache虚拟主机配置详解
在window下,Apache的配置文件是httpd.conf,但在Linux下安装了Apache后发现其配置并不像window下那么简单,Linux下Apache将各个设置项分在了不同的配置文件中, ...
- 洛谷P1171 售货员的难题【状压DP】
题目描述 某乡有n个村庄(1 输入格式: 村庄数n和各村之间的路程(均是整数). 输出格式: 最短的路程. 输入样例: 3 0 2 1 1 0 2 2 1 0 输出样例 3 说明 输入解释 3 {村庄 ...
- SQL SERVER FOR LINUX初体验
今天得空,就在Ubuntu17.04上安装了SQL SERVER 2017体验下,总体来说还是不错的. 在Ubuntu上安装SQL SERVER 2017还是比较方便的,只需几条命令即可: curl ...
- Ubantu16.04 redis安装
通过FTP方式将redis的安装包从windows上传到linux上 解压命令:$sudo tar -zxf ~/Downloads/redis-3.2.7.tar.gz -C /usr/local ...
- centos/linux下的安装git
1.下载git wget https://github.com/git/git/archive/v2.14.1.zip 2.安装依赖 sudo yum -y install zlib-devel op ...
- 手把手教你树莓派实现简易室内监控系统(C)之BOA服务器的搭建
本篇主要讲利用BOA服务器做室内监控系统的服务器端. 古人云:万事开头靠百度,实在不行就Google.小编也是一步一步的,亲自搭建成功,不能说是万全之策,仅仅是给大家一个参考就满足了. 第一步: 1. ...
- DxPackNet 1.打开摄像头
好久没写博客了 ,这个系列将给大家介绍.net下一个非常好用的视频控件 ------ DxPackNet, 用这个控件大家可以轻松开发出 视频会议,视频监控,远程桌面,远程教学,远程白板,视频直播,视 ...
- 1.10 tuple 元组
元组(tuple)属于不可变序列 tuple特性: 特性一:可包含任意对象的有序集合 特性二:通过下标索引访问元素 特性三:固定长度,异质,可任意嵌套 特性四:不支持原位改变 特性五:存储机制:对象引 ...
- POJ - 2387 最短路
思路:用dijkstra算法,是无向图. AC代码: #include <cstdio> #include <cmath> #include <cctype> #i ...
- AES对称加密
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.Secre ...