用户、组和权限管理

 Multi-tasks   #多任务

 Multi-Users   #多用户

  每个使用者:

用户标识、密码;

Authentication   #认证机制 

Authorization  #授权机制

Audition      #审计机制

     3A机制

   组:用户组,用户容器

     用户类别:

 管理员

 普通用户

   系统用户  

   登录用户


用户标识:UserID, UID

  16bits二进制数字:0-65535

        [root@192 ~]# id   #查看当前登录用户信息

        uid=0(root) gid=0(root)……

管理员:0

普通用户:1-65635

  系统用户:1-499(CentOS6), 1-999(CentOS7)

  登录用户:500-60000(CentOS6), 1000-60000(CentOS7)

    名称解析:名称转换

 Username <--> UID

        根据名称解析库进行:/etc/passwd

            组:

组类别1:

管理员组

普通用户组

系统组

登录组

    组标识:GroupID, GID

管理员组:0

普通用户组:1-65635

  系统用户组:1-499(CentOS6), 1-999(CentOS7)

  登录用户组:500-60000(CentOS6), 1000-60000(CentOS7)


名称解析:groupname <--> gid

解析库:/etc/group


组类别2:

  用户的基本组

  用户的附加组

           组类别3:

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

  公共组:组内包含了多个用户;

  认证信息:

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

  password:

/etc/shadow

/etc/gshadow

  密码的使用策略:

1、使用随机密码;

2、最短长度不要低于8位;

3、应该使用大写字母、小写字母、数字和标点符号四类字符中至少三类;

4、定期更换;


 加密算法:

对称加密:加密和解密使用同一个密码;

非对称加密:加密和解密使用的一对儿密钥;

  密钥对儿:

公钥:public key

私钥: private key

单向加密:只能加密,不能解密;提取数据特征码;

定长输出

雪崩效应 :指微小的变化也会导致结果发生重大改变


算法:

  md5: message digest, 128bits

  sha:secure hash algorithm, 160bits

  sha224

  sha256

  sha384

  sha512


在计算之时加salt,添加的随机数;


/etc/passwd:用户的信息库

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

        

        [root@192 ~]# cat /etc/passwd

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

        bin:x:1:1:bin:/bin:/sbin/nologin


name: 用户名

password:可以是加密的密码,也可是占位符x;

UID:用户ID

GID:用户所属的主组的ID号;

GECOS:注释信息

directory:用户的家目录;

shell:用户的默认shell,登录时默认shell程序;


/etc/shadow:用户密码

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

root:$6$iqQhDZXm4ZfjGBZ1$fWvDc9bZBmU30SdK2he/KW1MSoPxy1yZ7nsMyVy9y3Ab4.IKERvh7ZJiSc0TyWy3umKytNkiveoL/PshuWZ9n/::0:99999:7:::

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


 /etc/group:组的信息库

group_name:password:GID:user_list

        [root@192 ~]# cat /etc/group

        root:x:0:             #x代表密码被另存在/etc/gshadow中

        bin:x:1:


user_list:该组的用户成员;以此组为附加组的用户的用户列表;


Linux用户和组管理

  安装上下文:

进程以其发起者的身份运行;

进程对文件的访问权限,取决于发起此进程的用户的权限;

       系统用户:为了能够让那后台进程或服务类进程以非管理员的身份运行,通常需要为此创建        多个普通用户;这类用户从不用登录系统;只是为了让命令在执行时可以以此身份运行。

 groupadd命令:添加组

  groupadd [选项] group_name

      -g GID:指定GID;默认是上一个组的GID+1;

 -r: 创建系统组;

   groupmod命令:修改组属性

      groupmod [选项] GROUP

 -g GID:修改GID;

 -n new_name:修改组名;

  groupdel命令:删除组

      groupdel [选项] GROUP

  

   useradd命令:创建用户

      useradd [选项] 登录名

   -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

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

  useradd -D 选项: 修改默认选项的值;


  修改的结果保存于/etc/default/useradd文件中;


usermod命令:修改用户属性


usermod [选项] 登录

-u, --uid UID:修改用户的ID为此处指定的新UID;

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

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

