帐号管理

1.帐号和用户组

/etc/passwd, 文档结构:

 

root:x:0:0:root:/root:/bin/bash

 

其中第三个栏位是UID,是用户的真正标识符,用户名只是和它对应以后才能被系统识别。0号是管理员,1-499是系统帐号,500以上是普通帐号

第五个栏位表示账户说明。

/etc/shadow,文档结构:

 

root:$1$/30QpE5e$y9N/D0bh6rAACBEz.hqo00:14126:0:99999:7::: 

 

一共9个栏位,

第二个是密码,要是前面有!!(两个),第三位是最近更改密码时间(从1970/1/1算起的天数),4是密码不可被更动的天数,5是密码需要重新变更的天数,6是密码需要变更期限前的警告天数,7是密码过期后的帐号宽限时间,8是帐号失效日期,9保留

/etc/group,文档结构:

 

root:x:0:root

 

2.有效群组(effective group)与初始群组(initial group)

passwd里的GID就是初始群组,用户一登录就立即和该群组关联,建立的文件就是该群组下的。

但是一个用户可能属于多个群组,所以就有有效群组的概念。groups命令可以查看当前用户所属的所有的用户组。

newgrp 用户组   可以切换有效用户组,但是切换了一个 shell 

/etc/gshadow,

 

root:::root

 

有四栏,第二栏表示群组密码,第三栏是群组管理员的帐号

3.帐号管理

useradd

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

CentOS有很多预设值,

 

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

 

所以很多时候直接useradd 用户名 就可以

 

useradd -D 可以查看预设值,不过里面的GROUP=100在centos无效,因为它使用的是私有群组机制,而不是共有群机制。

 

除了这些基本的帐号设定值之外, UID/GID 还有密码参数又是在哪里参考的呢?那就得要看一下 /etc/login.defs ,内容类似:

  
  
  
  
  1. MAIL_DIR        /var/spool/mail <==使用者预设邮件信箱放置目录 
  2.  
  3. PASS_MAX_DAYS   99999   <==/etc/shadow 内的第 5 栏,多久需变更密码日数 
  4. PASS_MIN_DAYS   0   <==/etc/shadow 内的第 4 栏,多久不可重新设定密码日数 
  5. PASS_MIN_LEN    5   <==密码最短的字元长度,已被 pam 模组取代,失去效用! 
  6. PASS_WARN_AGE   7   <==/etc/shadow 内的第 6 栏,过期前会警告的日数 
  7.  
  8. UID_MIN         500 <==使用者最小的 UID,意即小于 500 的 UID 为系统保留 
  9. UID_MAX       60000 <==使用者能够用的最大 UID 
  10. GID_MIN         500 <==使用者自订群组的最小 GID,小于 500 为系统保留 
  11. GID_MAX       60000 <==使用者自订群组的最大 GID 
  12.  
  13. CREATE_HOME     yes <==在不加 -M 及 -m 时,是否主动建立使用者家目录? 
  14. UMASK           077     <==使用者家目录建立的 umask ,因此权限会是 700 
  15. USERGROUPS_ENAB yes     <==使用 userdel 删除时,是否会删除初始群组 
  16. MD5_CRYPT_ENAB yes      <==密码是否经过 MD5 的加密机制处理 

passwd

使用 useradd 建立了帐号之后,在预设的情况下,该帐号是暂时被封锁的, 也就是说,该帐号是无法登入的, /etc/shadow 内的第二个栏位是!!

  
  
  
  
  1. [root@www ~]# passwd [--stdin]  <==所有人均可使用来改自己的密码 
  2. [root@www ~]# passwd [-l] [-u] [--stdin] [-S] \ 
  3. >  [-n 日数] [-x 日数] [-w 日数] [-i 日期] 帐号 <==root 功能 
  4. 选项与参数: 
  5. --stdin :可以透过来自前一个管线的资料,作为密码输入,对 shell script 有帮助! 
  6. -l  :是 Lock 的意思,会将 /etc/shadow 第二栏最前面加上 ! 使密码失效; 
  7. -u  :与 -l 相对,是 Unlock 的意思! 
  8. -S  :列出密码相关参数,亦即 shadow 档案内的大部分资讯。 
  9. -n  :后面接天数,shadow 的第 4 栏位,多久不可修改密码天数 
  10. -x  :后面接天数,shadow 的第 5 栏位,多久内必须要更动密码 
  11. -w  :后面接天数,shadow 的第 6 栏位,密码过期前的警告天数 
  12. -i  :后面接‘日期’,shadow 的第 7 栏位,密码失效日期 

