linux学习笔记:用户及权限管理

一、Linux用户管理(centos6.x,7.x):

  用户类别:linux中用户分为管理用户和普通用户,普通用户又分为系统用户和登录用户。字符是人类能够直接识别的信息,而计算机能够直接识别的是数字,所以计算机用不同的唯一的16位二进制数字UID来标识不同的用户,计算机一般能够标识的用户数量为65536个,既0-65535。

wKioL1ZrobbTlvQmAAA0iQyn0X0449.png

       在系统中,用户名与UID之间是通过名称解析来建立关系进行识别的,这种名称解析用到的文件为/etc/passwd,此文件为linux中的用户信息库,该文件存储用户信息的格式为用冒号:分割的7个字段name:password:UID:GID:GECOS:directory:shell,各字段的含义为:

    wKioL1ZsQxzQhHAIAAAxgYbcDOI842.png

     linux中的密码管理文件为/etc/shadow,其存储数据的格式与/etc/passwd相似,使用冒号:分割的9个字段组成:

wKioL1ZsQ_qjqqTsAAA-vcWkLlc881.png

              各个字段详细说明:第一个字段为用户名,与/etc/passwd文件中相对应;

                                   第二个字段为密码字段,由三个$符号分割为三部分组成,第一部分为密码用到的加密方式,第二部分为加密密码是用到的混淆随机数,称为salt(),第三部分为加密后的密码密文;

                                   第三个字段为最近一次修改密码的时间,其表现为一个距离unix元年的天数,后边的字段期限天数都是相对于这个时间而言的,0 有特殊意思,表示用户应该在下次登录系统时更改密码。;

                                   第四个字段为最短密码使用时间,用户一次更改密码之后,要等多长时间才再次被允许更改密码。空字段或 0 表示没有最小密码年龄;

                                   第五个字段为最长密码使用时间,这些天之后,用户必须更改密码。这些天之后,密码仍然可用。用户将会在下次登录的时候被要求更改密码。空字段表示没有最大密码年龄,没有密码警告时间段,没有密码禁用时间段。如果最大密码年龄小于最小密码年龄,用户将会不能更改密码;

                                   第六个字段为提前警告用户密码过期的天数,参考最长的密码使用天数,空字段或者 0 表示没有密码警告期;

                                     第七个字段为密码过期(参照上边的密码最长使用时间)后,仍然接受此密码的天数(在此期间,用户应该在下次登录时修改密码)。密码到期并且过了这个宽限期之后,使用用户的当前的密码将会不能登录。用户需要联系系统管理员。空字段表示没有强制密码过期。

                                   第八个字段为账户过期的日期,表示为从197011日开始的天数。注意,账户过期不同于密码过期。账户过期时,用户将不被允许登录;密码过期时,用户将不被允许使用其密码登录。空字段表示账户永不过期。应该避免使用0,因为它既能理解成永不过期也能理解成在197011日过期;

                                   第九个字段为保留字段。

       密码使用策略为:

                            1、使用随机密码;

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

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

                            4、定期更换;

       linux中的用户组的使用情况与用户大致相同,用户组的GID可以参照用户的使用情况,要注意每个用户只可以有一个基本组,而可以有多个附加组,保存用户组相关信息的系统文件为/etc/group/etc/gshadow

              /etc/group文件存储类型也为用冒号:分割的4个字段:group_name:password:GID:user_list

    wKioL1ZsRFyAcHCNAAAcdrDdOzY969.png

              /etc/gshadow文件存储类型也为用冒号:分割的4个字段:

wKioL1ZsRtTgMqMsAAAa6hzxUh4789.png

注意:组密码的格式与/etc/paswd中的第二个字段相同,这个组密码是用于用户临时切换基本组时的认证

以上各文件都可以在linux命令行中用man命令查看详细内容,如:

       [root@localhost~]# whatis passwd

       sslpasswd(1ssl)     - compute password hashes

       passwd(1)           - update user'sauthentication tokens

       passwd(5)           - password file

       [root@localhost~]# man 5 passwd

 

linux中管理用户相关的命令主要有:groupaddgroupdelgpasswdgroupmodnewgrpuseraddusermoduserdelpasswdchageidsuchshfingerchfnpwckgrpckwhoami

这些命令都可以通过man命令在linux中找到详细的使用方法,此处我仅列出比较常用的一些命令选项:

groupadd命令:添加组

              格式:groupadd [options] group

           常用选项:-g,--gid GID

                            创建组时指定GID,若不用此参数,默认为上一个组的GID+1

                      -r, --system

                            创建一个系统组

 

groupdel命令:删除组

              格式:groupdel group

 

gpasswd命令:用于管理组文件/etc/group/etc/gshadow

              格式:gpasswd [option] group

           常用选项:-a,--add user

                            向指定组中添加用户user

                        -d,--delete user

                            从指定组中将用户user移除

                        -r, --remove-password

                            清除指定组的组密码

                        -A, --administrators user,...

                            指定组管理员

                        -M, --membersuser,...

                            设置组成员列表。

 

