Linux的用户、组和权限管理

用户:

计算机的资源是有限的,但使用者有很多,为了能够实现这些使用者彼此之间在资源上进行隔离而保证各使用者的文件得到保护,并且我们让主机能够认定这个使用者的确是他所声称的那个使用者,所以我们必须要在整个系统上完成两种机制,1.认证机制Authertication,2.授权机制Authorization,3审计机制 Audition

         用户类别:

                   管理员用户:root

                   普通用户:分系统用户和登录用户两种

         用户的标识:UserID,UID,范围16bits的二进制数字,0-65535

                   管理员:0

                   普通用户:1-65535

                            系统用户:centos5,61-499  centos71-999

                            登录用户:centos5,6500-60000,centos71000-60000

         UsernameUID的名称转换是根据名称解析库来进行转换的,其路径为/etc/passwd

         使用cat/etc/passwd可以看到文件的格式为:

           name:password:UID:GID:GECOS:directory:shell

name:用户名,password:可以是加密的密码,也可以是占位符x(一般是占位符),UID:用户IDGID:用户所属主组的ID,GECOS:用户的注释信息,可选,derictory:用户的主目录(家目录),shell:登录时的默认shell程序。

组:

         组是具有相同特征用户的逻辑集合。

         组有3种类别:

                  类别1

                            管理员组

                            普通用户组:包括系统组和登录组

                  类别2

                            用户的基本组

                            用户的附加组

                  类别3

                            私有组:组名同用户名,且只包含一个用户

                            公共组:组内可以包含多个用户

         组的标识:

                   管理员组:0

                   普通用户组:1-65535

                            系统用户组centos5,61-499centos71-999

                            登录用户组:centos5,6500-60000centos71000-60000

         GroupnameGID的名称转换是根据组名称解析库来进行转换的,其路径为/etc/group

认证信息:

         通过比对事先存储的信息与登录是提供的信息是否一致:

                   用户密码存放路径:/etc/shadow

                   组密码存放路径:/etc/gshadow

    密码使用策略:


    1. 使用随机密码

    2. 最短不要低于8

    3. 使用大写字母、小写字母、数字、标点符号四类字符中的任意三种

    4. 定期更换密码

Linux系统的密码使用的是单向加密,有以下几种算法:md5,sha,sha224,sha256,sha284,sha512,可以依次排序为1-6centos5md5,centos6,7sha512,在计算时系统会添加随机数(salt)来确保每个用户的密码不相同。

查看shadow文件组成:

         [root@localhost ~]# cat /etc/shadow

root:$6$OxkZXzfIIK0bvTGu$jdJnzwpbYIxDSUZoPWsHcVw5B50Q8om9pWelrPlokCtgJWZtXC4Kpi.AH22gowxkSAOJck2KxtiqaCxvkwsRe1::0:99999:7:::

用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期期限:保留字段

       备注:加密的密码里面有三个$符,第一个与第二个之间的数字表示加密 算法,第二个和第三个     之间为随机数,第三个到下一个:之间的字符为salt+密码字段。

         用户组的信息库/etc/group

                   Group_name:password:GD:user_list

                            User_list:该组的用户成员,以此组为其附加组的用户的用户列表

        

权限:

         安装上下文:

                   进程以其发起者的身份运行;进程对文件的访问权限,取决于发起此进程用户的权限;

                   进程对文件的访问权限应用模型:进程的属主与文件的属主是否相同,如果相同,则应用属主权限,否则,则检查进程的属主是否属于文件的属组,如果是则应用属组权限,否则,就只能应用other的权限。

         系统用户:为了能够让后台进程或服务类进程以非管理员的身份运行,通常需要创建多个普通用户,这类用户从不用登录系统、

         权限管理:

                   使用命令ls –l 可以查看到目录或文件的详细信息

                            [root@localhost ~]#ls -l /etc

-rw-r--r--.  1 root root       16 3  29 14:02 adjtime

-rw-r--r--.  1 root root     1518 6   7 2013 aliases