change

可以显示更加详细的密码参数,也可以修改参数

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

usermod

与useradd很相似,可以修改用户参数

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

userdel

删除用户的相关资料,包括:

 

  • 使用者帐号/密码相关参数:/etc/passwd, /etc/shadow
  • 使用者群组相关参数:/etc/group, /etc/gshadow
  • 使用者个人档案资料: /home/username, /var/spool/mail/username..

 

  
  
  
  
  1. [root@www ~]# userdel [-r] username 
  2. 选项与参数: 
  3. -r  :连同使用者的家目录也一起删除 

使用 userdel 的时机通常是‘你真的确定不要让该用户在主机上面使用任何资料了!‘

如果想要完整的将某个帐号完整的移除,最好可以在下达 userdel -r username 之前, 先以‘ find / -user username ’查出整个系统内属于 username 的档案,然后再加以删除

finger

这个命令可以查看用户的信息

  
  
  
  
  1. [root@www ~]# finger [-s] username 
  2. 选项与参数: 
  3. -s  :仅列出使用者的帐号、全名、终端机代号与登入时间等等; 
  4. -m  :列出与后面接的帐号相同者,而不是利用部分比对 (包括全名部分) 

chsh

change shell

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

id

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

 

[root@www ~]# id [username]

 

4.新增与移除群组

groupadd

  
  
  
  
  1. [root@www ~]# groupadd [-g gid] [-r] 群组名称 
  2. 选项与参数: 
  3. -g  :后面接某个特定的 GID ,用来直接给予某个 GID ~ 
  4. -r  :建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。 

groupmod

  
  
  
  
  1. [root@www ~]# groupmod [-g gid] [-n group_name] 群组名 
  2. 选项与参数: 
  3. -g  :修改既有的 GID 数字; 
  4. -n  :修改既有的群组名称 

groupdel

  
  
  
  
  1. groupdel [groupname] 

必须要确认 /etc/passwd 内的帐号没有任何人使用该群组作为 initial group

gpasswd

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

5.主机的细部权限规划:ACL 的使用

ACL说白了就是对文件和文件夹权限的细粒度管理,主要针对:

 

  • 使用者 (user):可以针对使用者来设定权限;
  • 群组 (group):针对群组为对象来设定其权限;
  • 预设属性 (mask):还可以针对在该目录下在建立新档案/目录时,规范新资料的预设权限;

setfacl

  
  
  
  
  1. [root@www ~]# setfacl [-bkRd] [{-m|-x} acl参数] 目标档名 
  2. 选项与参数: 
  3. -m :设定后续的 acl 参数给档案使用,不可与 -x 合用; 
  4. -x :删除后续的 acl 参数,不可与 -m 合用; 
  5. -b :移除所有的 ACL 设定参数; 
  6. -k :移除预设的 ACL 参数,关于所谓的‘预设’参数于后续范例中介绍; 
  7. -R :递回设定 acl ,亦即包括次目录都会被设定起来; 
  8. -d :设定‘预设 acl 参数’的意思!只对目录有效,在该目录新建的资料会引用此预设值 

用法:

  
  
  
  
  1. # 1. 针对特定使用者的方式: 
  2. # 设定规范:‘ u:[使用者帐号列表]:[rwx] ’,例如针对 vbird1 的权限规范 rx : 
  3. [root@www ~]# setfacl -m u:vbird1:rx acl_test1 
  4. # 2. 针对特定群组的方式: 
  5. # 设定规范:‘ g:[群组列表]:[rwx] ’,例如针对 mygroup1 的权限规范 rx : 
  6. [root@www ~]# setfacl -m g:mygroup1:rx acl_test1 
  7. # 3. 针对有效权限 mask 的设定方式: 
  8. # 设定规范:‘ m:[rwx] ’,例如针对刚刚的档案规范为仅有 r : 
  9. [root@www ~]# setfacl -m m:r acl_test1 
  10. # 4. 针对预设权限的设定方式:
    # 设定规范:‘ d:[ug]:使用者列表:[rwx] ’ 
    # 让 myuser1 在 /srv/projecta 底下一直具有 rx 的预设权限!
    [root@www ~]# setfacl -m d:u:myuser1:rx /srv/projecta

 

 