-a, --append:与-G一同使用,用于为用户追加新的附加组;#useradd -aG

-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 [选项] 用户

-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

            

            [root@192 ~]# echo 'centos' | passwd --stdin Centos #修改Centos密码

            更改用户 Centos 的密码 。

            passwd:所有的身份验证令牌已经成功更新。

    

gpasswd命令:


组密码文件:/etc/gshadow


gpasswd [选项] group

-a USERNAME:向组中添加用户

-d USERNAME:从组中移除用户


newgrp命令:临时切换指定的组为基本组;

        newgrp [-] [group]

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

    

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

        chage [选项] 登录名


-d 

-E

-W

-m

-M


id命令:显示用户的真和有效ID; 


id [OPTION]... [USER]

-u: 仅显示有效的UID;

-g: 仅显示用户的基本组ID; 

-G:仅显示用户所属的所有组的ID;

-n: 显示名字而非ID;

 su命令:switch user

   登录式切换:会通过读取目标用户的配置文件来重新初始化

su - USERNAME

su -l USERNAME

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

su USERNAME


注意:管理员可无密码切换至其它任何用户;


 -c 'COMMAND':仅以指定用户的身份运行此处指定的命令;


      例:[root@192 ~]# su - gentoo -c 'whoami' 

   gentoo

权限管理:

  ls -l 

  rwxrwxrwx:

左三位:定义user(owner)的权限

中三位:定义group的权限;

右三位:定义other的权限


进程安全上下文:

 进程对文件的访问权限应用模型:

   进程的属主与文件的属主是否相同;如果相同,则应用属主权限;

   否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;

   否则,就只能应用other的权限;


 权限:

r:readable, 读

w:writable, 写

x:excutable,执行


  文件:

r:可获取文件的数据;

w: 可修改文件的数据;

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


 目录:

r:可使用ls命令获取其下的所有文件列表;但无法使用ls -l 查看详细信息

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

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


mode:rwxrwxrwx

ownership:user, group


权限组合机制:

--- 000 0

--x 001 1

-w- 010 2

-wx 011 3

r-- 100 4

r-x 101 5

rw- 110 6

rwx 111 7


 权限管理命令:

chmod命令:修改文件权限

  chmod [OPTION]... MODE[,MODE]... FILE...    #赋权法

  chmod [OPTION]... OCTAL-MODE FILE...  #8进制权限

  chmod [OPTION]... --reference=RFILE FILE...  #引用修改


 三类用户:

      u:属主

      g:属组

      o:其它

      a: 所有


 (1) chmod [OPTION]... MODE[,MODE]... FILE...

            MODE表示法:

 赋权表示法:直接操作一类用户的所有权限位rwx;

      u=

      g=

      o=

      a=

#例:[root@192 ~]# chmod u=rwx,g=rwx,o=rw fstab   #各部分之间用 逗号 隔开 没有权限可以为空

 [root@192 ~]# ll fstab 

 -rwxrwxrw-. 1 root root 541 12月 29 22:30 fstab

          授权表示法:直接操作一类用户的一个权限位r,w,x;

      u+, u-

      g+, g-

      o+, o-

      a+, a-

#例:[root@192 ~]# chmod u-w fstab     # 两种同样操作时可以合并 ~]#chmod ug+w fstab

[root@192 ~]# ll fstab 

-r--rwx---. 1 root root 541 12月 29 22:30 fstab

        (2) chmod [OPTION]... OCTAL-MODE FILE...   

    ~]#chmod 660 fstab  


  (3) chmod [OPTION]... --reference=RFILE FILE...

#例:[root@192 ~]# chmod --reference=/var/log/messages fstab #参照messages权限赋予fstab同样的权限

   [root@192 ~]# ll fstab 

   -rw-------. 1 root root 541 12月 29 22:30 fstab


         选项:

      -R, --recursive:递归修改


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


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


chown命令:修改属主属组

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


  例:[root@192 tmp]# ll -d skel/                   #查看skel 目录的详细信息

     drwxr-xr-x. 3 root root 74 12月 29 23:02 skel/  

