首页 > 代码库 > 鸟哥的Linux私房菜7-------14章 Linux帐号管理与ACL权限设置

鸟哥的Linux私房菜7-------14章 Linux帐号管理与ACL权限设置

1. 用户表示符UID与GID
     /etc/passwd文件结构: 有几行就代表有几个帐号在你的系统里
每一行用:分割,一共7个字段。
     1.帐号名称
     2.密码:早起unix用,现在把密码数据放在/etc/shadow文件中了,这里用x表示
     3.UID:0代表系统管理员。
               1-499:系统帐号
               500-65535:一般用户用
     4.GID:     /etc/group有关
     5.用户信息说明,使用finger时,这个字段能提供很多信息。
     6.主文件夹
     7.Shell:用户登录系统后取得的一个shell。

     /etc/shadow文件结构:共9个字段
     1.帐号名称
     2.密码
     3.最近改动密码日期:以1970/1/1开始累加的日期。
          echo $((date --date="2008/09/04"+%s)/86400+1)     查看某个日期累加的天数
     4.不可改动天数:几天内不准再次修改
     5.需要修改天数:设置密码后多少天内需要修改
     6.密码修改期限前警告天数
     7.密码过期后宽限时间;(密码失效期)
     8.帐号失效日期
     9.保留
          root忘记密码:重启进入用户维护模式,系统主动赋予root权限的bash接口;
                              以Live CD开机后挂载根目录去修改/etc/shadow,将里面的密码清空;
2.有效与初始用户组groups,newgrp
     /etc/group文件结构
四个字段
     1.用户组名称
     2.用户组密码:常常给用户组管理员使用,同样密码已经移至/etc/gshadow中,目前用x代替
     3.GID
     4.该用户组支持的用户,如果你想将某个用户加入到该用户组,就在该字段加入:usr
     
     每个用户在/etc/passwd中第四列的GID就是初始用户组。
     当用户支持多用户组时,创建文件时属于那个用户组要看有效用户组(effective group)
     groups:用groups指令查看有效用户组,第一个输出的即为有效用户组。
     newgrp:使用newgrp指令切换有效用户组,切换的用户组必须是你支持的用户组。
               使用newgrp更改当前有效用户组,是以另外一个shell来提供这个功能。如果要想回到原来的环境下,可使用exit回到原本的shell。

     /etc/gshadow文件结构
     四个字段:
          1.用户组名
          2.密码列,开头为!表示无合法密码,所以无用户组管理员。
          3.用户组管理员帐号
          4.用户组的所属帐号:与/etc/group中相同

3.新增与删除用户:useradd 
     useradd:
     useradd [-u uid] [-g initgrp] [-G 次要grp] [-mM] [-c info] [-d homedir] [-s shell] username
          -e:后面接日期,格式YYYY-MM-DD,可写入shadow第八项,帐号失效日期
          -f:后面接shadow第7项,指定密码是否会失效,0为立刻失效,-1为永不失效
     用户创建修改文件:
          /etc/passwd:
          /etc/shadow:
          /etc/group:
          /home下创建一个与帐号相同的目录做主文件夹。
     若用户在创建用户时指定用户组,则不在/etc/group中主动创建与帐号同名的用户组。
     useradd参考文件:
               useradd -D:列出useradd 默认值、
     这个默认值数据来自:/etc/default/useradd.
          GROUP=100:新建帐号的初始化用户组使用GID为100
          私有用户机制:系统会创建一个与帐号一样的用户组作为初始用户组。
          公共用户机制:就以GID=100作为新建帐号的初始用户组。
          HOME=/home:用户主文件夹基准目录。
          INACTIVE=-1:密码国企后是否失效的设置值:shadow第7个字段
          EXPIRE=:          帐号失效日期:shadow第8个字段
          SHELL=/bin/bash:
          SKEL=/etc/skel:     用户主文件夹参考基准目录:主文件夹中的各项数据都是由/etc/skel复制过去的,包括.bashrc
          CREATE_MAIL_SPOLL=yes:创建用户的mailbox
     另外,UID/GID还有密码参数参考:/etc/login.defs
          mailbox所在目录;
          shadow密码的4,5,6字段内容     
          UDI/GID指定数值;
          用户主文件夹设置值;
          用户删除与密码设置值;
     使用useradd创建用户时会参考:/etc/default/useradd   /etc/login.defs  /etc/skel*