groupmod命令:修改组属性

              格式:groupmod [options] GROUP

           常用选项:-g,--gid GID

                            修改指定组的GID

                        -n,--new-name NEW_GROUP

                            修改指定组的组名

 

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

              格式:newgrp [-] [group]

           常用命令:-

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

 

useradd命令:创建用户

              格式:1.useradd [options] LOGIN

           常用选项:-u,--uid UID

                            指定UID

                       -g, --gid GROUP

                            指定基本组GID,此组须事先存在;

                       -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]

                            指定用户所属的附加组,多个组之间用逗号分隔;

                       -c, --comment COMMENT

                            指明注释信息;

                       -d, --home HOME_DIR

                            以指定的路径为用户家目录,通过复制/etc/skel目录并重命名实现;如指定的目录事先存在,则不会为用户复制环境配置文件;

                       -s, --shell SHELL

                            指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中;

                        -r,--system

                            创建系统用户;

 

                       2. useradd -D

                            显示创建用户的默认配置

 

                             3.useradd -D [options]

                            修改创建用户时使用的默认选项的值,修改的结果保存在/etc/default/useradd文件中;

 

usermod命令:修改用户属性

              格式:usermod [options] LOGIN

           常用选项:-u,--uid UID

                            修改用户的UID为此处指定的新UID

                       -g, --gid GROUP

                            修改用户所属的基本组,该组必须事先存在;

                       -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]

                            修改用户所属的附加组,原来的附加组会被覆盖,如不想覆盖,需加-a选项;

                       -a, --append

                            为用户追加新的附加组,不能单独使用,只能与-G选项一同使用;

                       -c, --commentCOMMENT

                            修改注释信息;

                       -d, --homeHOME_DIR

                            修改用户的家目录,用户原有的家目录文件不会转移至新位置,如需要转移,需加-m选项;

                       -m, --move-home

                            用于将原来家目录的内容移动到新的家目录中,不能单独使用,只能与-d选项一同使用;

                       -l, --loginNEW_LOGIN

                            修改用户名为NEW_LOGIN,用户的主目录名和邮件池也需要手动修改以和新登录名对应;

                       -s, --shellSHELL

                            修改用户的默认shell

                       -L, --lock

                            锁定用户密码;即在用户原来的密码字符串之前添加一个“!”;

                        -U,--unlock

                            解锁用户密码;

 

userdel命令:删除用户

              格式:userdel [options] LOGIN

           常用选项:-r,--remove

                            连同用户的家目录一并删除;

 

passwd命令:修改用户密码

              格式:passwd  [-k]  [-l] [-u [-f]] [-d] [-e] [-n mindays] [-xmaxdays] [-w warndays] [-i inactivedays]  [-S] [--stdin][username]

           常用选项:(1passwd:不跟参数为修改用户自己的密码;

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

                       -l, --lock

                            锁定用户;

                       -u, --unlock

                            解锁用户;

                       -d, --delete

                            清除用户密码;

                       -e, --expire

                            修改用户密码的过期时间,日期;

                       -i, --inactive DAYS

                            修改用户的非活动期限;

                       -n, --minimum DAYS

                            修改用户密码的最短使用期限;

                       -x, --maximum DAYS

                            修改用户密码的最长使用期限;

                       -w, --warning DAYS

                            修改用户密码的警告期限;

                     3--stdin:可以用重定向的方法为用户指定密码;

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

 

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

              格式:chage [options] [LOGIN]

           常用选项:-d,--lastdayLAST_DAY

                            修改最后一次修改密码的时间

                       -E, --expiredateEXPIRE_DATE

                            修改用户帐号的过期时间

                       -W, --warndaysWARN_DAYS

                            修改警告期限;

                       -m, --mindaysMIN_DAYS

                            修改用户修改密码的最小期限

                       -M, --maxdaysMAX_DAYS

                            修改用户修改密码的最长期限;

 

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

              格式:id [OPTION]... [USER]

           常用选项:-u,--user

                            仅显示有效的UID

                      -g, --group

                            仅显示用户的基本组GID

                       -G, --groups

                            仅显示用户所属的所有组的GID

                       -n, --name

                            显示名字而非ID

 

su命令:切换用户

              格式:su [options...] [-] [user [args...]]

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

                                   su - USERNAME

                                   su -l USERNAME

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

                                   su USERNAME

                       -c command, --command=command

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

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

 

chsh命令:改变用户的登录shell

              格式:chsh [-s shell] [-l] [-u] [-v] [username]

           常用选项:-s,--shell shell

                            切换至指定shell

                       -l, --list-shells

                            列出/etc/shells中的shell

 

finger命令:用户信息查看

              格式:finger [-lmsp] [user ...] [user@host ...]

           常用选项:

 

chfn命令:修改finger命令中的信息

              格式:chfn  [-f  full-name] [-o office] ,RB [ -p office-phone] [-h home-phone] -u] [-v] [username]

           常用选项:

 

