长春网站优化哪家好,资阳抖音搜索优化,微信与网站对接,关于建设网站的合作合同范本【BASH】回顾与知识点梳理 二十三 二十三. Linux 账号管理#xff08;二#xff09;23.1 账号管理新增与移除使用者#xff1a; useradd, 相关配置文件, passwd, usermod, userdelusermoduserdel 23.2 用户功能#xff08;普通用户可使用#xff09;idfingerchfnchsh 23.3… 【BASH】回顾与知识点梳理 二十三 二十三. Linux 账号管理二23.1 账号管理新增与移除使用者 useradd, 相关配置文件, passwd, usermod, userdelusermoduserdel 23.2 用户功能普通用户可使用idfingerchfnchsh 23.3 新增与移除群组groupaddgroupmodgroupdelgpasswd群组管理员功能 23.4 账号管理实例23.5 使用外部身份认证系统 该系列目录 -- 【BASH】回顾与知识点梳理目录
二十三. Linux 账号管理二
23.1 账号管理
接上章我们继续学习账号管理相关内容
新增与移除使用者 useradd, 相关配置文件, passwd, usermod, userdel
usermod
所谓这『人有失手马有乱蹄』您说是吧所以啰当然有的时候会『不小心手滑了一下』在 useradd 的时候加入了错误的设定数据。或者是在使用 useradd 后发现某些地方还可以进行细部修改。 此时当然我们可以直接到 /etc/passwd 或 /etc/shadow 去修改相对应字段的数据 不过Linux 也有提供相关的指令让大家来进行账号相关数据的微调呢那就是 usermod 啰
[rootstudy ~]# 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 密码栏的 ! 拿掉解冻啦如果你仔细的比对会发现 usermod 的选项与 useradd 非常类似 这是因为 usermod 也是用来微调useradd 增加的使用者参数嘛不过 usermod 还是有新增的选项 那就是-L与-U不过这两个选项其实与 passwd 的 -l, -u 是相同的而且也不见得会存在所有的 distribution 当中接下来让我们谈谈一些变更参数的实例吧
# 范例一修改使用者 vbird2 的说明栏加上『VBirds test』的说明。
[rootstudy ~]# usermod -c VBirds test vbird2
[rootstudy ~]# grep vbird2 /etc/passwd
vbird2:x:1500:100:VBirds test:/home/vbird2:/bin/bash# 范例二使用者 vbird2 这个账号在 2015/12/31 失效。
[rootstudy ~]# usermod -e 2015-12-31 vbird2
[rootstudy ~]# chage -l vbird2 | grep Account expires
Account expires : Dec 31, 2015# 范例三我们建立 vbird3 这个系统账号时并没有给予家目录请建立他的家目录
[rootstudy ~]# ll -d ~vbird3
ls: cannot access /home/vbird3: No such file or directory 确认一下确实没有家目录的存在
[rootstudy ~]# cp -a /etc/skel /home/vbird3
[rootstudy ~]# chown -R vbird3:vbird3 /home/vbird3
[rootstudy ~]# chmod 700 /home/vbird3
[rootstudy ~]# ll -a ~vbird3
drwx------. 3 vbird3 vbird3 74 May 4 17:51 . 用户家目录权限
drwxr-xr-x. 10 root root 4096 Jul 20 22:51 ..
-rw-r--r--. 1 vbird3 vbird3 18 Mar 6 06:06 .bash_logout
-rw-r--r--. 1 vbird3 vbird3 193 Mar 6 06:06 .bash_profile
-rw-r--r--. 1 vbird3 vbird3 231 Mar 6 06:06 .bashrc
drwxr-xr-x. 4 vbird3 vbird3 37 May 4 17:51 .mozilla
# 使用 chown -R 是为了连同家目录底下的用户/群组属性都一起变更的意思
# 使用 chmod 没有 -R 是因为我们仅要修改目录的权限而非内部文件的权限userdel
这个功能就太简单了目的在删除用户的相关数据而用户的数据有
用户账号/密码相关参数/etc/passwd, /etc/shadow使用者群组相关参数/etc/group, /etc/gshadow用户个人文件数据 /home/username, /var/spool/mail/username…
整个指令的语法非常简单
[rootstudy ~]# userdel [-r] username
选项与参数
-r 连同用户的家目录也一起删除# 范例一删除 vbird2 连同家目录一起删除
[rootstudy ~]# userdel -r vbird2这个指令下达的时候要小心了通常我们要移除一个账号的时候你可以手动的将/etc/passwd与/etc/shadow 里头的该账号取消即可一般而言如果该账号只是『暂时不启用』的话那么将/etc/shadow 里头账号失效日期 (第八字段) 设定为 0 就可以让该账号无法使用但是所有跟该账号相关的数据都会留下来 使用 userdel 的时机通常是『你真的确定不要让该用户在主机上面使用任何数据了』
另外其实用户如果在系统上面操作过一阵子了那么该用户其实在系统内可能会含有其他文件的。举例来说他的邮件信箱 (mailbox) 或者是例行性工作排程 (crontab, 十五章) 之类的文件。 所以如果想要完整的将某个账号完整的移除最好可以在下达 userdel -r username 之前 先以『find / -user username』查出整个系统内属于 username 的文件然后再加以删除吧
23.2 用户功能普通用户可使用
不论是useradd/usermod/userdel那都是系统管理员所能够使用的指令如果我是一般身份使用者那么我是否除了密码之外就无法更改其他的数据呢 当然不是啦这里我们介绍几个一般身份用户常用的账号数据变更与查询指令啰
id
id 这个指令则可以查询某人或自己的相关 UID/GID 等等的信息他的参数也不少不过都不需要记反正使用 id 就全部都列出啰 另外也回想一下我们在前一章谈到的循环时就有用过这个指令喔 ^_^
[rootstudy ~]# id [username]# 范例一查阅 root 自己的相关 ID 信息
[rootstudy ~]# id
uid0(root) gid0(root) groups0(root) contextunconfined_u:unconfined_r:unconfined_t:
s0-s0:c0.c1023
# 上面信息其实是同一行的数据包括会显示 UID/GID 以及支持的所有群组
# 至于后面那个 context... 则是 SELinux 的内容先不要理会他# 范例二查阅一下 vbird1 吧
[rootstudy ~]# id vbird1
uid1003(vbird1) gid1004(vbird1) groups1004(vbird1)
[rootstudy ~]# id vbird100
id: vbird100: No such user id 这个指令也可以用来判断系统上面有无某账号finger
finger 的中文字面意义是『手指』或者是『指纹』的意思。这个 finger 可以查阅很多用户相关的信息喔 大部分都是在 /etc/passwd 这个文件里面的信息啦不过这个指令有点危险所以新的版本中已经默认不安装这个软件好啦现在继续来安装软件先记得第九章 dos2unix 的安装方式假设你已经将光驱或光盘映像文件挂载在 /mnt 底下了所以
[rootstudy ~]# df -hT /mnt
Filesystem Type Size Used Avail Use% Mounted on
/dev/sr0 iso9660 7.1G 7.1G 0 100% /mnt # 先确定是有挂载光盘的啦
[rootstudy ~]# rpm -ivh /mnt/Packages/finger-[0-9]*我们就先来检查检查用户信息吧
[rootstudy ~]# finger [-s] username
选项与参数
-s 仅列出用户的账号、全名、终端机代号与登入时间等等
-m 列出与后面接的账号相同者而不是利用部分比对 (包括全名部分)# 范例一观察 vbird1 的用户相关账号属性
[rootstudy ~]# finger vbird1
Login: vbird1 Name:
Directory: /home/vbird1 Shell: /bin/bash
Never logged in.
No mail.
No Plan.由于 finger 类似指纹的功能他会将用户的相关属性列出来如上表所示其实他列出来的几乎都是 /etc/passwd 文件里面的东西。列出的信息说明如下
Login为使用者账号亦即 /etc/passwd 内的第一字段Name为全名亦即 /etc/passwd 内的第五字段(或称为批注)Directory就是家目录了Shell就是使用的 Shell 文件所在Never logged in.figner 还会调查用户登入主机的情况喔No mail.调查 /var/spool/mail 当中的信箱资料No Plan.调查 ~vbird1/.plan 文件并将该文件取出来说明
不过是否能够查阅到 Mail 与 Plan 则与权限有关了因为 Mail / Plan 都是与使用者自己的权限设定有关 root 当然可以查阅到用户的这些信息但是 vbird1 就不见得能够查到 vbird3 的信息 因为 /var/spool/mail/vbird3 与 /home/vbird3/ 的权限分别是 660, 700 那 vbird1 当然就无法查阅的到这样解释可以理解吧此外我们可以建立自己想要执行的预定计划当然最多是给自己看的可以这样做
# 范例二利用 vbird1 建立自己的计划档
[vbird1study ~]$ echo I will study Linux during this year. ~/.plan
[vbird1study ~]$ finger vbird1
Login: vbird1 Name:
Directory: /home/vbird1 Shell: /bin/bash
Last login Mon Jul 20 23:06 (CST) on pts/0
No mail.
Plan:
I will study Linux during this year.# 范例三找出目前在系统上面登入的用户与登入时间
[vbird1study ~]$ finger
Login Name Tty Idle Login Time Office Office Phone Host
dmtsai dmtsai tty2 11d Jul 7 23:07
dmtsai dmtsai pts/0 Jul 20 17:59 在范例三当中我们发现输出的信息还会有 Office, Office Phone 等信息那这些信息要如何记录呢底下我们会介绍 chfn 这个指令来看看如何修改用户的 finger 数据吧
chfn
chfn 有点像是 change finger 的意思这玩意的使用方法如下
[rootstudy ~]# chfn [-foph] [账号名]
选项与参数
-f 后面接完整的大名
-o 您办公室的房间号码
-p 办公室的电话号码
-h 家里的电话号码# 范例一vbird1 自己更改一下自己的相关信息
[vbird1study ~]$ chfn
Changing finger information for vbird1.
Name []: VBird Tsai test 输入你想要呈现的全名
Office []: DIC in KSU 办公室号码
Office Phone []: 06-2727175#356 办公室电话
Home Phone []: 06-1234567 家里电话号码
Password: 确认身份所以输入自己的密码
Finger information changed.
[vbird1study ~]$ grep vbird1 /etc/passwd
vbird1:x:1003:1004:VBird Tsai test,DIC in KSU,06-2727175#356,06-1234567:/home/vbird1:/bin/bash
# 其实就是改到第五个字段该字段里面用多个『 , 』分隔就是了
[vbird1study ~]$ finger vbird1
Login: vbird1 Name: VBird Tsai test
Directory: /home/vbird1 Shell: /bin/bash
Office: DIC in KSU, 06-2727175#356 Home Phone: 06-1234567
Last login Mon Jul 20 23:12 (CST) on pts/0
No mail.
Plan:
I will study Linux during this year.
# 就是上面特殊字体呈现的那些地方是由 chfn 所修改出来的这个指令说实在的除非是你的主机有很多的用户否则倒真是用不着这个程序这就有点像是 bbs 里头更改你『个人属性』的那一个资料啦不过还是可以自己玩一玩尤其是用来提醒自己相关资料啦 ^_^
chsh
这就是 change shell 的简写使用方法就更简单了
[vbird1study ~]$ chsh [-ls]
选项与参数
-l 列出目前系统上面可用的 shell 其实就是 /etc/shells 的内容
-s 设定修改自己的 Shell 啰# 范例一用 vbird1 的身份列出系统上所有合法的 shell并且指定 csh 为自己的 shell
[vbird1study ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin 所谓合法不可登入的 Shell 就是这玩意
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh 这就是 C shell 啦
# 其实上面的信息就是我们在 bash 中谈到的 /etc/shells 啦
[vbird1study ~]$ chsh -s /bin/csh; grep vbird1 /etc/passwd
Changing shell for vbird1.
Password: 确认身份请输入 vbird1 的密码
Shell changed.
vbird1:x:1003:1004:VBird Tsai test,DIC in KSU,06-2727175#356,06-1234567:/home/vbird1:/bin/csh
[vbird1study ~]$ chsh -s /bin/bash
# 测试完毕后立刻改回来
[vbird1study ~]$ ll $(which chsh)
-rws--x--x. 1 root root 23856 Mar 6 13:59 /bin/chsh不论是 chfn 与 chsh 都是能够让一般用户修改 /etc/passwd 这个系统文件的所以你猜猜这两个文件的权限是什么 一定是 SUID 的功能啦看到这里想到前面 这就是 Linux 的学习方法^_^
23.3 新增与移除群组
OK了解了账号的新增、删除、更动与查询后再来我们可以聊一聊群组的相关内容了。 基本上群组的内容都与这两个文件有关/etc/group, /etc/gshadow。 群组的内容其实很简单都是上面两个文件的新增、修改与移除而已 不过如果再加上有效群组的概念那么newgrp 与 gpasswd 则不可不知呢
groupadd
[rootstudy ~]# groupadd [-g gid] [-r] 组名
选项与参数
-g 后面接某个特定的 GID 用来直接给予某个 GID
-r 建立系统群组啦与 /etc/login.defs 内的 GID_MIN 有关。# 范例一新建一个群组名称为 group1
[rootstudy ~]# groupadd group1
[rootstudy ~]# grep group1 /etc/group /etc/gshadow
/etc/group:group1:x:1503:
/etc/gshadow:group1:!::
# 群组的 GID 也是会由 1000 以上最大 GID1 来决定groupmod
跟 usermod 类似的这个指令仅是在进行 group 相关参数的修改而已。
[rootstudy ~]# groupmod [-g gid] [-n group_name] 群组名
选项与参数
-g 修改既有的 GID 数字
-n 修改既有的组名# 范例一将刚刚上个指令建立的 group1 名称改为 mygroup GID 为 201
[rootstudy ~]# groupmod -g 201 -n mygroup group1
[rootstudy ~]# grep mygroup /etc/group /etc/gshadow
/etc/group:mygroup:x:201:
/etc/gshadow:mygroup:!::不过还是那句老话不要随意的更动 GID 容易造成系统资源的错乱喔
groupdel
呼呼 groupdel 自然就是在删除群组的啰用法很简单
[rootstudy ~]# groupdel [groupname]# 范例一将刚刚的 mygroup 删除
[rootstudy ~]# groupdel mygroup# 范例二若要删除 vbird1 这个群组的话
[rootstudy ~]# groupdel vbird1
groupdel: cannot remove the primary group of user vbird1为什么 mygroup 可以删除但是 vbird1 就不能删除呢原因很简单『有某个账号 (/etc/passwd) 的initial group 使用该群组』 如果查阅一下你会发现在 /etc/passwd 内的 vbird1 第四栏的 GID 就是 /etc/group 内的 vbird1 那个群组的 GID 所以啰当然无法删除否则 vbird1 这个用户登入系统后 就会找不到 GID 那可是会造成很大的困扰的那么如果硬要删除 vbird1 这个群组呢 你『必须要确认 /etc/passwd 内的账号没有任何人使用该群组作为 initial group 』才行喔所以你可以
修改 vbird1 的 GID 或者是删除 vbird1 这个使用者。
gpasswd群组管理员功能
如果系统管理员太忙碌了导致某些账号想要加入某个项目时找不到人帮忙这个时候可以建立『群组管理员』喔 什么是群组管理员呢就是让某个群组具有一个管理员这个群组管理员可以管理哪些账号可以加入/移出该群组 那要如何『建立一个群组管理员』呢就得要透过 gpasswd 啰
# 关于系统管理员(root)做的动作
[rootstudy ~]# gpasswd groupname
[rootstudy ~]# gpasswd [-A user1,...] [-M user3,...] groupname
[rootstudy ~]# gpasswd [-rR] groupname
选项与参数若没有任何参数时表示给予 groupname 一个密码(/etc/gshadow)
-A 将 groupname 的主控权交由后面的使用者管理(该群组的管理员)
-M 将某些账号加入这个群组当中
-r 将 groupname 的密码移除
-R 让 groupname 的密码栏失效# 关于群组管理员(Group administrator)做的动作
[someonestudy ~]$ gpasswd [-ad] user groupname
选项与参数
-a 将某位使用者加入到 groupname 这个群组当中
-d 将某位使用者移除出 groupname 这个群组当中。# 范例一建立一个新群组名称为 testgroup 且群组交由 vbird1 管理
[rootstudy ~]# groupadd testgroup 先建立群组
[rootstudy ~]# gpasswd testgroup 给这个群组一个密码吧
Changing the password for group testgroup
New Password:
Re-enter new password:
# 输入两次密码就对了
[rootstudy ~]# gpasswd -A vbird1 testgroup 加入群组管理员为 vbird1
[rootstudy ~]# grep testgroup /etc/group /etc/gshadow
/etc/group:testgroup:x:1503:
/etc/gshadow:testgroup:$6$MnmChP3D$mrUn.Vo.buDjObMm8F2emTkvGSeuWikhRzaKHxpJ...:vbird1:
# 很有趣吧此时 vbird1 则拥有 testgroup 的主控权喔身份有点像板主啦# 范例二以 vbird1 登入系统并且让他加入 vbird1, vbird3 成为 testgroup 成员
[vbird1study ~]$ id
uid1003(vbird1) gid1004(vbird1) groups1004(vbird1) ...
# 看得出来vbird1 尚未加入 testgroup 群组喔
[vbird1study ~]$ gpasswd -a vbird1 testgroup
[vbird1study ~]$ gpasswd -a vbird3 testgroup
[vbird1study ~]$ grep testgroup /etc/group
testgroup:x:1503:vbird1,vbird323.4 账号管理实例 账号管理不是随意建置几个账号就算了有时候我们需要考虑到一部主机上面可能有多个账号在协同工作 举例来说在大学任教时我们学校的专题生是需要分组的这些同一组的同学间必须要能够互相修改对方的数据文件 但是同时这些同学又需要保留自己的私密数据因此直接公开家目录是不适宜的。那该如何是好 为此我们底下提供几个例子来让大家思考看看啰 任务一单纯的完成上头交代的任务假设我们需要的账号数据如下你该如何实作
账号名称账号全名支援次要群组是否可登入主机密码myuser11st usermygroup1可以passwordmyuser22nd usermygroup1可以passwordmyuser33rd user无额外支持不可以password
# 先处理账号相关属性的数据
[rootstudy ~]# groupadd mygroup1
[rootstudy ~]# useradd -G mygroup1 -c 1st user myuser1
[rootstudy ~]# useradd -G mygroup1 -c 2nd user myuser2
[rootstudy ~]# useradd -c 3rd user -s /sbin/nologin myuser3
# 再处理账号的密码相关属性的数据
[rootstudy ~]# echo password | passwd --stdin myuser1
[rootstudy ~]# echo password | passwd --stdin myuser2
[rootstudy ~]# echo password | passwd --stdin myuser3要注意的地方主要有myuser1 与 myuser2 都有支援次要群组但该群组不见得会存在因此需要先手动建立他 然后 myuser3 是『不可登入系统』的账号因此需要使用 /sbin/nologin 这个 shell 来给予这样该账号就无法登入啰 这样是否理解啊接下来再来讨论比较难一些的环境如果是专题环境该如何制作
任务二我的使用者 pro1, pro2, pro3 是同一个项目计划的开发人员我想要让这三个用户在同一个目录底下工作 但这三个用户还是拥有自己的家目录与基本的私有群组。假设我要让这个项目计划在 /srv/projecta 目录下开发 可以如何进行
# 1. 假设这三个账号都尚未建立可先建立一个名为 projecta 的群组
# 再让这三个用户加入其次要群组的支持即可
[rootstudy ~]# groupadd projecta
[rootstudy ~]# useradd -G projecta -c projecta user pro1
[rootstudy ~]# useradd -G projecta -c projecta user pro2
[rootstudy ~]# useradd -G projecta -c projecta user pro3
[rootstudy ~]# echo password | passwd --stdin pro1
[rootstudy ~]# echo password | passwd --stdin pro2
[rootstudy ~]# echo password | passwd --stdin pro3# 2. 开始建立此项目的开发目录
[rootstudy ~]# mkdir /srv/projecta
[rootstudy ~]# chgrp projecta /srv/projecta
[rootstudy ~]# chmod 2770 /srv/projecta
[rootstudy ~]# ll -d /srv/projecta
drwxrws---. 2 root projecta 6 Jul 20 23:32 /srv/projecta但接下来有个困扰的问题发生了假如任务一的 myuser1 是 projecta 这个项目的助理他需要这个项目的内容 但是他『不可以修改』项目目录内的任何数据那该如何是好你或许可以这样做
将 myuser1 加入 projecta 这个群组的支持但是这样会让 myuser1 具有完整的 /srv/projecta 的权限myuser1 是可以删除该目录下的任何数据的这样是有问题的将 /srv/projecta 的权限改为 2775 让 myuser1 可以进入查阅数据。但此时会发生所有其他人均可进入该目录查阅的困扰 这也不是我们要的环境。
真要命传统的 Linux 权限无法针对某个个人设定专属的权限吗其实是可以啦接下来我们就来谈谈这个功能吧
23.5 使用外部身份认证系统
有时候除了本机的账号之外我们可能还会使用到其他外部的身份验证服务器所提供的验证身份的功能举例来说 windows 底下有个很有名的身份验证系统称为 Active Directory (AD)的东西还有 Linux 为了提供不同主机使用同一组账号密码 也会使用到LDAP, NIS等服务器提供的身份验证等等
如果你的 Linux 主机要使用到上面提到的这些外部身份验证系统时可能就得要额外的设定一些数据了 为了简化用户的操作流程所以 CentOS 提供一只名为authconfig-tui的指令给我们参考这个指令的执行结果如下 你可以在该画面中使用 [tab] 按钮在各个项目中间切换不过因为我们没有适用的服务器可以测试因此这里仅是提供一个参考的依据 未来如果谈到服务器章节时你要如果谈到服务器章节时服器有印象处理外部身份验证的方式可以透过 authconfig-tui 就好了 上图中最多可供操作的大概仅有支持 MD5 这个早期的密码格式就是了此外不要随便将已经启用的项目 (上头有星号 的项目) 取消喔 可能某些账号会失效…
该系列目录 -- 【BASH】回顾与知识点梳理目录