4.passwd命令创建密码:默认创建用户后,处于封锁状态,无法登录
          echo “afdfgdgf” |passwd --stdin vbird1
          passwd [-l] [-u] [--stdin] [-S] [-n 日数] [-x 日数] [-w 日数] [-i 日期] 帐号  #root功能
               -l:Lock的意思,将在shadow第二列前加!,是密码失效。
               -u:与lock相反,Unlock意思
               -S:列出密码相关参数,及shadow中大多数内容
               -n:接天数,第4字段,多久不可修改天数
               -x:第5段,多久必须修改天数
               -w:第6段,密码过期前警告天数
               -i:第7段,密码失效日期
          passwd 不跟帐号是修改自己密码,跟帐号是修改他人密码。
5.chage 显示详细的密码参数。
     chage [-ldEimMW] 帐号名
          -l:列出帐号详细的密码参数
          -d:修改shadow第三字段,最近更改密码,设置0,则强制用户更改密码
          -E:修改shadow第八字段,账号失效日期,设置0则该帐号不能用
          -I:修改shadow第七字段,密码失效日期
          -m:修改shadow第四字段,密码最短保留天数
          -M:修改shadow第五字段,密码多久需要修改
          -W:修改shadow第六字段,密码警告日期
 usermod:对帐号信息进行微调
     usermod [-cdegGlsuLU] username
          -c:/etc/passwd第五列说明字段
          -d:/etc/passwd第六列主文件夹
          -e:/etc/shadow第八字段,帐号失效日期
          -f:shadow第七字段,密码失效日期
          -g:passwd第四字段,即GID
          -G:     group文件,次要用户组
          -l:     修改帐号名称,passwd第一列
          -s:     后接shell实际文件
          -u:     修改passwd第三列,UID
          -L:     冻结密码 在shadow密码列加!
          -U:     去掉密码前的!
 userdel:删除密码
     删除的用户数据有:/etc/passwd,/etc/shadow
                              /etc/group,/etc/gshadow
                              /home/username,/var/spool/main/username
     userdel [-r] username
          -r:连同用户主文件夹一同删除。    
6.用户功能
     finger:查看用户信息,大部分都是/etc/passwd文件的信息
          finger [-s] username
               -s:仅列出用户帐号,全名,终端机代号和登录时间
               -m:列出与后面接的帐号相同者,   
     chfn: 有点change finger的意思
          -f:     接完整大名
          -o:     办公室房间号
          -p:办公室电话
          -h:家里电话   
     chsh:change shell缩写。
          -l:列出系统可用的shell
          -s:修改自己的shell
          chfn、chsh的权限时SUID,这样普通用户都能用它。
     id:查询某人或自己相关的UID/GID 信息
          id username
7.新增与删除用户
     groupadd:
          groupadd [-g gid] [-r] 用户组名
               -g:     
               -r:新建系统用户组,与/etc/login.defs内的GID_MIN有关
          添加文件数据:/etc/group  /etc/gshadow
     groupmod:与usermod类似
          -g:     修改GID数字(不要随意修改GID)
          -n:修改既有组名
     groupdel:删除用户组
     gpasswd:用户组管理员功能
          gpasswd groupname
          gpasswd [-A username,...] [-M user2] groupname
          gpasswd [-rR] groupname
          -A:将groupname的控制权交给-A后的用户
          -M:将某些帐号加入改组
          -r:将groupname的密码删除
          -R:将groupname的密码栏失效
          gpasswd [-ad] user groupname
               -a:将某位用户加入到groupname中
               -d:将某位用户从groupname中删除
     chgrp:修改组
