Linux用户、权限管理

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

一、如何实现"用户管理"
1.什么是用户 "User" :
       是一个使用者获取系统资源的凭证,是权限的结合,为了识别界定每一个用户所能访问的资源及其服务的。只是一种凭证。会有一个表示数字,计算机会首先跟这个数字相匹配。ID号。一般来讲用户名是公开的。
还要有个一个验证机制,来验证用户就是那个它所声称的那个人。(密码其实是最不可靠的方法)
2.什么是组 "Group":
       一个组,可以识别是一个权限的集合,而且任何加入这个组的人都自动拥有这个组的权限。计算机靠GID(组ID)来识别.
一个用户组也是有密码的。一般的用户不能随便加入某个组中,需要用管理员协助。密码的作用是让一个没有管理权限的用户临时的加入某组

组分成两种组:(linux下任何一个用户必然会属于某一个组,即便没有分组,系统也会给你分一个跟你同名的组)
   2.1.私有组:这个里面只有一个用户,而且这个用户名跟组名同名。也叫用户的基本组
   2.2.公共组 : 也叫共有组。也叫用户的额外组,或者附加组。
一个用户可以同时拥有多个组。


UID,GID:其实是保存为无符号十进制数,用十六位二进制表示,0~65535
UID, GID和UID的编号相同
管理员的ID号,永远为
0 (root)
#id 命令+ 用户 ,可以查看用户的id以及组。

#groups + 用户名,可查询某个用户帐号所属的组

#finger [ -l ] +用户帐号、查询用户账号的详细信息,列出用户登录名、终端、登录时间以及个人信息等


1-499 :属于系统用户,让某个程序运行的时候能以某个用户的身份运行。
500-65534:普通用户
65535:Nobody特殊用户(也有可能是65536则,溢出,则为-1,相当于Guest,来宾账号)


二、用户相关配置文件:

/etc/passwd:由以下部分组成:

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

用户名:密码占位符:UID:私有组ID:描述信息Finger:家目录:默认shell

/etc/shadow:密码存放文件:

1
2
3
4
[root@station23 ~]# more /etc/shadow
root:$6$KncS/2rL$YfiB10z02noObxa1x7WNRAo6lYOfkfw47v8jyfbEDPNKckaen
数字6表示用的是SHA512加密
数字1表示用的是MD5加密

/etc/skel,/etc/default/useradd 两个文件包含了默认创建用户时复制所需的文件。


三、创建用户、创建组:
#useradd/adduser UserName
-u:指定UID(不可重复)
-g:指定GID,即指定用户的基本组前提GID要事先存在
-G:指定用户的额外组,组要事先存在
-d:指定家目录的存放位置(该目录事先可不存在)
-c:"描述信息"
-s:指定默认Shell,应该指定/etc/shells文件中出现的shell
-m:创建用户时,强制给用户创建家目录
-M:创建用户,但不创建家目录
-D:default,为useradd命令创建的拥挤指定新的默认值
 -r:创建系统用户
#groupadd GrpName
-g GID:创建组并为其指定GID


/etc/group:格式:

   组名:组密码:GID:组内成员列表(成员间用逗号分隔)


四、删除用户和组:

删除用户,默认会保留家目录
#userdel UserName
    -r:一并删除家目录

#groupdel GrpName


五、修改用户账户信息:

修改用户的属性定义:

#chsh UserName->修改用户默认shell

#chfn UserName->修改用户的备注信息

#usermod UserName
   -u:修改UID(不可重复)
    -g:修改GID,即指定用户的基本组前提GID要事先存在
    -G:默认覆盖原有的附加组;如果是添加,则同时使用-a选项
    -d:默认不会迁移用户的家目录,如果要要迁移,则同时使用-m
    -c:"描述信息"
    -s:指定新shell
    -l:新登录名
    -e:可以指定用户的过期时间。

    -f:
    -U:解锁                ---->#passwd -l UserName
    -L:锁定用户账号        ---->#passwd -u UserName


#groupmod 命令,用于修改组的信息
-g : 修改GID
-n : 修改组名


#gpasswd

   gpasswd -a 用户帐户(号)组名(号)   ->添加单个组成员

   gpasswd -M 用户帐户1(号)......组名(号)  ->批量添加多个成员到组

   gpasswd -d 用户帐户(号)组名(号)  ->删除组成员

   gpasswd -A 用户帐户(号)组名(号) ->指定组管理员

   gpasswd  组名  ->设置组密码

   gpasswd -r 组名 ->删除组密码

   gpasswd -R 组名 ->禁止用户切换到指定的组