-rw-r--r--.  1 root root    12288 3  29 15:31 aliases.db

                            可以看到,左侧的-rw-r--r—表示这个文件的权限其中:r代                  表readable,读权限;w代表writeable,写权限;x代表excuteable,执行权限,-表示无权限。

                文件和目录略有区别:

                          文件:r:可获取文件的数据

                                w:可修改文件的数据

                                x:可将此文件运行为进程

                          目录:r:可使用ls命令来获取其下的所有文件列表

                                w:可修改此目录下的文件列表,即创建或删除文件

                                x:可cd至此目录中,且可以使用ls–l来获取文件的详细属性信息

                 权限的组合机制:各种组合刚好可以用八进制数0-7表示出来。

                     ---  000   0

                     --x  001   1

                     -w-  010   2

                     -wx  011   3

                     r--  100   4

                     r-x  101   5

                     rw-  110   6

                     rwx  111   7 

用户,组,权限管理的相关命令:

    groupadd命令:创建组

        groupadd [options] name

            -g GID,手动指定GID,默认是上一个组的GID+1

            -r 创建系统组

手动指定slackware组为系统组,其GID为766:

root@localhost ~]# groupadd -r -g 766 slackware
[root@localhost ~]# tail -1 /etc/group
slackware:x:766:

    groupmod命令:修改组属性

        groupmod [options] GROUP

            -g :修改GID

            -n new_name :修改组名

[root@localhost ~]# groupmod -g 800 slackware
[root@localhost ~]# tail -1 /etc/group
slackware:x:800:

        

root@localhost ~]# groupmod -n archlinux slackware
[root@localhost ~]# tail -1 /etc/group
archlinux:x:800:

 groupdel命令:删除组

    groupdel [options] GROUP

useradd命令:创建用户

    useradd [options] name

        -u,--uid UID:指定UID

        -g,--gid GROUP:指定基本组ID,此组得事先存在

        -G,--groups GROUP1[,GROUP2,...[,GROUPN]]:以指定用户所属附加组,多个组之                             间用逗号分隔。

        -c,--comment COMMENT:指明注释信息

        -d,--home HOME_DIR:以指定的路径为用户的家目录,通过复制/etc/skel目录,并

                            重命名实现,指定的家目录如果事先存在,则不会为用户复制

                            环境配置文件。

        -s,--shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells

                            文件中。

        -r,--system :创建系统用户

    注意:创建用户时的诸多默认设定配置文件为/etc/login.defs.

[root@localhost ~]# id docker
uid=1002(docker) gid=1002(docker) 组=1002(docker)

 useradd -D:显示创建用户的默认配置。

 useradd -D [options] :修改默认选项的值。

    修改结果保存于/etc/default/useradd

 usermod命令:修改用户属性

    usermod [options] user_name

        -u --uid UID:修改用户的ID为指定的新的UID

        -g --gid GROUP:修改用户所属的基本组

        -G --groups GROUP1[,GROUP2,...[,GROUPN]]:修改用户所属的附加组,原附加组会被

                                                  覆盖。

        

            -a  --append:与-G一同使用,用于为用户添加新的附加组

    -c  --comment COMMENT:修改注释信息

    -d  --home HOME_DIR:修改用户的家目录,用户原有的文件不会被转移至新的位置

    -m  --move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录

    -l  --login NEW_LOGIN :修改用户名

    -s  --shell SHELL:修改默认的shell

    -L  --lock  :锁定用户的密码,即在用户原来的密码字符串之前添加一个“!”

    -U  --unlock:解锁用户密码

    userdel命令:删除用户

        userdel [options] usr_name

            -r 删除用户时一并删除用户的家目录

    passwd命令:修改密码

        passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i           inactivedays] [-S][--stdin] [username]

            1.passwd:修改自己的密码

            2.passwd USERNAME:修改指定用户的密码,但仅root有此权限

                -l  -u  :锁定用户和解锁用户

                -d:清除用户密码

                -e DATE:过期期限,日期

                -i DAYS:非活动期限

                -n DAYS:密码最短使用期限

                -x DAYS:密码最长使用期限

                -w DAYS:警告期限


                --stdin

                    echo "PASSWORD" | passwd --stdin USERNAME

                    利用管道将'PASSWORD'字符设置为USERNAME的密码,在脚本中常用到。

    gpasswd:组密码命令

        /etc/gshadow

        gpasswd [options] group

            -a USERNAME :向组中添加用户

            -d USERNAME :向组中移除用户