ll acl_test1
-rw-r-xr--+ 1 root root 0 Feb 27 13:28 acl_test1 

查看文件属性可以看到后面多了一个+号

 getfacl

  
  
  
  
  1. [root@www ~]# getfacl filename 
  2. 选项与参数: 
  3. getfacl 的选项几乎与 setfacl 相同!所以鸟哥这里就免去了选项的说明啊! 

有一个mask属性,使用者或群组所设定的权限必须要存在于 mask 的权限设定范围内才会生效,此即‘有效权限 (effective permission)’,如用法#3

 

6.使用者身份切换

两种方式:

  • 以‘ su - ’直接将身份变成 root 即可,但是这个指令却需要 root 的密码,也就是说,如果你要以 su 变成 root 的话,你的一般使用者就必须要有 root 的密码才行;
     
  • 以‘ sudo 指令 ’执行 root 的指令串,由于 sudo 需要事先设定妥当,且 sudo 需要输入使用者自己的密码, 因此多人共管同一部主机时, sudo 要比 su 来的好喔!至少 root 密码不会流出去!

 su

  
  
  
  
  1. [root@www ~]# su [-lm] [-c 指令] [username] 
  2. 选项与参数: 
  3. -   :单纯使用 - 如‘ su - ’代表使用 login-shell 的变数档案读取方式来登入系统; 
  4.       若使用者名称没有加上去,则代表切换为 root 的身份。 
  5. -l  :与 - 类似,但后面需要加欲切换的使用者帐号!也是 login-shell 的方式。 
  6. -m  :-m 与 -p 是一样的,表示‘使用目前的环境设定,而不读取新使用者的设定档’ 
  7. -c  :仅进行一次指令,所以 -c 后面可以加上指令喔! 

sudo

  
  
  
  
  1. [root@www ~]# sudo [-b] [-u 新使用者帐号] 
  2. 选项与参数: 
  3. -b  :将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响 
  4. -u  :后面可以接欲切换的使用者,若无此项则代表切换身份为 root 。 

我们无法使用‘ su - apache ’去切换系统帐号 (因为系统帐号的 shell 是 /sbin/nologin), 而sudo可以以apache的名义做事

 

 sudo 的执行是这样的流程:

  1. 当使用者执行 sudo 时,系统于 /etc/sudoers 档案中搜寻该使用者是否有执行 sudo 的权限;
  2. 若使用者具有可执行 sudo 的权限后,便让使用者‘输入使用者自己的密码’来确认;
  3. 若密码输入成功,便开始进行 sudo 后续接的指令(但 root 执行 sudo 时,不需要输入密码);
  4. 若欲切换的身份与执行者身份相同,那也不需要输入密码。

 

除了 root 之外的其他帐号,若想要使用 sudo 执行属于 root 的权限指令,则 root 需要先使用 visudo 去修改 /etc/sudoers ,让该帐号能够使用全部或部分的 root 指令功能,

设置:

使用者帐号  登入者的来源主机名称=(可切换的身份)  可下达的指令 

username(%用户组) ALL=(ALL) ALL <==这是预设值 

 如果设置为ALL,那就没有限制,如果要有限制,需要自己加一些规则

可下达指令栏位必须要填写绝对路径

比如:

 

myuser1	ALL=(root)  !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, \                     !/usr/bin/passwd root

 

如果有很多用户和规则,一条一条添加会很麻烦,这时可以使用别名:

 

[root@www ~]# visudo  <==注意是 root 身份
User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2 Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, \                       !/usr/bin/passwd root ADMPW   ALL=(root)  ADMPWCOM

 

注意红字必须都是大写,Host_Alias也一样

 

 7.PAM模块

 

 

 

 

你可能感兴趣的:(权限,职场,休闲,账户)