Linux基础知识--4.LInux用户和用户组以及权限管理

Linux基础知识--4.LInux用户和用户组以及权限管理

一.Linux用户和用户组

Linux操作系统是一个多用户、多任务的操作系统。有时可能多个用户在linux系统上操作一个任务,有时可能完成多个任务。用户的主要作用就是完成用户本身要完成的任务,不同用户所具有的权限也不同,所以能完成的任务也是有不尽相同。组:个人理解就是将用户和权限关联在一起的“容器”,我们可以把执行相同任务的用户加入同一个组内。

  当登录linux系统时要输入linux用户账号,但是linux主机不会是认识你的“账号名称”,它只会识别用户的ID号,每个登录系统的用户至少要包括两个ID,一个是用户ID(UID),另一个是组ID(GID)。

 1. 在linux系统中用户可分为三类:根用户(管理员用户),系统用户和普通用户。

   根用户root用户:可以操作系统任何文件和资源,拥有最高权限。

    root:UID为0 GID为0

   系统用户:这类用户不具有登录系统的能力,但是系统运行不可缺少的用户,比如bin、daemon、ftp、mail等。这类用户都是系统自身拥有的,而非后来添加。当然后续添加也行。

    系统用户的UID:1-499 但是在CentOS7上UID是:1-999

          GID:1-499 CentOS7上GID为:1-999

   普通用户:这类用户是用来登录系统,有自己的家目录,但是权限有限。

    普通用户的UID为500+ 在CentOS7上UID为:1000+

         GID:500+ CentOS7上GID为:1000+

  2.Linux用户组:

    linux组的分类:基本组,私有组和附加组(也称额外组)

    基本组:linux在创建用户的时候会同时创建和用户名相同的组,这个组就是基本组,不能把用户从这个组删除。

    附加组:附加组也称额外组,是除基本组之外用户所在的其他组。用户可以从附加组中删除。

    私有组:私有组就是一个linux用户的基本组在没有其他用户添加到此组,就称基本组属于这个用户的私有组。

  3.linux中和用户、组相关的配置文件及文件内容的意义:

    /etc/passwd:用户及其属性信息

    /etc/shadow:用户密码及其相关信息

    /etc/group:组及其属性信息

    /etc/gshadow:组密码及其相关信息

    1./etc/passwd文件中各字段含义:

      用户名:密码:UID:GID:用户注释信息:用户家目录:默认shell

      apache:x:48:48:Apache:/var/www:/sbin/nologin

    2./etc/shadow文件中个字段的含义:

      bin:*:15980:0:99999:7:::

      用户名:加密之后的密码:最近一次更改密码的日期:密码的最小使用期限:最大密码使用期        限:密码警告时间段:密码过期恕限时间:账户过期时间:保留字段

        注意:最近一次更改密码的日期:是从1970年1月1日到最近一个修改密码的天数。

          密码最小使用期限:便是两次修改密码之间所需的最小天数,0表示没有。

          密码最大使用期限:指的是密码保持有效的天数。

          密码警告时间段:表示从系统警告用户到用户密码正式失效的天数。

          密码过期恕限时间:如果用户过了警告时间仍没有从新设定密码,致使密码失效。用户仍然可以使用这个失效的密码在n天内登陆系统,若在这个期间人没有更改密码,则账号失效。

    3./etc/group文件中各字段的含义:

      bin:x:1:bin,daemon

      组名:组密码:GID:以当前组为附加组的用户列表(分隔符为逗号)

    4./etc/gshadow文件中各字段的含义:

      bin:::bin,daemon

      组名:组密码:组管理者:组成员

  4.linux 用户和组相关的管理命令:

   (1)用户创建:useradd 

    useradd [options] LOGIN

    常用选项:

      -u UID:指定UID 

      -g GID:指定GID

      -c "COMMENT":用户注释信息

      -d directory:指定用户的家目录

      -s SHELL:指定用户的shell

      -G group1,group2,...:指定用户的附加组,组事先要存在

      -r:创建系统用户

    和用户创建相关的一些文件和目录:

      /etc/login.defs /etc/shells /etc/skel /etc/default/useradd

    /etc/login.defs:此文件是创建用户时的一些限制,比如可以配置密码的最大过期天数,密码 最大长度等。该文件对root用户无效。

    /etc/shells:该文件存在当前系统支持的shell

    /etc/skel:该目录下存放了一些隐藏文件和目录。在建立用户时,用户初始化用户根目录。系 统会将此目录下的所有文件和目录都复制到新建用户的根目录,并且将用户的属主与用户组调整为与此根目录相同。

    /etc/default/useradd:通过useradd添加用户时的规则文件。

   (2)删除用户:userdel

    useradd [options] login

    useradd -r UserName:连同用户的家目录一并删除

   (3)用户属性的修改:usermod

    usermod [OPTION] login

    常用选项:

     -u UID:修改UID

     -g GID:修改GID

     -G group1,group,..:新附加组,原来的附加组将覆盖,如果不想覆盖使用-a选项,表append

      -s shell:指定新的shell

     -c "COMMENT":新的注释信息

     -d HOME:修改家目录,一般和-m选项连用。表示将原有家目录的内容一直新的家目录中

     -l Login_name:修改用户名

     -L:锁定用户

     -U:解锁用户

     -e YYYY-MM-DD:指明用户账号过期日期

     -f INACTIVE:设定非活动期限

   (4)给用户添加密码:passwd

    passwd [OPTIONS] UserName:修改指定用户的密码,仅root用户权限

    passwd :修改当前登录系统用户的密码

    常用选项

     -l:锁定指定用户

     -u:解锁指定用户

     -n mindays:指定密码最短使用期限

     -x maxdays:指定密码最大使用期限

     -w warndays:指定提前多少天开始警告

     -i inactivedays:非活动期限

     --stdin:从标准输入接收用户密码:

     eg:echo "PASSWORD" | passwd --stdin USERNAME

   (5)组创建:groupadd

    groupadd [OPTION]... group_name

    常用选项:

      -g GID:指明组ID

      -r:创建系统组

   (6)删除组:groupdel

     groupdel GroupName

    eg: groupdel admingroup

   (7)组属性修改:groupmod

    groupmod [OPTION].. group

    常用选项:

     -n group_name:修改组名

     -g GID:修改组ID

   (8)组密码创建:gpasswd

    让某个用户组具有一个管理员,这个用户组管理员能够管理那些账号可以加入/移除该用户组。

    gpasswd [option] group

    常用选项:    

     -a user:将user添加至指定组中

     -d user:删除用户user的以当前组为组的附加组

     -A user1,user2,...:设置有管理权限的用户列表

    其中newgrp命令是临时切换到一个加密组中,如果用户本不属于此组,则需要组密码

   (9)修改用户属性:chage

    chage [OPTION]... LOGIN

    常用格式:

     -l:列出用户密码的相关信息:

     -m mindays:修改密码的最小天数

     -M maxdays:修改密码的最大天数

     -I:密码过期后,锁定账号的天数

     -d:指定密码最后修改的日期

     -E:有效期,0表示立即过期,-1表示永不过期

     -W:密码过期前,开始警告的天数。

   (10)还有其他命令:chsh,finger,chfn。

     chsh:修改用户的shell

     chfn:change your finger information

     finger:finger - user information lookup program       

    # finger zkc

    Login: zkc            Name: Personal

    Directory: /home/zkc                Shell: /bin/bash

    Never logged in.

    No mail.

    No Plan.


