鸟哥的Linux私房菜读书笔记--账号管理

版权声明:本文属博主原创,转载请联系QQ528055624 https://blog.csdn.net/qq_41825534/article/details/83047214

1、新增与移除使用者

useradd、相关的配置文件、passwd、usermod、userdel

<1>useradd

[root@study ~]# useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM]\
> [-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名
选项与参数:
-u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个账号;
-g :后面接的那个组名就是我们上面提到的 initial group 啦~
 该群组的 GID 会被放置到 /etc/passwd 的第四个字段内。
-G :后面接的组名则是这个账号还可以加入的群组。
 这个选项与参数会修改 /etc/group 内的相关资料喔!
-M :强制!不要建立用户家目录!(系统账号默认值)
-m :强制!要建立用户家目录!(一般账号默认值)
-c :这个就是 /etc/passwd 的第五栏的说明内容啦~可以随便我们设定的啦~
-d :指定某个目录成为家目录,而不要使用默认值。务必使用绝对路径!
-r :建立一个系统的账号,这个账号的 UID 会有限制 (参考 /etc/login.defs)
-s :后面接一个 shell ,若没有指定则预设是 /bin/bash 的啦~
-e :后面接一个日期,格式为『YYYY-MM-DD』此项目可写入 shadow 第八字段,
 亦即账号失效日的设定项目啰;
-f :后面接 shadow 的第七字段项目,指定密码是否会失效。0 为立刻失效,
 -1 为永远不失效(密码只会过期而强制于登入时重新设定而已。)

centos默认值会主要处理:

· 在 /etc/passwd 里面建立一行与账号相关的数据,包括建立 UID/GID/家目录等;
· 在 /etc/shadow 里面将此账号的密码相关参数填入,但是尚未有密码;
· 在 /etc/group 里面加入一个与账号名称一模一样的组名;
· 在 /home 底下建立一个与账号同名的目录作为用户家目录,且权限为 700

useradd在建立使用者账号时会更改以下几个文件:

· 用户账号与密码参数方面的文件:/etc/passwd, /etc/shadow
· 使用者群组相关方面的文件:/etc/group, /etc/gshadow
· 用户的家目录:/home/账号名称

<2>useradd参考档

useradd的默认值:

[root@study ~]# useradd -D
GROUP=100 <==预设的群组,对于centos系统预设群组为与账号同名的群组。
HOME=/home <==默认的家目录所在目录
INACTIVE=-1 <==密码失效日,在 shadow 内的第 7 栏,密码过期后早多久时间内可以使用旧密码等入
EXPIRE= <==账号失效日,在 shadow 内的第 8 栏,账号在哪个日期后会直接失效,不会理会密码失效日,可用于会员管理系统
SHELL=/bin/bash <==预设的 shell,默认使用的shell程序员件名。
SKEL=/etc/skel <==用户家目录的内容数据参考目录。新建用户的家目录内的各项数据都是有/etc/skel复制过去的。所以未来想增加使用者,该用户的环境变量./bahsrc就设定妥当的话,可以在/etc/skel/.bashrc去编辑,例如需要创建/etc/skel/www这个目录,在未来增加的使用者的家目录下面就会有www这个目录。
CREATE_MAIL_SPOOL=yes <==是否主动帮使用者建立邮件信箱(mailbox)

该数据是有/etc/default/useradd呼叫出来的。

对于UID/GID还有密码参数的参考:

MAIL_DIR /var/spool/mail <==用户默认邮件信箱放置目录
PASS_MAX_DAYS 99999 <==/etc/shadow 内的第 5 栏,多久需变更密码日数
PASS_MIN_DAYS 0 <==/etc/shadow 内的第 4 栏,多久不可重新设定密码日数
PASS_MIN_LEN 5 <==密码最短的字符长度,已被 pam 模块取代,失去效用!
PASS_WARN_AGE 7 <==/etc/shadow 内的第 6 栏,过期前会警告的日数
UID_MIN 1000 <==使用者最小的 UID,意即小于 1000 的 UID 为系统保留
UID_MAX 60000 <==使用者能够用的最大 UID
SYS_UID_MIN 201 <==保留给用户自行设定的系统账号最小值 UID
SYS_UID_MAX 999 <==保留给用户自行设定的系统账号最大值 UID
GID_MIN 1000 <==使用者自定义组的最小 GID,小于 1000 为系统保留
GID_MAX 60000 <==使用者自定义组的最大 GID
SYS_GID_MIN 201 <==保留给用户自行设定的系统账号最小值 GID
SYS_GID_MAX 999 <==保留给用户自行设定的系统账号最大值 GID
CREATE_HOME yes <==在不加 -M 及 -m 时,是否主动建立用户家目录?
UMASK 077 <==用户家目录建立的 umask ,因此权限会是 700
USERGROUPS_ENAB yes <==使用 userdel 删除时,是否会删除初始群组
ENCRYPT_METHOD SHA512 <==密码加密的机制使用的是 sha512 这一个机制!
这个文件规范的数据则是如下所示:
· mailbox 所在目录:
用户的默认 mailbox 文件放置的目录在 /var/spool/mail,所以 vbird1 的 mailbox 就是在/var/spool/mail/vbird1 啰!
· shadow 密码第 4, 5, 6 字段内容:
透过 PASS_MAX_DAYS 等等设定值来指定的!所以你知道为何预设的 /etc/shadow 内每一行都会有『 0:99999:7 』的存在了吗?^_^!不过要注意的是,由于目前我们登入时改用 PAM 模块来进行密码检验,所以那个 PASS_MIN_LEN 是失效的!
· UID/GID 指定数值:
虽然 Linux 核心支持的账号可高达 232 这么多个,不过一部主机要作出这么多账号在管理上也是很麻烦的!所以在这里就针对 UID/GID 的范围进行规范就是了。上表中的 UID_MIN 指的就是可登入系统的一般账号的最小 UID ,至于 UID_MAX 则是最大 UID 之意。要注意的是,系统给予一个账号 UID 时,他是 (1)先参考 UID_MIN 设定值取得最小数值; (2)由/etc/passwd 搜寻最大的 UID 数值, 将 (1) 与 (2) 相比,找出最大的那个再加一就是新账号的 UID 了。我们上面已经作出 UID 为 1500 的 vbird2 , 如果再使用『 useradd vbird4 』时,你猜 vbird4 的 UID 会是多少?答案是: 1501 。 所以中间的 1004~1499 的号码就空下来啦!而如果我是想要建立系统用的账号,所以使用 useradd -r sysaccount 这个 -r 的选项时,就会找『比 201 大但比 1000 小的最大的 UID 』就是了。 ^_^
· 用户家目录设定值:
为何我们系统默认会帮用户建立家目录?就是这个『CREATE_HOME = yes』的设定值啦!这个设定值会让你在使用 useradd 时, 主动加入『 -m 』这个产生家目录的选项啊!如果不想要建立用户家目录,就只能强制加上『 -M 』的选在 useradd 指令执行时啦!至于建立家目录的权限设定呢?就透过 umask 这个设定值啊!因为是 077 的预设设定,因此用户家目录默认权限才会是『 drwx------ 』哩!
· 用户删除与密码设定值:
使用『USERGROUPS_ENAB yes』这个设定值的功能是: 如果使用 userdel 去删除一个账号时,且该账号所属的初始群组已经没有人隶属于该群组了, 那么就删除掉该群组,举例来说,我们刚刚有建立 vbird4 这个账号,他会主动建立 vbird4 这个群组。 若 vbird4 这个群组并没有其他账号将他加入支持的情况下,若使用 userdel vbird4 时,该群组也会被删除的意思。 至于『ENCRYPT_METHOD SHA512』则表示使用SHA512 来加密密码明文,而不使用旧式的 MD5(注 2) 。
现在你知道啦,使用 useradd 这支程序在建立 Linux 上的账号时,至少会参考:
· /etc/default/useradd
· /etc/login.defs
· /etc/skel/*

<3>passwd    ##设定密码

[root@study ~]# passwd [--stdin] [账号名称] <==所有人均可使用来改自己的密码
[root@study ~]# passwd [-l] [-u] [--stdin] [-S]  [-n 日数] [-x 日数] [-w 日数] [-i 日期] 账号 <==root 功能
选项与参数:
--stdin :可以透过来自前一个管线的数据,作为密码输入,对 shell script 有帮助!
-l :是 Lock 的意思,会将 /etc/shadow 第二栏最前面加上 ! 使密码失效;
-u :与 -l 相对,是 Unlock 的意思!
-S :列出密码相关参数,亦即 shadow 文件内的大部分信息。
-n :后面接天数,shadow 的第 4 字段,多久不可修改密码天数
-x :后面接天数,shadow 的第 5 字段,多久内必须要更动密码
-w :后面接天数,shadow 的第 6 字段,密码过期前的警告天数
-i :后面接『日期』,shadow 的第 7 字段,密码失效日期

关于用户设定密码的测试:

测试模块:pam_cracklib.so,该密码会检验密码的相关信息,并取代/etc/login.defs内的PASS_MIN_LEN的设定

<4>chage    #更详细的密码参数显示功能。

[root@study ~]# chage [-ldEImMW] 账号名
选项与参数:
-l :列出该账号的详细密码参数;
-d :后面接日期,修改 shadow 第三字段(最近一次更改密码的日期),格式 YYYY-MM-DD
-E :后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD
-I :后面接天数,修改 shadow 第七字段(密码失效日期)
-m :后面接天数,修改 shadow 第四字段(密码最短保留天数)
-M :后面接天数,修改 shadow 第五字段(密码多久需要进行变更)
-W :后面接天数,修改 shadow 第六字段(密码过期前警告日期)

<5>usermod    #对账号的相关数据进行微调

[root@study ~]# usermod [-cdegGlsuLU] username
选项与参数:
-c :后面接账号的说明,即 /etc/passwd 第五栏的说明栏,可以加入一些账号的说明。
-d :后面接账号的家目录,即修改 /etc/passwd 的第六栏;
-e :后面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 内的第八个字段数据啦!
-f :后面接天数,为 shadow 的第七字段。
-g :后面接初始群组,修改 /etc/passwd 的第四个字段,亦即是 GID 的字段!
-G :后面接次要群组,修改这个使用者能够支持的群组,修改的是 /etc/group 啰~
-a :与 -G 合用,可『增加次要群组的支持』而非『设定』喔!
-l :后面接账号名称。亦即是修改账号名称, /etc/passwd 的第一栏!
-s :后面接 Shell 的实际文件,例如 /bin/bash 或 /bin/csh 等等。
-u :后面接 UID 数字啦!即 /etc/passwd 第三栏的资料;
-L :暂时将用户的密码冻结,让他无法登入。其实仅改 /etc/shadow 的密码栏.                                                                                - U :将 /etc/shadow 密码栏的 ! 拿掉,解冻啦!

<6>userdel    #删除用户的相关数据

用户的数据有:

· 用户账号/密码相关参数:/etc/passwd, /etc/shadow
· 使用者群组相关参数:/etc/group, /etc/gshadow
· 用户个人文件数据: /home/username, /var/spool/mail/username..

[root@study ~]# userdel [-r] username
选项与参数:
-r :连同用户的家目录也一起删除

2、用户功能

<1>id   #查询某人或自己的相关GID/UID信息

命令:$  id  用户名    #也可以判断某系统上有无某账号

<2>finger     #查阅用户相关的信息,大部分是/etc/passwd内的信息,因为该指令有一定的安全性,所以新版Linux中已经默认不安装软件了。以下两种方式均可安装。

[root@study ~]# df -hT /mnt
Filesystem   Type       Size     Used    Avail    Use%    Mounted on
/dev/sr0       iso9660   7.1G     7.1G       0       100%       /mnt # 先确定是有挂载光盘的啦!
(1)[root@study ~]# rpm -ivh /mnt/Packages/finger-[0-9]*
(2)[root@study ~]# finger  [-s]  username
选项与参数:
-s :仅列出用户的账号、全名、终端机代号与登入时间等等;
-m :列出与后面接的账号相同者,而不是利用部分比对 (包括全名部分)

使用finger之另列出的信息说明:

· Login:为使用者账号,亦即 /etc/passwd 内的第一字段;
· Name:为全名,亦即 /etc/passwd 内的第五字段(或称为批注);
· Directory:就是家目录了;
· Shell:就是使用的 Shell 文件所在;
· Never logged in.:figner 还会调查用户登入主机的情况喔!
· No mail.:调查 /var/spool/mail 当中的信箱资料;
· No Plan.:调查 ~vbird1/.plan 文件,并将该文件取出来说明!

<3>chfn   #类似于change finger

[root@study ~]# chfn [-foph] [账号名]
选项与参数:
-f :后面接完整的大名;
-o :您办公室的房间号码;
-p :办公室的电话号码;
-h :家里的电话号码!

<4>chsh    #change shell

[vbird1@study ~]$ chsh [-ls]
选项与参数:
-l :列出目前系统上面可用的 shell ,其实就是 /etc/shells 的内容!
-s :设定修改自己的 Shell 啰

3、新增与移除群组

<1>groupadd    #新增群组,建议使用1000以下的GID

[vbird1@study ~]$ chsh [-ls]
选项与参数:
-l :列出目前系统上面可用的 shell ,其实就是 /etc/shells 的内容!
-s :设定修改自己的 Shell 啰

<2>groupmod    #修改group的相关参数

root@study ~]# groupmod [-g gid] [-n group_name] 群组名
选项与参数:                                                                                                                                                                                      -g :修改既有的 GID 数字;
-n :修改既有的组名

<3>groupdel    #删除群组

命令:$ groupdel  群组名

当删除用户的初始群组时,无法删除,只有在该群组内无用户作为初始群组时才可以删除。

<4>gpasswd    #群组管理员功能

#关于系统管理员(root)做的动作:
[root@study ~]# gpasswd groupname
[root@study ~]# gpasswd [-A user1,...] [-M user3,...] groupname
[root@study ~]# gpasswd [-rR] groupname
选项与参数:
 :若没有任何参数时,表示给予 groupname 一个密码(/etc/gshadow)
-A :将 groupname 的主控权交由后面的使用者管理(该群组的管理员)
-M :将某些账号加入这个群组当中!
-r :将 groupname 的密码移除
-R :让 groupname 的密码栏失效
# 关于群组管理员(Group administrator)做的动作:
[someone@study ~]$ gpasswd [-ad] user groupname
选项与参数:
-a :将某位使用者加入到 groupname 这个群组当中!
-d :将某位使用者移除出 groupname 这个群组当中。

4、账号管理实例

任务一:单纯的完成上头交代的任务,假设我们需要的账号数据如下,你该如何实作?
账号名称    账号全名     支援次要群组 是否可登入主机          密码
myuser1       1st user       mygroup1            可以               password
myuser2       2nd user      mygroup1            可以               password
myuser3       3rd user       无额外支持         不可以            password
处理的方法如下所示:
# 先处理账号相关属性的数据:
[root@study ~]# groupadd mygroup1
[root@study ~]# useradd -G mygroup1 -c "1st user" myuser1
[root@study ~]# useradd -G mygroup1 -c "2nd user" myuser2
[root@study ~]# useradd -c "3rd user" -s /sbin/nologin myuser3
# 再处理账号的密码相关属性的数据:
[root@study ~]# echo "password" | passwd --stdin myuser1
[root@study ~]# echo "password" | passwd --stdin myuser2
[root@study ~]# echo "password" | passwd --stdin myuser3
要注意的地方主要有:myuser1 与 myuser2 都有支援次要群组,但该群组不见得会存在,因此需要先手动建立他! 然后 myuser3 是『不可登入系统』的账号,因此需要使用 /sbin/nologin 这个 shell 来给予,这样该账号就无法登入啰! 这样是否理解啊!接下来再来讨论比较难一些的环境!如果是专题环境该如何制作?
任务二:我的使用者 pro1, pro2, pro3 是同一个项目计划的开发人员,我想要让这三个用户在同一个目录底下工作, 但这三个用户还是拥有自己的家目录与基本的私有群组。假设我要让这个项目计划在 /srv/projecta 目录下开发, 可以如何进行?
# 1. 假设这三个账号都尚未建立,可先建立一个名为 projecta 的群组,
# 再让这三个用户加入其次要群组的支持即可:
[root@study ~]# groupadd projecta
[root@study ~]# useradd -G projecta -c "projecta user" pro1
[root@study ~]# useradd -G projecta -c "projecta user" pro2
[root@study ~]# useradd -G projecta -c "projecta user" pro3
[root@study ~]# echo "password" | passwd --stdin pro1
[root@study ~]# echo "password" | passwd --stdin pro2
[root@study ~]# echo "password" | passwd --stdin pro3
#2. 开始建立此项目的开发目录:
[root@study ~]# mkdir /srv/projecta
[root@study ~]# chgrp projecta /srv/projecta
[root@study ~]# chmod 2770 /srv/projecta
[root@study ~]# ll -d /srv/projecta
drwxrws---. 2 root projecta 6 Jul 20 23:32 /srv/projecta
由于此项目计划只能够给 pro1, pro2, pro3 三个人使用,所以 /srv/projecta 的权限设定一定要正确才行! 所以该目录群组一定是 projecta ,但是权限怎么会是 2770 呢还记得第六章谈到的 SGID 吧?为了让三个使用者能够互相修改对方的文件, 这个 SGID 是必须要存在的喔!如果连这里都能够理解,嘿嘿!您的账号管理已经有一定程度的概念啰! ^_^但接下来有个困扰的问题发生了!假如任务一的 myuser1 是 projecta 这个项目的助理,他需要这个项目的内容, 但是他『不可以修改』项目目录内的任何数据!那该如何是好?你或许可以这样做:
· 将 myuser1 加入 projecta 这个群组的支持,但是这样会让 myuser1 具有完整的 /srv/projecta 的权限,myuser1 是可以删除该目录下的任何数据的!这样是有问题的;
· 将 /srv/projecta 的权限改为 2775 ,让 myuser1 可以进入查阅数据。但此时会发生所有其他人均可进入该目录查阅的困扰! 这也不是我们要的环境。

5、使用外部身份认证系统

除了本机的账号外,我们还可能会使用到外部的身份验证服务器的验证身份功能。例如windows下称为Active Directory(AD)的windows身份验证系统。Linux为了提供给不同主机使用同一组账号与密码,也会使用LDAP、 NIS等服务器提供的身份验证。此时可能需要额外的设定一些数据了,为简化用户的操作流程,所以centos提供authconfig-tui指令供我们参考。

猜你喜欢

转载自blog.csdn.net/qq_41825534/article/details/83047214