[root@localhost ~]# gpasswd -a docker mytest
正在将用户“docker”加入到“mytest”组中
[root@localhost ~]# id docker
uid=1002(docker) gid=1002(docker) 组=1002(docker),1003(mytest)
正在将用户“docker”从“mytest”组中删除
[root@localhost ~]# id docker
uid=1002(docker) gid=1002(docker) 组=1002(docker)

    nergrp命令:临时切换组为用户的基本组

        newgrp [-] [group]

            -:会模拟用户重新登录以实现重新初始化其工作环境。

[root@localhost ~]# groupadd ubuntu
[root@localhost ~]# newgrp ubuntu
[root@localhost ~]# id
uid=0(root) gid=1004(ubuntu) 组=1004(ubuntu),0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

    chage命令:更改密码过期信息

        chage [options] user_name

            -d 从UNIX元年开始到密码到期的天数

            -E 过期期限

            -W 警告期限

            -m 最短期限 

            -M 最长使用期限

    spacer.gifid命令:显示用户的真实的和有效的ID信息

        id [options] USERNAME

            -u 仅显示有效的UID

            -g 仅显示用户的基本GID

            -G 仅显示用户所诉的所有组的ID

            -n 显示名字,而非ID

    su命令:switch user

        登录式切换;会痛重新读取用户的配置文件来重新初始化

            su - USERNAME

            su -l USERNAME

        非登录式切换:不会读取目标用户的配置文件进行初始化

            su USERNAME


        su - USERNAME -c 'COMMAND'

            仅以指定用户的身份运行此处指定的命令;   

    其他几个不重要的命令:chsh,chfn,finger,whoami,pwck,grpck...

    chmod:权限修改命令;

        1.chmod [options]...MODE[,MODE]...FIEL...

            用户可以分为三类:u:属主,g:属组,o:其他,a:所有

            MODE的表示方法:

                赋权表示法

                    u=[r][w][x]

                    g=[r][w][x]

                    o=[r][w][x]

                    a=[r][w][x]

                如果没有任何权限可以用-表示,

                授权表示法:

                     u+rwx,u-rwx

                     u+rwx,u-rwx

                     u+rwx,u-rwx

                     u+rwx,u-rwx

        2.chmod [options] ... OCTAL_MODE FILE...

                8进制权限表示位

        3.chmod [options] ...--reference=RFILE FILE...

            参考某一文件的权限信息

        选项:

            -R 递归修改

        注意:用户只能修改属主为自己的那些文件的权限。

    从属关系管理命令:chown,chgrp

        chown命令:

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

            chown [options] ...--reference=RFILE FILE

                -R 递归修改

        chgrp命令:

            chgrp [options] ...GROUP FILE...

            chgrp [options] ...--reference=RFILE FILE...

         注意:仅管理员可以修改文件属主,属组。

    umask:文件的权限反向掩码,遮罩码;

            文件:

                666减去umask

            目录:

                777减去umask

        注意之所以文件用666去减表示文件默认不能拥有执行权限,如果减得得结果有执行权限,则

        需要将其加1;

            例:umask:023 那么文件的权限是666-023=644,目录777-023=754

        umask命令:注意此类设定仅对当前shell有效。   

            umask:查看当前umask

            umask UMASK:设置umask

        install命令:复杂文件并且同时可以设置文件的属性

            单源复制:

                install [option] ...[-T] SOURCE DEST

            多源复制:

                install [option] ...SOURCE ...DIRECTORY

                install [option] ...-t DIRECTORY

            创建目录:

                install [option] ... -d DIRECTORY...

            选项:

                    -m --mode=MODE :设定目标文件的权限,默认是755

                    -o --owner=OWNER :设定目标文件的属主

                    -g --group=GROUP :设定目标文件的属组

        mktemp:创建临时目录或文件,注意mktemp会将创建的临时目录直接返回,故可以通过命令引用

                保存起来。

            mktemp [option]...[TEMPLATE]

                常见选项:

                    -d 创建临时目录;

                注意:文件或者目录名一般以.XXX命名,XXX最少三个。