鸟哥的Linux私房菜——第十七章:Linux 账号与身份管理

视频链接:http://www.bilibili.com/video/av10669732/

1. Linux 的账号与群组
1.1 使用者识别: UID 与 GID
1.2 使用者账号:/etc/passwd, /etc/shadow                               (passwd里面存的是账号的相关信息,shadow里面存放的是账号的密码信息)
1.3 关于群组: 有效与初始群组、 groups, newgrp        (groups群组信息,newgrp是切换有效群组的) 
2. 账号管理:
2.1 新增与移除使用者: useradd, 相关设定档, passwd, usermod, userdel 
2.2 使用者功能: chsh, chfn, finger, id                                      (chsh是修改自己的shell的,chfn是修改自己的一些信息的)
2.3 新增与移除群组: groupadd, groupmod, groupdel, gpasswd, newgrp
2.4 密码管理: passwd
3. 使用者身份切换:
3.1 su
3.2 sudo, visudo (/etc/sudoers)
4. 使用者的特殊 shell 与 PAM 模块
4.1 特殊的 shell , /sbin/nologin
4.2 PAM 模块: /etc/nologin, /etc/securetty, /etc/security/*        (PAM模块是验证登录的,环境相关的设置在/etc/security/* 内)
5. Linux 系统上使用者的对谈与 mail 的使用:
5.1 查询使用者: w, who, last, lastlog     (w who使用者的相关数据,last可以看本月的记录,lastlog可以看每个账号的最近登录时间)
5.2 使用者对谈: talk, mesg, wall             (和其他登陆者聊天...)
5.3 使用者邮件信箱: mail
6. 手动新增使用者:            (不建议手动新增使用者,因为涉及到许多权限的问题,还是)
6.1 一些检查工具: pwck, pwconv, pwunconv, chpasswd     (pwck检查passwd和shadow里面的信息是否一致。pwconv将passwd里面的密码转移到shadow里面。pwunconv将shadow里面的密码再写回passwd并删除shadow。chpasswd将passwd里面未加密的密码加密后写入shadow)
6.2 特殊账号,如纯数字账号的建立:
6.3 不开放终端机登入的账号 (ex>mail acccount)
6.4 一个大量建置账号的范例:

/etc/passwd的构造  有7个,以:进行分隔

1.账号名称  对应UID

2.密码  早期是在这里,后来为了安全转移到shadow里面,所以这里都是x

3.UID  id范围:

id范围 该id使用者的特性
0 系统管理员
1~499 留给系统的
500~65535 给一般用户的

4.GID   和/etc/group有关

5.使用者信息说明栏   基本没啥用

6.家目录

7.shell   通常用户的shell都是bash   有一种特别的shell叫/sbin/nologin让账号无法登陆,也可以制作纯Pop邮件账号者的数据

/etc/shadow  放密码的地方  9个字段

1.账号名称

2.密码   经过加密编译的,如果第一个字符是 * 或者 ! 表示这个账号无法登陆,知道怎么玩了吧~嘻嘻^_^

3.最近改动密码的日期    以1970年1月1日作为1,1971年1月1日就是366...你自己的数字算去吧...无聊...

4.密码不可被更改的天数    如果是0就是随时可以更改,如果是20就是20天后才可以再次更改

5.密码需要重新变更的天数    你一直不改密码也不安全,所以设定一个时间让你强制性的更改密码

6.密码需要变更期限前的警告期限   如果是7就是7天前提醒你快要变更密码啦

7.密码过期的恕限时间    密码失效后,n天内你还能登陆,如果还延长,sorry...

8.账号失效日期        也是1970....为1

9. 保留...看看以后有没有啥新的功能...

如果root密码忘记了或者被入侵了
不需要重装系统,可以进去单人维护模式进入shadow清除root的密码

/etc/group 分为4栏
1.群组名称
2.群组密码 密码同样是X 密码存在了/etc/gshadow里面
3.GID 群组的id
4.加入这个群组的账号名称 以,进行分隔

每个用户账号都可以加入多个群组,所以群组分为有效群组和默认群组
passwd里面可以看到的GID就是默认群组,那我创建文档的时候这个文档是属于哪一个群组呢?
这就用到了有效群组,在当前账号下输入groups就可以看到我支持的所有群组,第一个显示的就是有效群组
那么怎么更换有效群组呢?newgrp 群组名 然后你在groups就会发现有效群组变了,原理是一个新的shell
要想切换群组,如果账号在群组里可以直接切换。如果不在群组里,那么群组必须满足两个条件
1.这个群组在/etc/gshadow里面的密码必须是正常的(不以!开头)
2.root或群组管理员必须加入这个群组

/etc/gshadow 4个栏目
1.群组名称
2.密码栏 以!开头表示无法接入
3.群组管理员的账号
4.该群组包含的账号(要和/etc/group的内容相同)

新增用户 useradd

参数:
-u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个账号;
-g :后面接的那个群组名称就是我们上面提到的 initial group 啦~
该 group ID (GID) 会被放置到 /etc/passwd 的第四个字段内。
-G :后面接的群组名称则是这个账号还可以支持的群组。
这个参数会修改 /etc/group 内的相关资料喔!
-M :强制!不要建立使用者家目录
-m :强制!要建立使用者家目录!
-c :这个就是 /etc/passwd 的第五栏的说明内容啦~可以随便我们设定的啦~
-d :指定某个目录成为家目录,而不要使用默认值;
-r :建立一个系统的账号,这个账号的 UID 会有限制 (/etc/login.defs)
-s :后面接一个 shell ,预设是 /bin/bash 的啦~

useradd jim

passwd   给你的账号添加密码  root用户直接改任何用户 普通用户还要输入旧密码而且只能改自己的

passwd jim

usermod   修改账号的信息  useradd不合适想修改,当然可以去shadow和passwd这俩文件里面,也可以使用usermod命令

参数:
-c :后面接账号的说明,即 /etc/passwd 第五栏的说明栏,可以加入一些账号的说明。
-d :后面接账号的家目录,即修改 /etc/passwd 的第六栏;
-e :后面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 内的第八个字段数据啦!
-g :后面接 group name,修改 /etc/passwd 的第四个字段,亦即是 GID 的字段!
-G :后面接 group name,修改这个使用者能够支持的群组,修改的是 /etc/group 啰~
-l :后面接账号名称。亦即是修改账号名称, /etc/passwd 的第一栏!
-s :后面接 Shell 的实际档案,例如 /bin/bash 或 /bin/csh 等等。
-u :后面接 UID 数字啦!即 /etc/passwd 第三栏的资料;
-L :暂时将使用者的密码冻结,让他无法登入。其实仅改 /etc/shadow 的密码栏。
-U :将 /etc/shadow 密码栏的 ! 拿掉,解冻啦!

userdel  删除账号

-r  连同使用者的家目录一起删除

userdel -r jim

使用者功能  chfn  chsh

useradd/usermod/userdel 这三个命令是管理员才能用的,那么普通用户呢就使用chfn和chsh吧

chsh   修改自己使用的shell 还有就是看自己的shell

-s  修改自己的shell

chfn 更改自己的相关信息的

-f 后面接完整的大名

-o 办公室的房间号码

-p 办公室的房间号码

-h 家里的电话号码

直接打个chfn 然后回车 按照提示去设置信息  目前还不知道怎么取消......

finger 查看你账号的信息,也就是查看chfn设定的那些东东

-s 使用长串数据输出格式

finger -s jim

id   可以查询某人或者自己的相关UID/GID的信息

自己的:id

别人的:id  小明

groupadd   新建群

-g  后面接GID,直接给予某个GID~

-r  建立系统群组

groupadd jim     #新建一个组
sudo grep jim /etc/group /etc/gshadow #查看这两个文档

groupmod   和usermod差不多,是修改群组的相关信息的

-g  修改GID

-n  修改群组名称

#将 jim 这个群组的名字改成Vae GID改成514

groupmod -g  -n Vae jim

然后你可以去grep一下group和gshadow文档看一下变化。提示!不要随意的更变GID,容易造成系统资源的错乱

groupdel   删除群组

groupdel  jim    #我删除了jim这个群组

这里需要注意一个地方,如果群组里面有用户的话,你是删除不了的,否则用户就找不到自己的GID那不是一脸懵逼...

这时的解决方法是

1.修改用户的GID 给他换到其他组

2.删除这个用户...      吃惊.jpg

gpasswd   给群组设定密码  还可以给群组设定团长....这个不讲了.....

su

参数:
- :如果执行 su - 时,表示该使用者想要变换身份成为 root ,且使用 root 的
环境设定参数档,如 /root/.bash_profile 等等。
-l :后面可以接使用者,例如 su -l dmtsai ,这个 -l 好处是,可使用欲变换身份者
他的所有相关环境设定档。
-m :-m 与 -p 是一样的,表示『使用目前的环境设定,而不重新读取新使用者的设定档。』
-c :仅进行一次指令,所以 -c 后面可以加上指令喔!

使用su的时候最好加上 -  就是因为环境的设定参数档,环境变量PATH也是一样的

su -     #这是切换到root用户

su -l jim    #这是切换到jim用户  其实没写用户的时候预设的就是root

sudo

su很简单是吧,但是有一个致命的缺点就是root的密码谁都知道...如此不安全的事情我选择狗带...

但是sudo可以帮助我们解决这个问题,嘻嘻,我不用狗带了~~

•当使用者执行 sudo 时,系统会主动的去寻找 /etc/sudoers 档案,判断该使用者是否有执行
sudo 的权限;
• 若使用者具有可执行 sudo 的权限后,便让使用者『输入使用者自己的密码』来确认;
• 若密码输入成功,便开始进行 sudo 后续接的指令;
• 不过, root 执行 sudo 时,不需要输入密码;
• 若欲切换的身份与执行者身份相同,那也不需要输入密码。

-u   后面可以接使用者账号名称,或者是 UID。例如 UID 是 500 的身份,可以: -u #500 来作为切换到 UID 为 500 的那位使用者

#创建一个test文件夹
sudo mkdir test #jim要把身份切换成tom来进行touch
sudo -u tom touch Vae

注意咯,上面我们说过要设定/etc/sudoers之后才可以使用sudo  不过我们最好不要用vim编译器,还是用visudo比较好(visudo需要root权限)

使用者的特殊shell与PAM模块

我想建立一个账号,只给他mail sever的权限

我们在/etc/shells和/etc/passwd里面可以看到,有一种shell的名字是/sbin/nologin  这种shell也就是单纯的接受信件而已,不能登录主机的

PAM模块  /etc/nologin   /etc/securetty   这两个

talk mesg wall  和其他登陆者聊天

talk这个需要网络服务所以暂时不讲,我们可以write其他用户,这个用户的mesg必须是y 如果是n的话你是无法发给他的,按下mesg就可以看自己的状态

wall是群发的,只要在线的用户的mesg是y 那么都可以收到你发的消息

#write的格式
write tom
hi tom i am jj #wall的格式
wall "lalala"

mail 使用者邮件信箱

wall和write前提是对方需要在线是吧,我们可不可以在对方不在线的时候也给他发东西呢?就要用到mail啦

上一篇:Python函数——闭包延迟绑定


下一篇:第十一次作业 - Alpha 事后诸葛亮(团队)