pwck命令:命令检查用户及其认证信息的完整性。它检查/etc/passwd /etc/shadow格式正确、数据有效。将会提示用户删除格式不正确或者有其它错误的项。

              格式:pwck [-q] [-s] [passwd [ shadow ]]

                      pwck [-q] [-r] [passwd [ shadow ]]

           常用选项:-q,--quiet

                                 只报告错误。不显示那些不需要用户操作的警告;

                       -r, --read-only

                                      在只读模式下执行 pwck

                       -s, --sort

                            根据 UID /etc/passwd /etc/shadow对项目进行排序。

              注意:-s-r选项不能同时使用

 

grpck命令:检查组文件的完整性,/etc/group/etc/gshadow

              格式:grpck [-r] [group [ shadow ]]

                      grpck [-s] [group [ shadow ]]

           常用选项:-r,--read-only

                                      在只读模式下执行 grpck

                       -s, --sort

                            根据 GID /etc/group /etc/gshadow 中进行排序。

              注意:-s-r选项不能同时使用

 

whoami命令:显示当前执行命令的用户名

以上创建用户,用户组及配置用户信息的默认设置可以在/etc/login.defs中查看及修改。

 

二、用户权限管理:

      ls -l可以查看当前目录下文件和目录的长属性:

wKiom1ZsR3SRZlJ0AAApv5h0Qh4358.png 在此,我们只关心这些属性中的第一个字段:

 wKioL1ZsR9rhkclLAAAfym6bkWw131.png  

文件的文件类型有很多种:

-:表示为常规文件,即f

ddirectory,目录文件

bblock device,块设备文件,支持以“block”为单位进行随机访问

ccharacter device,字符设备文件,支持以“character”为单位进行线性访问

lsymbolic link,符号链接文件,软连接

ppipe,命名管道

ssocket,套接字文件

 

了解了文件的类型后,我们开始关注文件的基本权限管理:

文件类型后的9位就是系统对文件的基本权限控制位

              rwxr--r--

   左三位:定义user(owner)的权限           中三位:定义group的权限        后三位:定义other的权限

进程安全上下文

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

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

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

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

权限:

       rreadable,读

       wwritable,写

       xexcutable,执行

对于文件与目录,拥有的权限相同,产生的作用却有所不同:

文件:

       r:可获取文件的数据;

       w:可修改文件的数据;

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

目录:

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

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

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

由于权限位的三位随机组合最多有8种变化,所以我们可以用8进制数字来表示每种不同权限:

---   000       0

--x   001       1

-w-  010       2

-wx 011       3

r--   100       4

r-x   101       5

rw-  110       6

rwx 111       7

 

linux中关于权限管理的命令:

chmod命令:修改文件的权限位

              此命令将属主用u表示,属组用g表示,其它用户用o表示,用a来表示前边三个全部;

              格式:chmod [OPTION]... MODE[,MODE]... FILE...

                            MODE表示法:

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

                                          u=

                                          g=

                                          o=

                                          a=

                                          注意,可以组合使用,如同时修改文件属主,属组权限可以用u=,g=;组合时用,逗号间隔

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

                                          u+,u-

                                          g+,g-

                                          o+,o-

                                          a+,a-

                                          注意,此种方法也可以组合使用,用,逗号间隔

                            chmod [OPTION]...OCTAL-MODE FILE...

                            八进制数修改法:如chmod 755 filename

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

                            此格式表示可以参考某个已知权限的文件来设置指定文件的权限

           常用选项:-R,--recursive

                            递归修改目录下所有文件的权限,一般只建议在赋权表示法或授权表示法中使用

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

 

从属关系管理命令:chownchgrp

chown命令:修改文件的属主或属组

              格式:chown [OPTION]... [OWNER][:[GROUP]] FILE...            注意:[OWNER][:[GROUP]中间的冒号用.点也可以

                       chown [OPTION]... --reference=RFILE FILE...             也可以参照某个文件的属主属组来设定指定文件的属主属组;

           常用选项:-R,--recursive

                            递归修改目录及其中所有文件的属主属组

 

chgrp命令:修改文件的属组

              格式:chgrp [OPTION]... GROUP FILE...

                            chgrp [OPTION]...--reference=RFILE FILE...                 也可以参照某个文件的属组来设定指定文件的属组

 

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

 

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

       文件:创建文件的默认权限为666减去umask

              666-umask

       目录:创建目录的默认权限为777减去umask

              777-umask

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

              如:umask: 023

                                   文件权限:666-023=644

                                   目录权限:777-023=754

umask命令:

       umask:查看当前umask

       umask MASK:设置umask

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


你可能感兴趣的:(用户权限,linux用户管理,linux用户管理命令)