二.Linux 权限管理

    Linux的文件权限主要针对三类对象:属主(u),属组(g),其他(o)

    每个文件针对每类访问者都定义了三类权限:读r,写w,执行x

    我们可以使用ls -la查看某个文件的属性和文件名。如:   

    [root@localhost ~]# ls -la
    total 64  
    dr-xr-xr-x. 21 root root 4096 Aug 15 22:37 ..
    -rw-------.  1 root root 1201 Aug 14 21:19 anaconda-ks.cfg
    -rw-------.  1 root root 2138 Aug 15 22:36 .bash_history
    -rw-r--r--.  1 root root   18 May 20  2009 .bash_logout
    -rw-r--r--.  1 root root  176 May 20  2009 .bash_profile
    -rw-r--r--.  1 root root  276 Aug 14 21:51 .bashrc

    分别表示文件的类型和文件的权限,连接数,属主,属组,文件大小,文件最后被修改的时间,文件名。

    1.文件的类型有一下几种:

      -:普通文件。

      d:目录文件。

      l:连接文件

      b:块设备文件.

      c:字符设备文件

      s:套接字文件

      p:管道文件

    2.文件对应属主,属组和其他的属性:rwx

      --- 000 0 

      --x 001 1 

       -w- 010 2

      -wx 011 3

      r-- 100 4

      r-x 101 5

      rw- 110 6

      rwx 111 7 

    目录和文件的权限意义:

     1.权限对文件的意义:

       r:可读取文件的内容,可以用文件查看类工具获取其内容

       w:可以编辑,新增或者修改文件内容(但不包含删除)

       x:该文件具有可执行的权限。可以把此文件提请内核启动为一个进程。

     2.权限对目录的意义:

       r:表示具有读取目录结构列表的权限。可以使用ls命令查看目录下的文件列表

       w:这个可写入的权限对目录来说很强大。表示具有更改该目录结构列表的权限,包括:

        新建新的文件与目录

        删除已经存在的文件或目录(不论该文件的权限为何)

        将已经存在的文件或目录进行重命名

        转移该目录内的文件,目录位置

       x:可以使用ls 命令查看目录下的文件列表,以及可以用cd转换到此目录下。


  修改文件和目录权限:chmod

    chmod [OPTION]... MODE FILE

       -R:可递归修改权限

      修改一类用户的所有权限:如:

        a=rwx,u=rwx,g=rwx,o=rwx

        uo=rw...

      此类修改权限之后将会把以前的权限覆盖

      eg:

       wKiom1Xb-zzAzCAZAAED6MVD5Fk167.jpg    

      修改一类用户的某些位的权限:

         u+rwx u-rwx o+x a+x 等。。

      eg:   

      [root@localhost ~]# ll a.txt 
      -r-xr--r-x. 1 root root 6 Aug 16 03:04 a.txt
      [root@localhost ~]# chmod a+w a.txt
      [root@localhost ~]# ll a.txt 
      -rwxrw-rwx. 1 root root 6 Aug 16 03:04 a.txt

     chmod [OPTION]... --reference=Rfile File...

     查看Rfile文件的权限,将File文件的权限修改为同Rfile.

      eg:  

      [root@localhost ~]# ll a.txt     
      -rwxrw-rwx. 1 root root 6 Aug 16 03:04 a.txt
      [root@localhost ~]# vim b.txt
      [root@localhost ~]# ls -l b.txt 
      -rw-r--r--. 1 root root 6 Aug 16 03:34 b.txt
      [root@localhost ~]# chmod --reference=a.txt b.txt
      [root@localhost ~]# ls -l b.txt 
      -rwxrw-rwx. 1 root root 6 Aug 16 03:34 b.txt

  修改文件和目录的属主和属组:chown(仅root用户)

    chown [OPTION]... [OWNER][:[GROUP]] FILE...

        -R:可递归修改权限

    用法:chown owner file

        chown owner:group file

        chown :group file

    chown [OPTION]... --reference=RFile File...

     修改文件File的属主属组同Rfile的属主属组

    eg:   

    [root@localhost ~]# chown zkc.zkc a.txt 
    [root@localhost ~]# ll a.txt 
    -rwxrw-rwx. 1 zkc zkc 6 Aug 16 03:04 a.txt
    [root@localhost ~]# chown --reference=b.txt a.txt 
    root@localhost ~]# ll a.txt 
    -rwxrw-rwx. 1 root root 6 Aug 16 03:04 a.txt

  修改文件的属组:chgrp

       chgrp [OPTION]... GROUP File

       chgrp [OPTION]... --reference=Rfile File...

     eg:   

    [root@localhost ~]# chgrp zkc a.txt
    [root@localhost ~]# ll a.txt
    -rwxrw-rwx. 1 root zkc 6 Aug 16 03:04 a.txt
    [root@localhost ~]# chgrp --reference=b.txt a.txt 
    [root@localhost ~]# ll a.txt 
    -rwxrw-rwx. 1 root root 6 Aug 16 03:04 a.txt

  文件或目录创建时的遮罩码:umask

    对文件:创建文件时的权利:666-umask

    如果某类用户的权限减得结果中存在x权限,将其权限加1.

    相对目录:777-umask


