美文网首页程序员充电站Linux
Linux之用户、权限的管理

Linux之用户、权限的管理

作者: 魏镇坪 | 来源:发表于2016-03-07 13:58 被阅读1599次

    Linux User and Group、Mode Management

    早期Linux系统设计为了能够实现多用户、多进程高效的利用服务器资源,在此种情况下,为了能够保证用户与用户之间的文件不被随意的访问及修改、删除等操作,用户、组的管理能在某种程序上实现管理用户或批量管理用户。由于Linux的设计哲学思想『一切皆文件』,用户对设备的访问就是对文件的访问。

    此章节涉及到的命令汇总
    useradd,usermod,userdel,groupadd,groupdel,groupmod,passwd,gpasswd,newgrp,su,id,chmod,chown,chgrp,setfacl,getfacl
    ==============

    理论相关

    User:

    管理员
        UID:0,GID:0
    系统用户
        UID:1-499  GID:1-499(Centos6)
        UID:1-999  GID:1-999(Centos7)
    普通用户
        UID:500-60000  GID:500-6000(Centos6)
        UID:1000-60000 GID:1000-60000(Centos7)
    

    group:

    分类一:
        系统组
        普通用户组
    分类二:
        基本组
        附加组
    分类三:
        私有组
        公有组
    注:组的UID、GID跟用户的分配类似
    

    File Mode:

    Linux系统安全上下文:
        当一个用户发起一个进程时,此进程将继承用户的属主、属组的权限,再以进程继承的权限来控制文件的访问权限。
    Linux权限标识:
        r: Readable 读
        W: writable 写
        x: executable 执行
    rwx标识对文件及目录的意义:
        对文件:
            r : 可以读取文件中的内容
            w : 可以修改及删除文件中的内容
            x : 可以将其发起为一个进程
        对目录:
            r : 可以查看目录中的文件,可以使用ls命令, 但不能使用 -l选项
            w : 可以创建、删除目录,但不能修改文件中的内容
            x : 可以使用cd命令进入目录
    文件及目录权限详细表示方面
        文件:-rwxrwxrwx
            从左边第二位开始,每三位代表一个权限类别:
                u : owner
                g : owner group
                o : other
                a : 代表以上三项
        目录:drwxrwxrwx
                u、g、o同文件权限位
        
    Linux内核对文件权限的表示方法:
        rwx: 4 2 1 
    

    Umask Mode Control

    Linux对初始权限的控制来自于Umask的设定,其工作原理如下:
        对新建立的文件:
            666 - Umask值(由于Linux对文件的执行权限控制很严格,默认取消了文件的执行权限,所以这里是666)
        对新建立的目录:
            777 - Umask值 
    Umask对管理员ROOT的初始值:022
    Umask对普通用户的初始值为:002
    
    普通用户建立的文件及目录权限如下:
        文件:
            666-002=664 (如果减得的结果为奇数,就自动加1)对应的权限如下:
                -rw-rw-r--
        目录:
            777-002=775 ,对应的权限如下:
                drwxrwxr-x
    对管理员root建立的文件及目录权限如下:
        文件:
            666-022=644,对应的权限如下:
                -rw-r--r--
        目录:
            777-022=755,对应的权限如下:
                drwx-r-xr-x
    注:Umask的值可以使用umask命令来设置,但只对当前进程(即shell)有效,如要长期有效,需将此值设置到/etc/profile文件中,或者家目录下的.开头的文件中
    

    ===================

    Configuration file for Linux system

    User:
    `/etc/passwd` (记录用户的详细信息)
    `/etc/shadow` (记录用户的密码信息)
    
    Group:
    `/etc/group`   (记录组的详细信息)
    `/etc/gshadow` (记录组的密码信息)
    
    定义创建用户时的默认配置信息:
    `/etc/default/useradd`(记录创建用户所需设定的值)
        useradd -D 可以设置对应的参数
    `/etc/login.defs`(配置创建用户预设详细参数)
    

    对应文档的格式说明

    /etc/passwd

    root:x:0:0:root:/root:/bin/bash

    用户名:密码:UID:GID:用户注释信息:用户家目录:Shell定义
    1. 用户名: 用户的名称
    2. 密码: X表示占位符,也可以是密码
    3. UID: 用户识别代码
    4. GID: 用户所属组的GID(基本组)
    5. 用户注释信息:Comment,可以完善用户的基本信息
    6. 用户家目录: 系统登录用户后的工作目录
    7. shell: 定义用户登录系统所使用的shell,指定的shell需要在/etc/shells中出现

    /etc/shadow

    root:$6$YqkEsOcfKPptyhnS$YD0ym4BZ52pzcCnU....:16781:0:99999:7:::

    用户名:密码:上一次修改密码的时间:密码最小使用期限:最长使用期限:警告时间:帐户过期时间:保留字段
    1. 用户名: 用户的名称,对应/etc/passwd文件中
    2. 密码: Centos6中使用MD5加密算法,Centos7中使用sha1的算法,第一个$后面加密算法类型,第二个$后面表示salt,第三个$后面表示密码的提取码(参照加密类型)
    3. 上一次修改密码的时间: 指用户上次修改密码的时间,计算方法:从Linux元年1970年01月01日0点0分到目录所经过的秒数
    4. 密码最小使用期限: 指用户修改密码后,需要到多少天后方可更改密码,0表示禁用
    5. 密码最长使用期限: 指用户的密码到多少天后需要修改密码
    6. 警告时间: 指用户密码到期前多少天提示用户修改密码,0和空字段表示禁用此功能
    7. 帐户过期时间: 批帐户在密码过期后多少天还未修改密码,将被停用

    /etc/group

    root:x:0:

    组名:密码:GID:User_list
    1. 组名:组的名称,默认同名用户名
    2. 密码: 组的密码占位符,用于用户临时切换至需要的组以获取相应权限,可以使用newgrp - GROUP_NAME切换
    3. GID:组的全局识别号
    4. User_list:隶属此组的用户,多个用户使用","隔开

    /etc/gshadow

    root:$6$PLRAi/Z/svr$PRelPtvLuGJqvFG3D8fbjYHDho2RQUe93glO.::

    组名:密码:组管理者:User_list
    1. 组名:组的名称,同步/etc/group文件中
    2. 密码:第一个$后面表示加密算法,第二个$后面表示加密的密码
    3. 组管理者:可以对此组成员有操作权限,如果有多个,可以用逗号隔开
    4. User_list: 用户的列表,如果有多个,可以使用逗号隔开

    =============

    Linux管理用户的相关命令

    添加用户:

    `useradd` - create a new user or update default new user information
        synopsis: useradd [options] LOGIN
                  useradd -D [options]
                  
        options:
            -u : 指定用户的UID
            -g : 指定GID
            -c : 指定注释信息,如果有空格,需要使用" "包含
            -d : 指定用户家目录,创建用户时,会自动将/etc/skel中的文件复制到用户家目录下,如果指定的文件存               在将不会复制文件,如果父目录不存在,创建也将会失败
            -s : 指定用户shell
            -r : 指定创建一个系统用户
            -M :不创建用户家目录
            -G : 指定附加组,多个使用逗号隔开
            -D :修改创建用户的配置信息,文件位于/etc/default/useradd
                注:创建用户时的诸多默认设定配置文件为/etc/login.defs
    

    修改用户:

    `usermod` - modify a user account
        synopsis: usermod [options] LOGIN
        
        options:
            -u : 修改用户UID
            -g : 修改用户GID
            -c : 修改用户的注释信息
            -d : 修改用户家目录,需要配合使用-m选项才会自动复制用户家目录下的文件到新的家目录
            -m : move-home to new directory
            -s : 修改用户的shell
            -l : 修改用户的登陆名,即login名称
            -G : 修改用户的附加组信息,需要配合-a(append)一起使用,如果不使用-a将删除原来的附加组
            -a : --append,连接多个附加组的参数
            -L : 锁定用户,即lock,在/etcpasswd文件中,密码前面加!(一个)
            -U : 解锁用户,即unlock,在/etc/passwd文件中,取消密码前面的!号
    

    删除用户

    `userdel` - delete a user account and related files
        synopsis: userdel [options] LOGIN
        
        options:
            -r : 删除用户的同时删除用户的家目录,即--remove参数
    

    用户密码设置

    `passwd` - passwd - update user's authentication tokens
        synopsis:passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
        1、passwd (修改自己的密码)
        2、passwd USERNAME(修改其他用户的密码,root权限 )
        options:
            -l : 锁定用户,在/etc/passwd的密码前面加!!,
            -u : 解锁用户,在/etcpasswd的密码前!!取消
            -d : --delete,删除用户密码
            -e DATE : --expire,设定过期时间
            -i DAYS : 非活动时间
            -n days : 最短使用期限
            -x days : 最长使用期限
            -w days : 警告期限
            --stdin : `echo "PASSWD" | passwd --stdin root` 
    

    Linux管理组的相关命令

    添加组

    `groupadd` - create a new group
        synopsis: groupadd [options] group
        
        options:
            -g : 指定GID号
            -r : 指定为一个系统组
    

    修改组

    `groupmod` - modify a group definition on the system
        synopsis: groupmod [options] GROUP
        options:
            -g : 修改GID号码
            -n : 修改组名称 (groupmod -n NEW_GROUP OLD_GROUP)
    

    删除组

    `groupdel` - delete a group
        synopsis: groupdel GROUP_NAME
    

    组密码设置

    `gpasswd` - administer /etc/group and /etc/gshadow
        synopsis: gpasswd [option] group
        
        options:
            -a USER_NAME GROUP_NAME: 向组内添加用户
            -d USER_NAME GROUP_NAME: 把用户从组内删除
            -r USER_NAMEG : 删除组的密码
    

    临时切换到其他组,好能够获取相应权限

    `newgrp` - log in to a new group
        synopsis: newgrp [-] [group]
            - : 模拟用户登陆, 以实现重新初始化环境变量
    

    查看用户相关信息

    `id` - print real and effective user and group IDs
        synopsis: id [OPTION]... [USERNAME]
        
        options:
            -u : 查看UID号
            -g : 查看GID号
            -G : 查看附加组GID号,其他包含基本组ID号
            -n : 将各ID转换为对应的名称   
    

    切换用户

    `su` - switch user
        sysnopsis: su [-] USER
        
        options:
            - : 以登陆方式切换用户,以完成用户环境变量、配置信息加载
            -c : 不用登陆用户即可以以指定用户执行命令
                  `su - mariabd -c 'id -u'`
    

    用户权限管理

    `chmod` - change file mode bits
        sysnopsis: chmod [OPTION]... MODE[,MODE]... FILE...
                   chmod [OPTION]... OCTAL-MODE FILE...
                   chmod [OPTION]... --reference=RFILE FILE...
        options:
            -r --recursive : 递归修改
            --reference : 参照某文件来修改           
        Usage: 
            1、赋权等值法
                chmod u=rwx,g=rwx,0=rwx FILE
                chmod a=rwx FILE
            2、赋权加减法
                chmod u-rwx,g-rwx,o-rwx FILE
                chmod ugo-x FILE
                chmod u+rwx,go+r FILE
                chmod a+r FILE
            3、十进制赋权法
                chmod 777 FILE
            4、参照赋值法
                chmod --reference/var/log/file FILE
            
            注意:1、在使用a+w的情况下,只有属主才会加w,go是不会加上W权限
                 2、目录有写权限操作,但对目录下的文件同有写权限时,用户是不能写文件、但有删除文件的能力
    

    =============

    chmod自己没有执行权限的解决方法:

    1、使用ACL控制修复
    • 1、setfacl -m u:root:rwx /bin/chmod
    • 2、/bin/chmod 755 /bin/chmod
    • 3、setfacl -b /bin/chmod (-b表示清除所有ACL访问规则 )
    2、使用系统盘的emergency模式,使用光盘的chmod修改根文件系统中的chmod权限

    =========

    用户属主、属组修改(ownership)

    `chown` - change file owner and group
        synopsis: chown [OPTION]... [OWNER][:[GROUP]] FILE...
                  chown [OPTION]... --reference=RFILE FILE... 
        options:
            -R :  --recursive 递归修改
            --reference : 参照某文件来修改
        Usage:
            chown mariadb FILE : 只修改文件的属主为mariadb
            chown mariadb:mariadb FILE :修改文件的属主、属组为mariadb
            chown mariadb:mariadb FILE : 同上
            chown --reference=/var/log/file FILE : 参照/var/log/file来修改FILE的属主、属组
            
    `chgrp` - chgrp - change group ownership
        synopsis: chgrp [OPTION]... GROUP FILE...
                  chgrp [OPTION]... --reference=RFILE FILE...
                  
            注:由于chgrp只能修改属组,故一般情况都使用chown代替
    

    =============

    Useradd、Usermod、Userdel、groupadd、groupdel、groupmod参数汇总

    通用参数

    用户管理类

    useradd:

    -u
    -g
    -c
    -d
    -s
    -G
    -r
    -M
    -D

    usermod:

    -u
    -g
    -c
    -d
    -s
    -G
    -a
    -m
    -l
    -L
    -U

    userdel:

    -r

    id:

    -u
    -g
    -G
    -n

    su

    -c

    说明:前四个命令中,命令使用的参数意义大体一样,只是useradd 和userdel的-r参数意义不一样,前者表示为system,后者表示为remove,最后的su命令-c表示为command的意义。

    =========

    passwd:

    -d
    -l
    -u
    -i
    -e
    -n
    -x
    -w
    --stdin

    说明:passwd与上者三个命令有重合的参数-l,-u与usermod -L-u大小写不一样,userdel的-r 与passwd中的-d表示不一样,同为删除,前者表示为remove,后者表示为delete.

    =======

    组管理类

    groupadd:

    -r
    -g

    groupmod:

    -g
    -n

    groupdel:

    无参数

    说明:以上三个组管理命令 -g -r同管理用户的命令,groupmod中的-n代表为new的意义

    ========

    Linux系统特殊权限

    Linux的安全上下文:

    1. 进程以某用户的身份运行,进程是发起此进程用户的代理,因此以此用户的身份和权限完成所有操作
    2. 权限匹配模型:
    • 判断进程的属主,是否为被访问文件的属主,如果是则应用屋主的权限,否则进入第二步;
    • 判断进程的属主,是否属于被访问文件的属组,如果是则应用属组的权限,否则进入第三个步
    • 应用Other权限

    特殊权限位

    一. SUID

    SUID为什么需要?

    默认情况下,用户发起的进程,其运行的进程属主是其发起者

    SUID的作用

    SUID模型就是为了改变上述情况的匹配模型,当用户运行某程序时,如果此程序拥有SUID权限,那么此程序运行为进程时,进程的属主不再是进程的发起者,而是程序文件自己的属主。

    SUID实例应用:

    如用户需要修改密码调用passwd程序时,需要将修改好的密码保存至/etc/shadow文件中,但如果以Linux安全上下文的模型应用,用户根本没有权限将新密码保存至/etc/shadow文件中,故passwd的程序就是一个拥有SUID权限的程序。当有新用户发起此程序时,进程的属主不再是进程发起者,而是/etc/passwd文件的属主,即root。
    

    SUID权限的表示方法

    1. -rws------ : 如果原本的U上有x权限,设置SUID后,x位变成小写的s
    2. -rwS------ : 如果原本的U上没有x权限,设置SUID后,x位变成大写的s

    SUID的设置文件

    1. chmod u+s FILE
    2. chmod 4000 FILE

    二、SGID

    SGID为什么需要?

    通常用户于目录,将多个用户添加进一个附加组,在这个目录下建立的文件都属于这个附加组,附加组的成员都可以来修改属于这个附加组的文件,有修改,删除权限。

    SGID的作用

    当目录属主有写权限,且有SGID权限位时,所有属于此目录的属组,且以属组身份在此目录中新建文件或目录时,新文件的属组不再是用户的基本组,而是此目录的属组,用户可以修改此附加组下的所有文件

    SGID的应用实例

    即SGID就是有效的解决了基本安全模型中,用户自能修改自己的文件。改进成了:在要在此目录下建立的文件,属组都属于目录的属主,只要是需要这个附加组的成员,都可以修改。类似团队协同工作的情况下,可以以此类模型工作。

    SGID权限的表示方法
    1. ----rws---:如果原本G上有x权限,设置SGID后,x位变成小写的s.
    2. ----rwS---:如果原本G上有x权限,设置SGID后,x位变成大写的S.

    SGID的设置文件

    1. chmod g+s FILE
    2. chmod 2000 FILE

    三、Sticky

    sticky为什么需要?

    应用于SGID这样协同办公的情况下, 用户能做到修改自己、其他用户的文件,却也能删除其他用户的文件,这种情况下非常的不安全,不能保证其他用户文件的安全存放问题。

    sticky的作用

    即为了解决以上情况,应用上层目录有写权限,属于此目录的组中的用户,只能修改文件,却不能删除别人的文件,能删除属于自己的文件

    Sticky的表示方法
    1. -------rwt:如果原本o上有x权限,设置Sticky后,x位变成小写的t.
    2. -------rwT:如果原本o上有x权限,设置Sticky后,x位变成大写的T.

    四、facl(filesystem access control list)

    为什么需要facl功能?

    由于Linux安全模型中,当user1所拥有的文件想让user2来读取、写,只能通过如下方式实现:

    • 将user2加入user1组中,即设置user2的附加组为user1;
    • 在user1的文件中,在Other权限中加入rw操作
      以上操作首先需要有管理员才能操作,另外,Other中应用r或者w权限安全隐患太大,故需要facl来解决。
    facal的功能
    • 实现用户自己管理权限;
    • 对需要权限的用户设置单独的权限
    facl应用后,权限访问模型发生的改变
    • 当用户访问一个文件时,系统会先检查用户的属主是否等于文件的属主,否则,向下应用;
    • 检查facl权限中应用的user权限位,有没有对应用户的授权权限,如果有则应用,否则,向下应用;
    • 检查用户的属组是否跟文件的属组一致,或者检查此用户的附加组,有没有添加为文件的属组,有则应用,否则;
    • 检查facl权限中应用的group权限位,有没有对应组的授权权限,如果有则应用,否则
    • 检查Other的权限。
    facl的设置
    `facl` - filesystem access control list
        sysnopsis: facl [options] [u|g]:[USER|GROUP][MODE][FILE]
        options:
            `-m` : 设置权限
            `-x` : 清除权限
    
    应用实例
    1. facl -m u:mariadb:rw ./file : 设置用户为mariadb对当前目录下的file有读写权限;
    2. facl -m g:mygrp:rw ./file : 设置组为mygrp对当前目录下的file文件有读写权限
    3. setfacl -x u:user5 dir/ :清除user5对dir目录的权限
    4. setfacl -b ./file : 清除file文件的所有用户和组的facl权限设置
    facl权限的查看方法

    getfacl FILE : 查看file文件的facl的权限控制

    有facl权限控制机制的文件,展示格式

    ----------+ : 在权限位后面多出来一个+号,表示此文件有设置facl权限位

    ==========
    转载请注明出处

    相关文章

      网友评论

      本文标题:Linux之用户、权限的管理

      本文链接:https://www.haomeiwen.com/subject/mjnakttx.html