linux权限管理总结
2016-03-28 22:20
357 查看
文件或目录的权限
目录和文件拥有:读r、写w、执行x权限。// 使用 ls -l命令查看当前目录的文件权限信息 #ll -rw-r--r-- 1 root root 161 Mar 20 20:39 test.txt // test文件所有者拥有读写权限、所属组和其他用户拥有读权限 drw-r--r-- 1 root root 248 Mar 23 21:03 download
权限对文件的作用
r :读取文件内容(cat、more、head、tail)w:编辑、新增、修改文件内容(vi、echo),但不包含删除文件
x:可执行
对文件来讲:最高权限是执行权限(x),所以文件要少赋予执行权限。
权限对目录的作用
r:可以查询目录下文件名(ls)。w: 具有修改目录结构的权限。如新建文件和目录,删除此目录下文件和目录,重命名此目录下文件和目录,剪切此目录下文件或目录。(touch、rm、mv、cp)。
x:可以进入目录(cd)。
对目录来讲:最高权限是写权限(w),所以目录要少赋予写权限。
注:0没有任何权限,5(rx)可以查看和进入,7(rwx)拥有最高权限;1、4、6权限对目录没有意义。
分配文件基本权限时,核心原则:在最小权限情况下能够实现要求即可!
chmod 修改文件或目录的权限
/*使用[u、g、o、a][+、-、=]来设置文件或目录的权限[r、w、x] u:user 所有者 g:group 所属组 o:other 其他 a:all 所有用户,包括所有者、所属组、其他 +:增加权限 -:减少权限 =:设置权限 */ // 给test的拥有者u,文件增加某权限 #chmod u+x,g+r test #chmod a+w test #chmod u-x test #chmod g=rwx test /*使用数字设置文件或目录的权限 rwx在Linux下分别对应十进制4、2、1 即3bit二进制的111 */ // 设置dir目录的所有者拥有所有权限,所属组和其他用户拥有读和执行的权限 #chmod 755 dir/
chown 改变文件或目录的所有者
格式:chown newUser 文件名让其他人拥有最高权限的最佳做法是使用chown更改文件的所有者。
// 同时改变文件的所有者和所属组 chown user:group 文件名
chgrp 改变文件或目录的所属组
格式:chgrp newUser 文件名注:linux创建文件时,默认其所有者为当前用户、其所属组为与当前用户名相同的组。
/* 用例 *1 当前用户创建一个test目录 *2 创建新的用户xm,并让他拥有test目录的所有权限 *3 让组用户可以拥有查看权限 *4 其他人没有这个目录的任何权限 */ // 创建test目录 #mkdir test // 添加用户xm和密码 #useradd xm #passwd xm // 创建用户user1、user2 #useradd user1 #useradd user2 // 创建user组 #groupadd user // 把user1、user2添加到user组 #gpasswd -a user1 user #gpasswd -a user2 user // 更改test目录的所有者和组 #chown xm:user test // 更改test目录权限 #chmod 750 user
默认权限
umask 查看默认权限
#umask 0022 // 第一位0是特殊权限
umask值的修改
临时修改umask 0033
永久修改
vi /etc/profile
文件的默认权限
文件默认不能建立为执行文件,必须手工赋予执行权限所以文件默认权限最大为666
默认权限需要换算成字母再相减
建立文件之后的默认权限,为666减去umask值
例如:
666 - 022(umask值)
-rw-rw-rw- 减去 —–w–w- 等于 -rw-r–r–
666 - 033(umask值)
-rw-rw-rw- 减去 —–wx-wx 等于 -rw-r–r– (注:空减去某权限仍为空)
目录的默认权限
目录默认权限最大为777默认权限需要换算成字母再相减
建立文件后的默认权限,为777减去umask值
ACL权限
ACL权限简介
Linux基本权限管理中是分为用户所有者、所属组和其他人,如果有人想拥有和基本权限中任何权限都不一样的时候,基本权限无法满足这种需求,这时候可以考虑使用ACL权限。例如:
Linux中有一个test目录,它的所有者为xiaoming,拥有所有权限;文件夹所在组stu,也拥有所有权限;其他人没有任何权限。但是,要给一个新用户xiaowang对test目录拥有读和执行权限时,基本权限满足无法分配需求。
ACL权限用来解决用户身份不够的情况。windows系统给文件分配权限时,不用考虑文件的所有者和所属组,可以给任何用户分配相应的权限;ACL权限和windows系统一样,可以分配任何用户相应的权限而不考虑文件所有者和所属组的权限,这解决基本权限无法分配复杂权限的问题。
开启、查看和设置ACL权限
// 查看分区ACL权限是否开启 // df 查看分区情况 // dumpe2fs命令是查询指定分区详细文件系统信息命令;-h仅显示超级块中信息,而不显示磁盘块组的详细信息 #dumpe2fs -h /dev/sda5 // 临时挂载 根分区/ 的ACL权限 #mount -o remount,acl / // 永久开启分区ACL权限 #vi /etc/fstab // defaults权限默认包括挂载ACL权限,如果没有ACL权限,在defaults后添加即可 UUID=6634633e-001d-43ba-8fab-202f1df93339 / ext4 defaults,barrier=0,acl 1 1 //重新挂载文件系统或重启动系统,使修改生效 #mount -o remount / // 查看acl权限 #getfacl 文件名 // 设置acl权限 setfacl [option] 文件名 options: -m 设定acl权限 给用户赋予文件(或目录)acl权限,使用"u:用户名:权限"格式 例子:给用户lw赋予文件test读执行权限:setfacl -m u:lw:rx test 给组分配acl权限使用"g:组名:权限"格式 -x 删除指定的acl权限 -b 删除所有的acl权限 -d 设定默认的acl权限 -k 删除默认的acl权限 -R 递归设定acl权限
// 解决上面提到的问题 #useradd xiaoming #groupadd stu #mkdir /home/test #chmod 770 /home/test #chown xiaoming:stu /home/test #useradd xiaowang // 设置acl权限 #setfacl -m u:xiaowang:rx /home/test // 查看acl权限 #getfacl /home/test # file: /home/test # owner: xiaoming # group: stu user::rwx user:xiaowang:r-x group::rwx mask:rwx //???? other::---
最大有效权限与删除ACL权限
最大有效权限mask
mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限。user::xiangwang:r-x mask::rwx // xiaowang的权限与mask值相与,得到xiaowang的真实权限 // r-x 与 rwx得到有效权限r-x
删除ACL权限
// 删除指定用户的acl权限 #setfacl -x u:用户名 文件名 // 删除指定用户组的acl权限 #setfacl -x g:组名 文件名 // 删除指定文件的所有的acl权限 #setfacl -b 文件名
默认ACL权限和递归ACL权限
递归ACL权限
递归是父目录在设定ACL权限时,当前所有的子文件和子目录也拥有相同的ACL权限。递归ACL权限赋予文件会报错。// 格式:setfacl -m u:用户名:权限 -R 目录名 #cd test #touch file1 #touch file2 // 赋予用户lw拥有test目和test目录下文件的rx权限 // 使用 -R 参数设置递归权限,lw用户对file1和file2文件拥有了x权限,造成了权限溢出 #setfacl -m u:lw:rx -R test/ #touch file3 // 新建file3,没有acl权限 #getfacl file3
默认ACL权限
默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。// 格式:setfacl -m d:u:用户名:权限 -R 目录名
sudo权限
sudo权限的概念
root把本来只能超级用户执行的命令赋予普通用户执行。sudo的操作对象是系统命令。
sudo权限的使用
// 查看sudo配置文件 //man 5 sudoers查看配置文件详细 #visudo // 实际修改的是/etc/sudoers文件 // 用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径) root ALL=(ALL) ALL // 组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径) %wheel ALL=(ALL) ALL // 普通用户不能执行shutdown命令 #visudo /* 编辑/etc/sudoers文件 1 增加user1 ALL=(ALL) /sbin/shutdown -r now配置。 注:命令写的越简单,user1用户得到的权限越大,命令写的越详细,user1用户得到的权限就越小;系统命令要写成绝对路径,以兼容其他版本。 2 保存退出 */ // 登陆普通用户账号user1,执行系统命令 #su - user1 $sudo -l // 要求输入user1密码,才能查看可执行的系统命令 $sudo /sbin/shutdown -h now // 执行关机命令不被允许 $sudo /sbin/shutdown -r now //执行重启命令
// 给普通用户执行添加用户和密码的权限 # visudo // 添加 user1 ALL=/usr/sbin/useradd 配置 // 添加 user1 ALL=/usr/bin/passwd 配置注:这使user1可以更改root的密码 // user1 ALL=/usr/bin/passwd [A-Za-z]*, !/usr/binpasswd "", !/usr/bin/passwd root,则user1无法更改root密码 // 添加 user1 ALL=/bin/vi 注:这使user1可以编辑/etc/shadow文件,更改root用户等密码
文件特殊权限
SetUID权限
只有可执行的二进制程序才能设定SetUID权限命令执行者要对该程序拥有x(执行)权限
命令这行者在执行改程序时获得该程序文件属主的身份
SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效;如passwd命令,其他用户都可以使用passwd更改自己的密码
设置和取消SetUID权限
/*设置SetUID权限,4代表设置SetUID、2代表SetGID、1代表stickyBIT u+s :代表给文件加上SetUID权限 g+s :代表给目录加上SetGID权限 o+s :代表给文件加上STICKBIT权限 */ #ll -rwxr-xr-x .... test #chmod 4755 test // 或chmod u+s test -rwsr-xr-x ... test // 若文件没有执行权限,但设置SetUID时,执行位显示大S,这没有意义。 // 取消SetUID权限 #chmod u-s test #chmod 0755 test
危险的SetUID权限
关键目录应严格控制写权限,比如”/”、”/usr” 等用户的密码设置要严格最受密码三原则
对系统中默认应该具有SetUID权限的文件作以列表,定时检查有没有这之外的文件被设置了SetUID权限
不能对vi等编辑器赋予SetUID权限,这样vi就能编辑/etc/shadow文件而更改root密码。
SetGID权限
SetGID针对文件的作用
只有可执行的二进制程序才能设置SetGID权限命令执行者要对该程序拥有x(执行)权限
命令执行在执行程序的时候,组身份升级为改程序文件的属组
SetGID权限同样只在改程序执行过程中有效,也就是说组身份改变只在程序执行过称重有效。注:与SetUID作用相似
// locate命令 #ll /usr/bin/locate -rwx--s--x 1 root slocate ... /usr/bin/locate // locate 搜索数据库/var/lib/mlocate.db #ll /var/lib/mlocate.db -rw-r----- 1 root slocate ... /var/lib/mlocate.db // 普通用户时没有权限搜索这个数据库 // locate属于slocate组且设置了SetGID权限,slocate组拥有对mlocate.db读的权限,所以普通用户使用locate时组身份自动升级为slocate组则可以使用locate命令查询mlocate.db数据库。命令结束后,用户user身份返回user组身份。
SetGID针对目录的作用
普通用户必须对此目录拥有r和x权限,才能进入此目录普通用户在此目录中的有效组会变成此目录的属组
若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
// 在root用户在/tmp目录创建test目录,并更改目录权限为777 #cd /tmp #mkdir test #ll drwxr-xr-x 2 root root ... test #chmod 777 test #ll drwxrwxrwx 2 root root ... test // user用户在/tmp/test目录创建file1 $cd /tmp/test $touch file1 $ll -rw-rw-r-- 1 user user ... file1 // root用户更改test目录为2777即设置SetGID #chmod 2777 test #ll drwxrwsrwx 2 root root ... test // user用户在/tmp/test目录创建file2 $touch file2 $ll -rw-rw-r-- 1 user user ... file1 -rw-rw-r-- 1 user root... file2 // 新建file2文件所属组为root组
设置和取消SetGID权限
// 设置SetGID权限 #chmod 2755 test/ #chmod g+s test/ // 取消SetGID权限 #chmod 0755 test/ #chmod g-s test/
Sticky BIT
SBIT粘着位作用
黏着位目前只针对目录有效普通用户对目录拥有w和x权限,若普通用户可以拥有此目录的w权限
如果该目录没有黏着位,普通用户因为拥有所有权限,可以删除该目录所有的文件,包括其他用户建立的文件;该目录赋予黏着位后,普通用户就算拥有目录的w权限,也只能删除自己建立的文件,不能删除其他用户建立的文件。
如/tmp 目录即拥有黏着位
设置与取消黏着位
// 设置黏着位 #chmod o+t dir #chmod 1777 dir // 取消黏着位 #chmod o-t dir #chmod 0777 dir
不可改变位权限
chattr [+-=] [option] 文件名或目录名+ : 增加权限
- :删除权限
=:等于某权限
options:
i:如果对文件设置i属性,那么不允许对文件进行删除,改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。
a:如果对文件设置a属性,那么只能在文件中增加数据,但不能删除也不嗯呢该修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但不允许删除。注:不允许使用vi增加文件数据,因为无法判断vi是增加还是修改或删除文件数据,所以只能使用echo data>> file来追加数据。
chattr对文件或目录都生效
#chattr +i file #lsattr file ----i-------e- file #vim abc // 不允许修改 #rm -rf file //不允许删除 // 删除i属性 #chattr -i file
参考
慕课网教程linux权限管理相关文章推荐
- 《Linux内核设计与实现》Chapter 18 读书笔记
- 《Linux内核设计与实现》课本第十八章自学笔记——20135203齐岳
- 【读书笔记】Linux内核设计与实现(第十八章)
- Linux学习笔记之二
- 总结安装VMware和centOS6.5的相关问题。
- 推荐一本最接近完美的Linux内核入门教材
- Linux学习笔记3
- 《Linux内核分析》第六周 进程的描述与创建
- 在centos6.5下安装MySQL遇到的些许问题
- Linux学习笔记2
- 《Linux内核设计与实现》读书笔记 第三章 进程管理
- linux rm命令改造成回收站
- linux常见知识点总结
- Centos下本地连接postgresql时出现认证错误的问题
- Linux中怎样安装Chrome
- Linux学习笔记
- 《Linux内核分析》 第六周
- Linux系统中校验下载文件的完整性方法(MD5,SHA1,PGP)
- 《Linux内核分析》 第六节 进程的描述和进程的创建
- Linux学习6之环境下暂停进程和恢复暂停的进程