8.主机的具体权限规定:ACL使用(access control list)
     acl与文件系统支持有关,绝大多数的文件系统都支持acl。
     dumpe2fs -h /dev/hda2查看superblock 中是否开启acl
     mount -o remount,acl /          开启acl
     长期修改支持acl,修改/etc/fstab文件,加入
          LABEL=/1    /   ext3   defaults,acl
     
     acl设置技巧:getfacl,setfacl
     setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名
          -m:设置后续acl参数,不能与-x合用
          -x:删除后续acl参数,不能与-m合用
          -b:删除所有的acl设置参数
          -k:删除默认的acl参数
          -R:递归设置acl
          -d:设置默认acl参数,只对目录有效,该目录下建立的数据都引用此默认值!

          setfacl -m u:vbird1:rx acl_test1  #acl_test1文件加入vbird1用rx权限
          setfacl -m u::rwx acl_test1     #不加用户代表该文件的所有者
          setfacl -m g::rwx acl_test1     #不加组名,表示该文件所在用户组

9.用户身份切换  su
     su -     读取以loginshell
     su     不加-切换,读取的变量设置为non-login shell的方式,
     
     sudo [-b]  [-u 新用户帐号]
          -b:后续的命令让系统自行执行,不与目前的shell产生影响
          -u:后面接欲切换的用户,若无此项,代表root身份
     当执行sudo时,系统判断/etc/sudoers文件中查找该用户是否有执行sudo的权限。
     若用户具有sudo权限,让用户输入自己的密码来确认;
     若密码成功,则执行sudo后的命令
     
     修改/etc/sudoers文件,用visudo命令
     sudoers内容有四个字段
     root     ALL=(ALL)      ALL
     1.用户帐号:用来指明那些用户可以执行sudo命令
     2.登陆者主机,默认值root代表任何一台网络主机
     3.可切换身份,
     4.可执行命令
     %groupname    ALL=(ALL)     ALL     #加%表示这个用户组的用户可以执行sudo
     %groupname     ALL=(ALL)     NOPASSWD:ALL     #免密码执行
     myuser1      ALL=(root)      /usr/bin/passwd     #务必使用绝对路径
     myuser1      ALL=(root)      !/usr/bin/passwd,!/usr/bin/passwd root,!/usr/bin/passwd [[:alpha:]*]     #务必使用绝对路径
     
通过别名visudo:
     User_Alias  ADMPW=pro1,pro2,pro3
     Cmnd_Alias ADMPWCOM=!/usr/bin/passwd,!/usr/bin/passwd root,!/usr/bin/passwd [[:alpha:]*]
     ADMPW ALL=(ALL) ADMPWCOM

     Cmnd_Alias(命令别名)
     Host_Alias(主机别名)

10.用户特殊shell与PAM模块
          pam模块调用流程:
               1.用户执行passwd时,并输入密码
               2.passwd调用PAM模块进行验证;
               3.PAM模块根据/etc/pam.d/中寻找与passwd同名的配置文件
               4.根据/etc/pam.d/passwd内的设置,引用相关的PAM模块进行验证分析。
               5.将验证的结果(成功失败或者其他)回传给passwd这个程序。
               6.passwd根据PAM的回传信息进行下一操作。(参考P437)
11.用户的信息传递     
     查询用户:w,who,last,lastlog
     用户对谈:write,mesg,wall
          write 用户帐号  [用户所在终端端口]
          write root tty2
               infomation   crtl-d结束输入
          当不想随时有消息立即打断,可执行mesg n,则不会接收任何消息,除了root用户的。
          用mesg查看当前的状态,
          wall 进行广播
12.用户邮箱mail
13.手动新增用户
     pwck:检查/etc/passwd帐号信息与实际主文件夹存在情况,以及/etc/passwd与/etc/shadow信息是否一致
     pwconv:主要将/etc/passwd内的帐号与密码移动到/etc/shadow中。这是由于早期的Unix中没有shadow设计的。
     pwunconv:将/etc/shadow中的密码歇会到/etc/passwd中,并删除/etc/shadow
     chpasswd:读入未加密的密码,并将加密后的密码写入到shadow中。常用于批量创建用户。

鸟哥的Linux私房菜7-------14章 Linux帐号管理与ACL权限设置