Linux之用户、权限的管理

96
魏镇坪
2016.03.07 13:58* 字数 2920

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学习笔记