[root@192 tmp]# chown -R gentoo:cc skel/  #修改属主和属组信息    “ :” 可用“ . ” 代替

[root@192 tmp]# ll -d skel/  # ~~~

drwxr-xr-x. 3 gentoo cc 74 12月 29 23:02 skel/



    另:[root@192 tmp]# chown :root skel/             #命令可以只跟 :GROUPNAME

[root@192 tmp]# ll -d skel/

drwxrwxr-x. 3 root root 60 12月useradd 29 23:45 skel/


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

   例:[root@192 tmp]# chown --reference=/tmp/haha/ /tmp/skel/ #同chmod 同样的用法



        选项:

        -R:递归修改


        chgrp命令:#修改文件属主或者属组


        chgrp [OPTION]... GROUP FILE...

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



        注意:仅管理员可修改文件的属主和属组;

     思考:用户对目录有写权限,但对目录下的文件没有写权限时,能否修改此文件内容?能否删除此文件?

     思路:一个目录当前用户组没有写权限--修改用户组 并将另个用户加入其中并赋予该用户组写权限。 登录另一个用户则该用户对该目录有写权限,对其下文件却没有写权限


[root@192 tmp]# ll -d ./skel/                        #查看改目录权限

drwxr-xr-x. 3 root root 74 12月 29 23:02 ./skel/     

[root@192 tmp]# usermod -a -G  cc gentoo             #将一个用户追加一个附加组

[root@192 tmp]# chown -R root:cc skel/               #将目录所属组递归 修改

[root@192 tmp]# chmod g+w skel/                      #对用户组附加W权限


[root@192 tmp]# su gentoo                            #切换用户

[gentoo@192 tmp]$ echo "hello" >> /tmp/skel/.bashrc  #向文件写入数据 (修改内部文件)

bash: /tmp/skel/.bashrc: 权限不够        

[gentoo@192 tmp]$ rm /tmp/skel/.bashrc               #删除该文件

rm:是否删除有写保护的普通文件 "/tmp/skel/.bashrc"?y


所以不能修改该文件内容,可以删除该文件。


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

        文件:

        666-umask

        目录:

        777-umask


        注意:之所以文件用666去减,表示文件默认不能拥有执行权限;如果减得的 结果中有执行权限,则需要将其加1;

        umask: 023

        666-023=644

        777-023=754


        umask命令:

        umask:查看当前umask

        umask MASK: 设置umask


        注意:此类设定仅对当前shell进程有效;




    install命令:

    install - copy files and set attributes


    单源复制:

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

     多源复制:

       install [OPTION]... SOURCE... DIRECTORY

       install [OPTION]... -t DIRECTORY SOURCE...

      创建目录:

       install [OPTION]... -d DIRECTORY...

        例:

         [root@192 ~]# install -d hello      #直接创建目录

        anaconda-ks.cfg  Desktop  Documents  Downloads  hello



     常用选项:

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

        例:

     [root@192 ~]# ll -a /tmp/inittab               

-rwxr-xr-x. 1 root root 511 12月 30 01:21 /tmp/inittab  # 权限755

[root@192 ~]# ll -a /etc/inittab 

 -rw-r--r--. 1 root root 511 11月 20 2015 /etc/inittab   #实际权限 644



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

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


        例:

         [root@192 ~]# install -o gentoo -g megeedu -m 666 /etc/inittab /tmp/inittab  #直接修改属主,属组,权限

         [root@192 ~]# ll -a /tmp/inittab 

            -rw-rw-rw-. 1 gentoo megeedu 511 12月 30 01:31 /tmp/inittab




    mktemp命令:

    mktemp - create a temporary file or directory


    mktemp [OPTION]... [TEMPLATE]

例:

 [root@192 ~]# a=$(mktemp /tmp/mytmp.XXXXX)    #利用引用将生成的临时文件目录赋值给a   模板。XXX最少三位 切为大写!!!

 [root@192 ~]# echo $a                         #显示a的值

 /tmp/mytmp.16vTk



    常用选项:

    -d:创建临时目录


    注意:mktemp会将创建的临时文件名直接返回,因此,可直接通过命令引用保存起来;