目录:
关于/etc/passwd
chfn更改用户附加信息
finger 查看用户附加信息
pwunconv
pwconv
关于/etc/shadow
chage 更改密码各种时间
关于/etc/group和gshadow
用户管理
创建用户useradd
用设置户usermod
删除用户userdel
修改密码 passwd
看用户相关的ID信息 id
切换用户su
查看附加组信息groups
chsh 指定shell
组的管理
创建组groupadd
更改组属性groudmod
删除组groupdel
成员管理groupmems(root)
组密码及组管理员gpasswd
关于/etc/passwd
用户与权限管理是linux基础中非常重要的基础,我们必须将他们学号,采用可能再将来我们的工作遇到问题时,才能更好的去解决问题,在我们了解用户管理之前,我们先了解一下几个文件,毕竟linux的哲学思想就是“一切皆文件”嘛!
1 /etc/passwd:用户及其属性信息(名称、 UID、主组ID等) 2 /etc/group:组及其属性信息 3 /etc/shadow:用户密码及其相关属性 4 /etc/gshadow:组密码及其相关属性
这几个文件对于用户管理无比重要,因为它们记录着有关用户的所有信息,在/etc/passwd中,有:
1 login name:登录用名(wang) 2 passwd:密码 (x) 3 UID:用户身份编号 (1000) 4 GID:登录默认所在组编号 (1000) 5 GECOS:用户全名或注释 6 home directory:用户主目录 (/home/wang) 7 shell:用户默认使用shell (/bin/bash)
看到这些信息你觉得重不重要嘞,当然,我们的密码并不是真正在这里面存放着这个文件里,这是因为这个文件时所有用户都可以进去的,虽然我们的密码是经过加密的,但是还是无法保证有些牛人对密码进行破解,所以我们在设置密码的时候一定要设置的复杂些,最好使用数字,字母,特殊字符,最好保证自己的密码足够长,来保证自己的机器足够安全
不过,话说回来,现在我们的密码已经很难破解了呢,为啥呢,因为在2009年的时候,我国的一个牛人王小云将MD5加密算法破解了,而后,Linux采用了加密性能更强的sha512加密算法,当然加密算法不值一种,但是我们的linux好多都是默认sha512这种加密算法。我们也可以修改我们的加密算法authconfig --passalgo=sha256 –update就可以更改我们的加密算法,我们可以通过man 3 crypt来查看我们可以采用的加密算法less /etc/login.defs跳到最后一行我们可以查看我们采用的那种加密算法。
讲到/etc/passwd,我们先讲一个命令,可以修改我们linux机器上的附加信息,非常好用。
更改用户附加信息
命令:chfn 格式:chfn [option] username 选项: -f full-name:修改全名 -o office :修改办公室信息 -p office-phone:修改办公电话 -h home-phone:修改个人电话
当然了,我们也可以通过直接敲入 chfn username 可以进行交互式修改信息。
我们可以通过finger命令来查看我们用户的具体信息格式:finger username
pwunconv将密码保存到/etc/passwd中,删除/etc/shadow文件
pwconv(默认) 将密码映射到了/etc/shadow
finger username (默认没有安装) 查看用户的信息
关于/etc/shadow
Next,我们来说下关于/etc/shadow里面的东西:
登录用户名
用户密码:一般用sha512加密
从1970年1月1日起到密码最近一次被更改的时间
密码再过几天可以被变更(0表示随时可被变更)
密码再过几天必须被变更(99999表示永不过期)
密码过期前几天系统提醒用户(默认为一周)
密码过期几天后帐号会被锁定
从1970年1月1日算起,多少天后帐号失效
话说回来,这个文件才是保存的用户的密码信息,非常重要,我们先看一下它的权限
我就问你可怕不可怕,我们所有人都无法访问这个文件,所以,在linux,这个文件是有多重要,我们惊奇的发现就连root都没有访问权限,不过嘛,root生起气来连自己都删,所以权限什么的对root一般无效。接下来我们在介绍一个命令,用于修改密码的各种事件,都有那些时间呢,指定密码的上次修改时间(yyyy-mm-dd),指定账户的过期时间,密码过期之后多少天帐户过期,最小存活时间,最大存活时间,设置密码过期前的提醒时间,我们通过一个命令:chage –l username来查看用户的以上的密码时间信息,当然,它可以修改上面的各种信息的呢。
修改密码信息
1 命令:chage 2 格式:chage [option] username 3 选项: 4 -d 指定密码的上次修改时间(yyyy-mm-dd) 5 -E 指定账户的过期时间 6 -I 密码过期之后多少天帐户过期 7 -m 设置最小存活时间 8 -M 设置最大存活时间 9 -W 设置密码过期前的提醒时间
我们也可以使用chage username交互式修改用户的密码策略
1 vipw = vim /etc/passwd 2 vipw -s = vim /etc/shadow 3 vigr = vim /etc/group 4 vigr -s = vim /etc/gshadow 5 pwck 检查/etc/passwd /etc/shadow 6 grpck 检查/etc/group /etc/gshadow
关于/etc/group和gshadow
在linux中,我们有所有者和所属组的概念,一般情况下,我们在添加用户的时候,都会默认的有一个自己的所属组且和自己的用户名称一样(在没有添加参数设置的情况下)。话说,组有什么用呢?想象一下,如果我们在一台服务器上工作,而很多时候都是几个人围着一个项目跑,我们的项目文件该放在那里,使得大家都可以看到,参与,修改呢?这时候就体现出来组的重要性了,我们可以创建一个项目组,凡是参加这个项目的人员都可以加到这个组中去,一起完成一个项目,岂不是美滋滋。
而且,就像我们一个班一样,有班长,有老师,有组长,有学委,在linux中也是一样,我们创建完组之后,可以给组添加管理员,管理员可以对这个组进行各种操作,添加用户,删除用户,等等。这些,一会我会继续介绍,现在我们就看看在这两个配置文件中有些啥东西。
/etc/group
群组名称:就是群组名称
群组密码:通常不需要设定,密码是被记录在/etc/gshadow
GID:就是群组的 ID
以当前组为附加组的用户列表(分隔符为逗号)
和用户密码一样,我们的组也是有密码的,主要是,但是为了安全,密码映射的位置是/etc/gshadow中。
/etc/gshadow
群组名称:就是群组名称
群组密码:
组管理员列表:组管理员的列表,更改组密码和成员
以当前组为附加组的用户列表: (分隔符为逗号)
对于用户组的管理,我们一会再说,现在我们先来学习如何创建用户,更改用户信息和删除用户,以及一些其他的查询和更改命令。
用户管理
创建用户
1 命令:useradd 2 格式:useradd [option] newuser 3 选项: 4 -u UID: [UID_MIN, UID_MAX]定义在/etc/login.defs 5 -o 配合-u 选项,不检查UID的唯一性 6 -g GID:指明用户所属基本组,可为组名,也可以GID 7 -c "COMMENT":用户的注释信息 8 -d HOME_DIR: 以指定的路径(不存在)为家目录 9 -s SHELL: 指明用户的默认shell程序 10 可用列表在/etc/shells文件中 11 -G GROUP1[,GROUP2,...]:为用户指明附加组,组须事先存在 12 -N 不创建私用组做主组,使用users组做主组 13 -r: 创建系统用户 CentOS 6: ID<500, CentOS 7: ID<1000
我们可以看到,创建用户的参数有很多,这只是其中的一部分,也算是比较重要的呢。我们看到-u选项后面有一个配置文件,在这个配置文件中,设置的是我们在创建用户时的默认信息,包括密码的各种信息,采用的加密算法,UID,GID的范围,初始邮箱,初始的默认权限等。接下来,我们将对一些参数进行了解:
-u 和 –o选项一起来用可以在创建用户时不再检查UID的唯一性,这就意味着我们以这种方式创建用户时可能和其他用户的UID重复,这样的话,当我们在切入新创建的用户时可能导致我们进的是之前已经存在的具有相同UID的用户。
-g选项可以帮助我们在创建用户时直接指定一个用户组为自己的私有组,但是如果这个组不存在的话,就会报错,从而无法创建,因此,我们在指定组的时候,要知道我们指定的组是否存在。
-d选项可以帮助我们在某一个目录下设置自己的家目录
-s选项用来设置我们的登录shell,其实还有一个命令chsh也可以在我们用户创建完成后更改shell。
-G选项可以为我们增加一些附加组,以便我们可以进入到某些目录下进行工作,如果进入多个附加组,我们可以用“,”将附加组隔开
-N选项是一个什么呢,这是一个默认的user组,如果我们在创建用户时加上-N选项,就会把user(GID=100)作为用户的主要组。
我们的用户都是创建过程都是默认执行的,很多信息都是通过默认设置的,比如说我们的提示符,其实我们所创建的家目录里面的隐藏文件都是在/etc/skel/中复制并改变所有者和所属组的呢。
默认值设定: /etc/default/useradd文件中
显示或更改默认设置:
1 useradd -D 2 useradd –D -s SHELL 3 useradd –D –b BASE_DIR 4 useradd –D –g GROUP
我们可以通过useradd –D选项来查看我们的默认设置,当然我们还可以更改默认设置(root)
用户设置
1 命令:usermod 2 格式:usermod [option] username 3 选项: 4 -u UID: 新UID 5 -g GID: 新主组 6 -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项 7 -s SHELL:新的默认SHELL 8 -c ‘COMMENT‘:新的注释信息 9 -d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项 10 -l login_name: 新的名字; 11 -L: lock指定用户,在/etc/shadow 密码栏的增加 ! 12 -U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉 13 -e YYYY-MM-DD: 指明用户账号过期日期 14 -f INACTIVE: 设定非活动期限
用户设置是在用户创建后可以进行的活动,好多选项是和用户创建时的选项和功能是一致的我就对不同的选项加以说明。
-l选项可以更改用户名,一个我觉得用起来爽歪歪的选项,想想要是在公司一员工走了,但是他的家目录下还有好多重要文件,我们可以将名字换成其他人的名字使用,这样文件也能保存下来,但是有一点,他的组和无法通过这个选项进行同步。
-L选项和-U选项是一对,我们可以给某个用户的密码上锁,使得该用户无法登陆
-e选项可以设置用户的过期时间,让某一用户到某个时间就无法再使用
-f选项是密码过期后的天数,直到帐户被永久禁用为止
删除用户
1 userdel [OPTION]... login 2 -r: 删除用户家目录
我们可以删除一个账号,如果不加-r选项的话,这个用户的家目录包括邮箱等都不会被删除,如果加上-r选项,就能删除这个账户的家目录等
修改用户密码
1 passwd [OPTIONS] UserName: 修改指定用户的密码,仅root用户权限 2 passwd: 修改自己的密码
常用选项: -l:锁定指定用户 -u:解锁指定用户 -e:强制用户下次登录修改密码 -n mindays: 指定最短使用期限 -x maxdays:最大使用期限 -w warndays:提前多少天开始警告 -i inactivedays:非活动期限 --stdin:从标准输入接收用户密码 echo "PASSWORD" | passwd --stdin USERNAME
我们一般用这个命令来更改密码,这个命令每个用户都能使用,但是只有root用户才可以在passwd后面跟上名字,普通用户只能修改密码。当然他还有一下重要选项,我们来介绍一下。
-e选项是为了防止一些用户过于懒惰,设置的初始密码就用初始密码,一点也不改,这样可不好,所以管理员就可以使用这个选项让用户在第一次登录时就去修改密码。
-n,-x,-w,-i选项可以用chage这个命令代替,使用起来很方便,不过在这我们给演示一下passwd的用法。
--stdin选项通常用在我们的脚本批量设置用户中。
看用户相关的ID信息
1 id [OPTION]... [USER] 2 -u: 显示UID 3 -g: 显示GID 4 -G: 显示用户所属的组的ID 5 -n: 显示名称,需配合ugG使用
切换用户
1 su [options...] [-] [user [args...] 2 切换用户的方式: 3 su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录 4 su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全 5 root su至其他用户无须密码;非root用户切换时需要密码
换个身份执行命令:
查看自己的附加组
命令:groups 格式:groups username
更换shell
命令:chsh 格式:chsh -s /path/shell
组的管理
组的存在对于linux来说很重要,因为我们的很多工作都不是一个人来完成的,为了能使大家在一个区域内共享文件,修改文件,可以让大家都进入待一个组里面,这样就能够合作完成繁重的工作,我们现在说如何创建组:
1 groupadd [OPTION]... group_name 2 -g GID: 指明GID号; [GID_MIN, GID_MAX] 3 -r: 创建系统组 4 CentOS 6: ID<500 5 CentOS 7: ID<1000
对于用户再说,基本上每个人都有必须有一个私有组,可以有零个或多个附加组,我们的很多工作都是在附加组中完成的。
当然我们还可以通过groupmod对属性进行修改,比如更改组名,更改组ID等
组属性修改:
groupmod [OPTION]... group -n group_name: 新名字 -g GID: 新的GID
当我们不在使用某个组的时候,我们就会删除这个组,删除组的命令如下:
组删除:
groupdel groupdel GROUP
在创建完组以后,我们就要向组内添加新成员,对于root来说可以使用groupmems来管理组成员:
1 groupmems [options] [action] 2 options: 3 -g, --group groupname 更改为指定组 (只有root) 4 Actions: 5 -a, --add username 指定用户加入组 6 -d, --delete username 从组中删除用户 7 -p, --purge 从组中清除所有成员 8 -l, --list 显示组成员列表
通过上面的参数我们可以看到,root可以通过groupmems来添加,删除和显示组成员,但是如果我们的服务器里面有很多个组的时候还是让root一个人来管理吗,不是的,我们的组还是有组管理员的。组管理员有root在指定或删除,对于一个组来说,组管理员的权利是最大的,如何添加管理员呢,有一个命令gpasswd同时也可以设置组的密码:
1 命令:gpasswd 2 格式:gpasswd [OPTION] GROUP 3 选项: 4 -a user: 将user添加至指定组中 5 -d user: 从指定组中移除用户user 6 -A user1,user2,...: 设置有管理权限的用户列表
我们可以通过-A选项来给一个组添加管理员,管理员可以用gpasswd命令来对这个组进行管理,管理员可以是不在这个组的成员,如果需要,管理员可以将自己增加到组内
对于gpasswd,主要是为了限制其他人来进这个组,如果要进这个组,可以临时切换成组成员,这样,这个人的主要组也会临时变成他所要进组,创建的文件也会是属于他所进的组:
newgrp命令:临时切换主组
如果用户本不属于此组,则需要组密码
作为一个非组用户想进此组:
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 10.5pt; font-family: "Calibri", "sans-serif" }
h2 { margin-top: 13.0pt; margin-right: 0cm; margin-bottom: 13.0pt; margin-left: 0cm; text-align: justify; line-height: 173%; page-break-after: avoid; font-size: 16.0pt; font-family: "Cambria", "serif" }
h3 { margin-top: 13.0pt; margin-right: 0cm; margin-bottom: 13.0pt; margin-left: 0cm; text-align: justify; line-height: 173%; page-break-after: avoid; font-size: 16.0pt; font-family: "Calibri", "sans-serif" }
p.MsoHeader,li.MsoHeader,div.MsoHeader { margin: 0cm; margin-bottom: .0001pt; text-align: center; border: none; padding: 0cm; font-size: 9.0pt; font-family: "Calibri", "sans-serif" }
p.MsoFooter,li.MsoFooter,div.MsoFooter { margin: 0cm; margin-bottom: .0001pt; font-size: 9.0pt; font-family: "Calibri", "sans-serif" }
p.MsoAcetate,li.MsoAcetate,div.MsoAcetate { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 9.0pt; font-family: "Calibri", "sans-serif" }
span.Char { }
span.Char0 { }
span.Char1 { }
span.2Char
{ font-family: "Cambria", "serif"; font-weight: bold }
span.3Char
{ font-weight: bold }
span.SpellE { }
span.GramE { }
.MsoChpDefault { font-family: "Calibri", "sans-serif" }
div.WordSection1 { }