#newgroup 组名 ->切换组


六、查看用户的相关信息
#id UserName
   -u:只显示UID,与-n一起使用则显示用户名
   -g:只显示GID,与-n一起使用则显示基本组名
   -G:只显示所有组组,与-n一起使用则显示所有组名

七、#passwd命令: 给用户加密
-l : 用于锁定用户账号
-u : 解锁用户账号
–stdin : (把标准输入改为别的输入)为用户添加密码的时候用非标准输入进行创建密码
-x : 设定密码最长使用期限
-n : 设定密码最短使用期限

密码安全性策略:
足够复杂、够长、交叉应用数字、大小写字母和特殊中的至少三种
尽量避免使用易猜测的密码;定期更换

如果将/etc/shadow中的某个用户密码删除,不是不能登录系统,而是不需要密码即可登录



加密的方式:对称加密
公钥加密
单项加密 (主要目的在于提取数据的特征值,拿到一段数据可以提取这个数据的特征码。)
特点有:1.单项
2.雪崩效应(不管密码有多长,只要初始条件有一点点改动,结果将有巨大的变化)
3.定长输出(无论你输入有多长,而加密有的结果都是一样的。)
经常用的单项加密是
MD5(128bit定长输出) , sha1(160bit定长输出)
用户密码为“!!”指没有密码
“ $1$8kkXoZno$naC13rWnhoKfcMyiZr5qy9/  ”
(1代表是MD5算法)$杂质(盐)$内容

   数字6表示用的是SHA512加密


八、修改帐号日期属性
#chage [Option] [Login]
   -E:指定账号被锁定的日期<YYYY-MM-DD>    -I
   -m:指定用户改变密码所间隔的最小天数
   -M:指定密码有效的最大天数

   -d:指定自从1997年1月1日起密码被改变的天数

   -w:指定密码过期前要向用户发出警报的天数

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

权限管理

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

Linux权限管理:
属主---属组---其他

     权限:read,write,execute
              r     w     x

   文件:
       r:可以使用内容查看类的命令来显示其相关内容;
       w:可以使用编辑器修改其内容;
       x:可以将其发起一个进程;

目录:
       r:可以使用ls命令查看目录内容的文件信息;
       w:可以创建、删除文件l;
       x:可以使用ls -l命令查看目录内容的文件信息,并且可以使用cd命令切换此目录为工作目录;

   用户不拥有某位权限,则使用"-"占位;
   如:
       r-x:可读、可执行;r--:只读

修改文件的属主、属组;仅有管理员可执行:chown,chgrp
该文件权限:    chmod


000: ---   , 0
001: --x   ,1
010: -w-  ,2
011: -wx  ,3
100: r--    ,4
101: r-x    ,5
110: rw- ,6
111: rwx  ,7
通过2进制转换为8进制

#chmod命令:
   (1)操作3类用户的权限,使用8进制形式;
       #chmod [-R] OCTAL-MODE file...
        -R:递归更改目录及其内部文件权限

   (2)操作指定类别用户的权限:使用u,g,o,a来赋权,基于=或+/-来进行;
       #chmod [u|g|o|a] [=|-|+]
       u:属主
       g:属组
       o:其他
       a:所有
       =:操作制定类别用户的权限
       +/-:操作指定类别用户的单个权限
           +x:省略前面的u,g,o即表示所有a

   (3)参照其他文件的权限为当文件的赋权.
       #chmod [-R] --reference=参照文件   需要修改文件

修改文件的属主或属组:chown,chgrp:
   -R:递归
   --reference=
      #chown [option] UserName file --->更改属主
或者:#chown [option] UserName [:|.] GrpName file --->属主、属组同时更改
      #chown [option] :GrpName file --->更改属组

       #chgrp [option] GrpName file  --->更改属组


#umask
   创建文件:666-umask
       文件默认绝不允许出现执行权限!
       如设置:umask 023
              666-023=643+1(如果出现将+1)
   创建目录:777-umask
   root:022
   如果用户名和基本组一致:002,否则则为:022

权限应用模型:
   进程的属主,是否与文件的属主相同;如果相同,进程则以文件属主的权限来访问文件;否则进程的属主所属的组,是否其中之一与文件的属组相同;如果相同,进程则以文件属组的权限来访问文件;否则进程则以文件的其他用户的权限来访问文件;