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
- [root@www ~]# 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有很多预设值,
所以很多时候直接useradd 用户名 就可以
useradd -D 可以查看预设值,不过里面的GROUP=100在centos无效,因为它使用的是私有群组机制,而不是共有群机制。
除了这些基本的帐号设定值之外, UID/GID 还有密码参数又是在哪里参考的呢?那就得要看一下 /etc/login.defs ,内容类似:
- 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 500 <==使用者最小的 UID,意即小于 500 的 UID 为系统保留
- UID_MAX 60000 <==使用者能够用的最大 UID
- GID_MIN 500 <==使用者自订群组的最小 GID,小于 500 为系统保留
- GID_MAX 60000 <==使用者自订群组的最大 GID
- CREATE_HOME yes <==在不加 -M 及 -m 时,是否主动建立使用者家目录?
- UMASK 077 <==使用者家目录建立的 umask ,因此权限会是 700
- USERGROUPS_ENAB yes <==使用 userdel 删除时,是否会删除初始群组
- MD5_CRYPT_ENAB yes <==密码是否经过 MD5 的加密机制处理
passwd
使用 useradd 建立了帐号之后,在预设的情况下,该帐号是暂时被封锁的, 也就是说,该帐号是无法登入的, /etc/shadow 内的第二个栏位是!!
- [root@www ~]# passwd [--stdin] <==所有人均可使用来改自己的密码
- [root@www ~]# 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 栏位,密码失效日期
change
可以显示更加详细的密码参数,也可以修改参数
- [root@www ~]# chage [-ldEImMW] 帐号名
- 选项与参数:
- -l :列出该帐号的详细密码参数;
- -d :后面接日期,修改 shadow 第三栏位(最近一次更改密码的日期),格式 YYYY-MM-DD
- -E :后面接日期,修改 shadow 第八栏位(帐号失效日),格式 YYYY-MM-DD
- -I :后面接天数,修改 shadow 第七栏位(密码失效日期)
- -m :后面接天数,修改 shadow 第四栏位(密码最短保留天数)
- -M :后面接天数,修改 shadow 第五栏位(密码多久需要进行变更)
- -W :后面接天数,修改 shadow 第六栏位(密码过期前警告日期)
usermod
与useradd很相似,可以修改用户参数
- [root@www ~]# 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 密码栏的 ! 拿掉,解冻啦!
userdel
删除用户的相关资料,包括:
- [root@www ~]# userdel [-r] username
- 选项与参数:
- -r :连同使用者的家目录也一起删除
使用 userdel 的时机通常是‘你真的确定不要让该用户在主机上面使用任何资料了!‘
如果想要完整的将某个帐号完整的移除,最好可以在下达 userdel -r username 之前, 先以‘ find / -user username ’查出整个系统内属于 username 的档案,然后再加以删除
finger
这个命令可以查看用户的信息
- [root@www ~]# finger [-s] username
- 选项与参数:
- -s :仅列出使用者的帐号、全名、终端机代号与登入时间等等;
- -m :列出与后面接的帐号相同者,而不是利用部分比对 (包括全名部分)
chsh
change shell
- [vbird1@www ~]$ chsh [-ls]
- 选项与参数:
- -l :列出目前系统上面可用的 shell ,其实就是 /etc/shells 的内容!
- -s :设定修改自己的 Shell ��
id
以查询某人或自己的相关 UID/GID 等等的信息
[root@www ~]# id [username]
4.新增与移除群组
groupadd
- [root@www ~]# groupadd [-g gid] [-r] 群组名称
- 选项与参数:
- -g :后面接某个特定的 GID ,用来直接给予某个 GID ~
- -r :建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。
groupmod
- [root@www ~]# groupmod [-g gid] [-n group_name] 群组名
- 选项与参数:
- -g :修改既有的 GID 数字;
- -n :修改既有的群组名称
groupdel
- groupdel [groupname]
必须要确认 /etc/passwd 内的帐号没有任何人使用该群组作为 initial group
gpasswd
- # 关于系统管理员(root)做的动作:
- [root@www ~]# gpasswd groupname
- [root@www ~]# gpasswd [-A user1,...] [-M user3,...] groupname
- [root@www ~]# gpasswd [-rR] groupname
- 选项与参数:
- :若没有任何参数时,表示给予 groupname 一个密码(/etc/gshadow)
- -A :将 groupname 的主控权交由后面的使用者管理(该群组的管理员)
- -M :将某些帐号加入这个群组当中!
- -r :将 groupname 的密码移除
- -R :让 groupname 的密码栏失效
- # 关于群组管理员(Group administrator)做的动作:
- [someone@www ~]$ gpasswd [-ad] user groupname
- 选项与参数:
- -a :将某位使用者加入到 groupname 这个群组当中!
- -d :将某位使用者移除出 groupname 这个群组当中。
5.主机的细部权限规划:ACL 的使用
ACL说白了就是对文件和文件夹权限的细粒度管理,主要针对:
setfacl
- [root@www ~]# setfacl [-bkRd] [{-m|-x} acl参数] 目标档名
- 选项与参数:
- -m :设定后续的 acl 参数给档案使用,不可与 -x 合用;
- -x :删除后续的 acl 参数,不可与 -m 合用;
- -b :移除所有的 ACL 设定参数;
- -k :移除预设的 ACL 参数,关于所谓的‘预设’参数于后续范例中介绍;
- -R :递回设定 acl ,亦即包括次目录都会被设定起来;
- -d :设定‘预设 acl 参数’的意思!只对目录有效,在该目录新建的资料会引用此预设值
用法:
- # 1. 针对特定使用者的方式:
- # 设定规范:‘ u:[使用者帐号列表]:[rwx] ’,例如针对 vbird1 的权限规范 rx :
- [root@www ~]# setfacl -m u:vbird1:rx acl_test1
- # 2. 针对特定群组的方式:
- # 设定规范:‘ g:[群组列表]:[rwx] ’,例如针对 mygroup1 的权限规范 rx :
- [root@www ~]# setfacl -m g:mygroup1:rx acl_test1
- # 3. 针对有效权限 mask 的设定方式:
- # 设定规范:‘ m:[rwx] ’,例如针对刚刚的档案规范为仅有 r :
- [root@www ~]# setfacl -m m:r acl_test1
# 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
- [root@www ~]# getfacl filename
- 选项与参数:
- getfacl 的选项几乎与 setfacl 相同!所以鸟哥这里就免去了选项的说明啊!
有一个mask属性,使用者或群组所设定的权限必须要存在于 mask 的权限设定范围内才会生效,此即‘有效权限 (effective permission)’,如用法#3
6.使用者身份切换
两种方式:
su
- [root@www ~]# su [-lm] [-c 指令] [username]
- 选项与参数:
- - :单纯使用 - 如‘ su - ’代表使用 login-shell 的变数档案读取方式来登入系统;
- 若使用者名称没有加上去,则代表切换为 root 的身份。
- -l :与 - 类似,但后面需要加欲切换的使用者帐号!也是 login-shell 的方式。
- -m :-m 与 -p 是一样的,表示‘使用目前的环境设定,而不读取新使用者的设定档’
- -c :仅进行一次指令,所以 -c 后面可以加上指令喔!
sudo
- [root@www ~]# sudo [-b] [-u 新使用者帐号]
- 选项与参数:
- -b :将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响
- -u :后面可以接欲切换的使用者,若无此项则代表切换身份为 root 。
我们无法使用‘ su - apache ’去切换系统帐号 (因为系统帐号的 shell 是 /sbin/nologin), 而sudo可以以apache的名义做事
sudo 的执行是这样的流程:
除了 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模块