Linux文件系统上的特殊权限:SUID,SGID,Sticky

    1.通过前面学习Linux文件系统有普通权限:r,w,x

    2.Linux中的安全上下文:

      前提:进程必须有属主和属组。也就是文件有属主和属组

      a.任何一个可执行程序文件是否能能够执行,成为进程,取决于对这个文件发起者对这个文件是否拥有执行的权限。

      b.启动为程序之后,其进程的属主为发起者,进程的属组为发起者所属的组

      c.进程访问文件时的权限,取决于进程的发起者。

        1.进程的发起者属于文件的属主;则使用文件属主的权限

        2.进程的发起者属于文件的属组;则使用文件属组的权限

        3.有文件'其他'的权限

    3.SUID:

      任何一个可执行程序文件是否能启动为进程,取决于一个程序文件是否拥有执行的权限。

      可执行程序文件启动为进程之后,其进程的属主为源文件的属主(而不再属于发起者)

     权限设置:

        chmod u+s File..

        chmod u-s File..

      s这个标志出现在文件所有者的x权限上的。

       SUID权限只对二进制程序有效

       执行者对已该程序需要具有x的执行权限

       本权限仅在执行程序的过程中有效。

      eg:命令chmod只能root用户才能使用,虽然chmod的二进制文件的权限为:-rwxr-xr-x;

        但是普通用户还是不能执行此命令!!如:

        [root@localhost tmp]# ls -l /bin/chmod
        -rwxr-xr-x. 1 root root 50048 Nov 22  2013 /bin/chmod       
        [zkc@localhost tmp]$ whoami
        zkc
        [zkc@localhost tmp]$ chmod a+w test.sh 
        chmod: changing permissions of `test.sh': Operation not permitted

        为此二进制文件添加s权限,再次执行以下,结果如下:     

         [root@localhost tmp]# chmod u+s /bin/chmod 
         [root@localhost tmp]# ls -l /bin/chmod 
         -rwsr-xr-x. 1 root root 50048 Nov 22  2013 /bin/chmod
         切换到普通用户:
         [zkc@localhost tmp]$ chmod a+w test.sh 
         [zkc@localhost tmp]$ ls -l test.sh 
         -rwxrw-rw-. 1 root root 40 Aug 16 04:49 test.sh

        /bin/chmod添加s权限后,普通用户能够执行命令chmod,这只是普通用户"暂时"拥有root的权限。

    4.SGID:

      常用功能:

      a.设置在目录上:

        1.默认情况下,用户创建文件时,其属组为此用户所属的基本组;一旦某目录被设定了SGID的权限,则对此目录有写权限的用户,在此目录中所创建文件的属组就为此目录所属的属组!!          2.如果用户对此目录有r和x权限,用户还可以进入此目录中。

      b.针对文件进行设置:SGID对二进制程序有用,二进制文件的执行者需要有x权限。当执行者执行此二进制程序文件时,执行具有该程序用户组的权限:

      权限设定:

      chmod g+s File/DIR

      chmod g-s File/DIR

      eg:在/tmp目录下创建一个目录kk。在没有向kk目录设置g+s权限时,普通用户(此普通用户对此目录有写权限)在此目录下创建的文件的属组还是普通用户所属的组:如:    

       [root@localhost tmp]# ls -ld kk        
       drwxrxrwx. 2 root root 4096 Aug 16 06:30 kk
       [zkc@localhost kk]$ ls -l a
       -rw-rw-r--. 1 zkc zkc 0 Aug 16 06:35 a

      向目录kk添加g+s权限,添加权限之后,所创建的文件是目录所属的属组       

        [root@localhost tmp]# chmod g+s kk        
        [root@localhost tmp]# ls -ld kk
        drwxr-srwx. 2 root root 4096 Aug 16 06:36 kk
        [zkc@localhost kk]$ touch zkc
        [zkc@localhost kk]$ ls -l
        total 0
        -rw-rw-r--. 1 zkc zkc  0 Aug 16 06:35 a
        -rw-rw-r--. 1 zkc root 0 Aug 16 06:38 zkc

    当其他用户在有SGID权限的目录下创建文件时,文件的属组都为目录所属的组,因此,用户之间可以相互删除对方的文件,这样做是不安全的。所以就出现了第三种特殊权限Sticky。

    5.Sticky:

    这个特殊权限只对目录有效,对文件无效。对目录的作用有:

     1.当用户对此目录有w,x权限时,既具有写入的权限

     2.当用户在此目录下创建文件或目录时,仅自己或root才有权限删除此文件

    权限设定:

     chmod o+t DIR...

     chmod o-t DIR...

    eg:在一个目录下,此目录对其他用户有w权限。先以不同用户创建文件,查看是否能相互删除文件,然后在设置Sticky权限之后,在此查看能否相互删除文件。

     a.在不设定Sticky权限的情况下

    [root@localhost tmp]# ls -ld test
    drwxr-xr-x. 2 root root 4096 Aug 16 06:59 test
    [root@localhost tmp]# chmod o+w test
    [root@localhost tmp]# ls -ld test
    drwxr-xrwx. 2 root root 4096 Aug 16 06:59 test

      转到普通用户:

        [zkc@localhost test]$ touch zkc        
        [zkc@localhost test]$ ls -l
        total 0
        -rw-rw-r--. 1 zkc zkc 0 Aug 16 07:05 zkc
        [kk@localhost test]$ touch kk 
        [kk@localhost test]$ ls -l
        total 0
        -rw-rw-r--. 1 kk  kk  0 Aug 16 07:05 kk
        -rw-rw-r--. 1 zkc zkc 0 Aug 16 07:05 zkc

        查看是否能删除对方文件:

        [zkc@localhost test]$ rm -rf kk        
        [zkc@localhost test]$ ls
        zkc

       发现能删除对方文件 

     b.设定Sticky权限:   

        [root@localhost tmp]# chmod o+t test        
        [root@localhost tmp]# ls -ld test
        drwxr-xrwt. 2 root root 4096 Aug 16 07:06 test

      在kk用户下删除zkc用户创建的文件zkc:

        kk@localhost test]$ rm -rf zkc    
        rm: cannot remove `zkc': Operation not permitted
        [kk@localhost test]$ ls -l
        total 0
        -rw-rw-r--. 1 zkc zkc 0 Aug 16 07:05 zkc

      设定Sticky权限之后,虽然目录test的其他(o)权限有w权限,但是不能删除其他用户所创建的文件!

    

    特殊权限的权限位:

    SUID :4  SGID:2  Sticky:1

    SUID:user,占据属主的执行权限位:

      s:属主拥有x权限

      S:属主没有x权限

    GUID:group,占据属组的执行权限位:

      s:属组拥有x权限

      S:属组没有x权限

    Sticky:other,占据other的执行权限位:

      t:other拥有x权限

      T:other没有x权限

到此Linux基础中的用户,组,权限和特殊权限基本知识点介绍结束。。

你可能感兴趣的:(用户,组,SGID,特殊权限(SUID,文件权限(rwx))