Linux权限管理
2015-11-30 21:55
337 查看
基本权限
1.基本权限的修改
"-rw-r--r--"这10位代表的含义如下-:
常见文件类型
|-- -文件
|-- d目录
|-- |软链接文件
rw-:u所有者
r--:g所属组
r--:o其他人
|-- r读~4
|-- w写~2
|-- x执行~1
chmod修改权限命令
修改文件权限方法:(假设文件名aa)
1.chmod u+x aa //给拥有者u增加x权限
chmod u+x,g+w aa //给拥有者u增加x权限,所属组增加写权限
2.chmod u-x aa //给拥有者取消x权限
3.chmod u=rwx aa //给拥有者u的权限是rwx
chmod u=rwx,g=rw aa //给拥有者u的权限是rwx,给所属组权限是rw
4.chmod a=rw aa //给u,g,o权限都设置为rw
5.chmod 755 aa //aa的权限为rwx r-x r-x
777、755、644
2.权限的作用
权限对文件的作用|--r:读取文件内容(cat more head tail)
|--w:编辑、新增、修改文件内容(vi echo),但是不包含删除文件
|--数据放在文件中,文件放在目录中;文件可以删数据,目录可以删文件
|--x:可执行(./)
权限对目录的作用
|--r:可以查询目录下的文件名(ls)
|--w:具有修改目录结构的权限。如新建文件和目录,删除此目录下的文件和目录,重命名此目录下的文件和目录,剪切(touch rm mv cp)
|--x:可以进入目录(cd)
对文件来讲:最高权限是 x
对目录来讲:最高权限是 w
对目录来讲,只能赋予0、5、7三种权限才有意义,赋予4、1、6没有丝毫意义
对目录来讲,没有必要这么极端,给其他普通用户都赋予写权限,对文件不够安全,只需更改所有者,并给所有者赋予足够的权限就够了
详见tony视频案例演示:root用户和user1普通用户,目录和文件的权限管理。
3.其他权限命令
改变文件所有者:chown 用户名 文件名chown user1 123
chmod 755 123
改变文件所属组:chgrp 组名 文件名
chgrp user1 123
chown user1:user1 123也可以~
练习:让用户对文件及目录拥有一定的权限
要求:
|--拥有一个av目录
|--让加藤老师拥有所有的权限(7)
|--让本课程学员有查看的权限(5)
|--其他所有人不许查看这个目录(0)
代码:
cd /
mkdir av
groupadd user
useradd jty
passwd jty
123
useradd user1
passwd user1
123
useradd user2
passwd user2
123
gpasswd -a user1 user
gpasswd -a user2 user
chown jty:user av
chmod 750 av
ll -d av --> drwxr-xr-x. 2 jty user 4096 11月 11 00:54 av
总结:
分配文件基本权限时的核心原则:在最小权限情况下能够实现要求即可!
4.文件默认权限
查看默认权限:umask返回:0022
|--第一位0:文件特殊权限
|--022:文件默认权限
新建文件,默认权限:644
新建目录,默认权限:755
文件的默认权限:
|--文件默认不能建立为执行文件,必须手工赋予执行权限
|--所以文件默认权限最大为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--
目录的默认权限:
|--目录默认权限最大为777
|--默认权限需要换算成字母再相减
|--监理文件之后的默认权限,为777减去umask值
例如:
目录默认最大权限为777,umask值022
-rwxrwxrwx减去-----w--w-等于-rwxr-xr-x
修改umask值
|--临时修改:umask 0022
|--永久修改:vi /etc/profile
特殊权限
一、ACL权限
1.ACL权限简介与开启ACL是Access Control List的缩写,主要的目的是在提供传统的owner,group,others的read,write,execute权限之外的局部权限设定。
ACL可以针对单个用户,单个文件或目录来进行r,w,x的权限设定,特别适用于用户身份不足、需要特殊权限的使用情况。
dumpe2fs -h /dev/sda5
dumpe2fs查询指定分区详细文件系统信息的命令
-h 仅显示超级块中信息,而不显示磁盘块组的详细信息
临时开启分区ACL权限:
mount -o remount,acl /
重新挂载根分区,并加入acl权限
永久开启分区ACL权限:
vi /etc/fstab 加入acl
mount -o remount /
重新挂载文件系统或重启系统,使修改生效
2.查看与设定ACL权限
查看ACL权限
|--getfacl 文件名
设定ACL权限
|--setfacl 选项 文件名
|-- -m 设定ACL权限
|--u:用户名:权限,给用户设定ACL权限
|--g:组名:权限,给用户组设定ACL权限
|-- -x 删除指定的ACL
|-- -b 删除所有的ACL权限
|-- -d 设定默认ACL权限
|-- -k 删除默认ACL权限
|-- -R 递归设定ACL权限
例如:
useradd laowang
useradd tony
groupadd stu
mkdir av
chown tony:stu av
chmod 770 av
setfacl -m u:laowang:rx av --> 给用户laowang赋予av文件的rx权限
groupadd tgroup2
setfacl -m g:tgroup:rwx av 为组tgroup2分配ACL权限
3.最大有效权限与删除ACL权限
mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限"相与"才能得到用户的真正权限
修改最大有效权限
setfacl -m m:rx 文件名
设定mask权限为r-x,使用"m:权限"格式
删除ACL权限
|--删除指定用户的ACL权限
|--setfacl -x u:用户名 文件名
|--删除指定用户组的ACL权限
|--setfacl -x g:组名 文件名
|--删除文件的所有的ACL权限
|--setfacl -b 文件名
4.默认ACL权限和递归ACL权限
|--递归ACL权限
|--递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限
|--setfacl -m u:用户名:权限 -R 目录名
|--递归权限仅能赋予目录,不能赋予文件
|--递归权限会出现权限溢出,很难控制,所以递归权限尽量少用
|--默认ACL权限
|--默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限
|--setfacl -m d:u:用户名:权限 目录名
二、sudo权限
root把本来只能超级用户的命令赋予普通用户执行sudo的操作对象是系统命令
visudo
#实际修改/etc/sudoers文件
例如:
visudo
在结尾行加入:
root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可用的身份)授权命令(绝对路径)
su user1 #切换成普通用户
sudo -l #查看可用的sudo命令
sudo /sbin/shutdown -r now #普通用户执行sudo赋予的命令
再例如:
visudo
user1 ALL=(ALL) /sbin/shutdown -r now
user1 ALL=/usr/sbin/useradd
user1 ALL=/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
#此时,虽然普通用户可以新增用户和修改密码,但是我们不能赋予普通用户给root用户修改密码的权限!
三、文件特殊权限
-->特殊权限尽量少修改!1.SetUID
|--SetUID针对执行文件的功能
|--只有可执行二进制程序才能设定SUID权限
|-- s = S + x
|--命令执行者要对该程序拥有x(执行)权限
|--命令执行者在执行该程序时获得该程序文件属主身份(在执行程序的过程中灵魂附体为文件的属主)
|--例如:普通用户可以通过passwd修改自己的密码,理由:ll /usr/bin/passwd --> -rwsr-xr-x. 1 root root 25980 2月 22 2012 /usr/bin/passwd
|--passwd是可执行文件,passwd此时的命令执行者user1对passwd拥有x执行权限,且passwd拥有SetUID权限,
|--所以在普通用户user1执行passwd过程中会灵魂附体为root用户,可以修改自己的密码。
|--SetUID权限只在程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
|--再如,ll /bin/cat --> -rwxr-xr-x /bin/cat
ll /etc/shadow --> ---------- /etc/shadow
|--shadow文件只有root管理员可以查看,cat命令没有SetUID权限,所以普通用户执行cat命令过程中不具备root用户身份,不能查看/etc/shadow文件的内容
|--设定SetUID的方法
|--4代表SUID
|--chmod 4755 文件名
|--chmod u+s 文件名
|--取消SetUID的方法
|--chmod 0755 文件名
|--chmod u-s 文件名
|--危险的SetUID
|--关键目录应该严格控制写权限,比如"/"、"/usr"等
|--对系统默认应该具有SUID权限的文件做一列表,写个脚本check_uid.sh,定时检查有没有这之外的文件被设置了SUID权限!
|--如:chmod 4755 /bin/vi --> 给vi赋予了SUID权限,那么普通用户user1在执行vi命令的过程中,也可以执行 vi /etc/shadow 的命令,修改root用户的密码,这很危险!
2.SetGID
|--SetGID针对文件的作用
|--只有可执行二进制程序才能设定SGID权限
|--命令执行者要对该程序拥有x(执行)权限
|--命令执行执行程序时,组身份升级为该程序文件的属组
|--GID权限只在程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
|--例如:usr/bin/locate具有SetGID身份,普通用户也可以使用locate查询命令
|--ll /usr/bin/locate
|-- -rwx--s--x. root slocate /usr/bin/locate
|--ll /var/lib/mlocate/mlocate.db
|-- -rw-r-----. root slocate /var/lib/mlocate/mlocate.db
|--/usr/bin/locate是可执行二进制程序,可以赋予SGID(通过ll命令发现,locate命令已经被赋予了SGID)
|--执行用户user1对/usr/bin/locate命令拥有执行权限(others用户拥有x权限)
|--执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对/var/lib/mlocate/mlocate.db数据库拥有r权限
|--所以普通用户user1可以使用locate命令查询mlocate.db数据库
|--命令结束,user1用户的组身份返回为user1自己所在组user
|--SetGID针对目录的作用
|--普通用户必须对此目录必须拥有r和x权限,才能进入此目录
|--普通用户在此目录中的有效组会变成此目录的属组
|--若普通用户对此目录拥有w权限,新建的文件的默认属组是这个目录的属组
|--例如:在赋予某个目录SGID权限之前,普通用户在此目录中新建文件,所属组会是普通用户所属组
|--但是如果赋予了该目录SGID权限之后,再在此目录中新建文件,该文件的默认所属组会是该目录的所属组
|--cd /tmp/
|--mkdir test
|--chmod g+s test
|--ll -d test
|--chmod 777 test
|--su user1
|--cd /tmp/test/
|--touch abc
|--ll --> -rw-rw-r--. 1 user1 root cangls
|--设定SetGID
|--2代表SGID
|--chmod 2755 文件名
|--chmod g+s 文件名
|--取消SetGID
|--chmod 0755 文件名
|--chmod g-s 文件名
3.Sticky BIT
|--SBIT粘着位作用
|--粘着位目前只对目录有效
|--普通用户对该目录拥有7权限
|--如果没有粘着位,普通用户拥有w权限,所以可以删除此目录下的所有文件,包括其他用户建立的文件
|--一旦赋予粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件
|--例如:/tmp目录就具有SBIT权限,防止用户误删除其他用户的文件
|--ll -d /temp/
|--drwxrwxrwt. /tmp/
|--设置粘着位
|--chmod 1777 目录名
|--chmod o+t 目录名
|--取消粘着位
|--chmod 0777 目录名
|--chmod o-t 目录名
四、不可改变位权限
|--chattr命令格式|--charrt [+-=][选项] 文件或目录
|-- +:增加权限
|-- -:删除权限
|-- =:等于某权限
|-- i:
|--如果对文件设置i属性,那么不允许对文件进行删除,改名也不能添加和修改数据
|--如果对目录设置i属性,那么只能修改目录下文件的数据,但不能建立和删除文件
|-- a:
|--如果对文件设置a属性,那么只能在文件中增加数据,但不能删除也不能修改数据
|--文件只能用 echo >> 输出重定向,向文件中添加数据,不可以使用vi
|--如果对目录设置a属性,那么只允许在目录中建立和修改文件,但不允许删除
|--lsattr命令格式
|--lsattr 选项 文件名
|-- -a 显示所有文件和目录
|-- -d 仅列出目录本身的属性
相关文章推荐
- Linux部署web程序
- 从windows到LinuxSVN数据迁移小结
- Linux常用命令
- linux下vi命令大全
- gdb和arm-linux-gdb命令详解
- Linux系统与Windows的基本区别
- linux date命令
- Linux简介与虚拟机安装
- 不就是抽个血吗,至于么-jQuery,Linux完结篇
- 全面解析Linux 内核 3.10.x - start_kernel()
- linux下字符串处理工具二:awk( 二),awk脚本
- Linux kgdb命令
- centos下mysql主从搭建总结
- 内核阅读之浅析Linux2.6.34内核路由数据转发(一)
- linux_根据关键词_路径下递归查找code
- Linux 注销 登录 重启
- Device eth0 does not seem to be present, delaying initialization(解决克隆CentOS6.3虚拟机后网卡设备无法启动问题)
- arm-linux内核编译过程小结
- LINUX集群技术构建ANSYS分布式高性能计算平台
- Linux第三次实验报告