Linux权限管理

来源:互联网 发布:人工智能作业答案 编辑:程序博客网 时间:2024/04/30 14:56

基本权限

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/catll /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 仅列出目录本身的属性

0 0
原创粉丝点击