目录:
1、/etc/passwd 用户文件
2、shadow 用户密码文件
3、/etc/group 群组文件
4、/etc/gshadow 群组密码文件
5、用户命令
群组相关命令:
rhcsa7 第5题
6、主机的细部权限规划:ACL 的使用
跟使用者账号有关的有两个非常重要的文件,一个是管理使用者 UID/GID重要参数的 /etc/passwd ,一个则是专门管理密码相关数据的 /etc/shadow。
跟使用者群组有关的两个文件:/etc/group 与 /etc/gshadow。
每一行都代表一个账号,有几行就代表有几个账号在你的系统中! 不过需要特别留意的是,里头很多账号本来就是系统正常运作所必须要的,我们可以简称他为系统账号,例如 bin, daemon, adm, nobody 等等,这些账号请不要随意的杀掉他呢!
每行有7列,每列对应的说明:
1. 账号名称:
就是账号啦!用来提供给对数字不太敏感的人类使用来登入系统的!需要用来对应 UID 喔。例如 root 的UID 对应就是 0 (第三字段);
2. 密码:
早期 Unix 系统的密码就是放在这字段上!但是因为这个文件的特性是所有的程序都能够读取,这样一来很容易造成密码数据被窃取, 因此后来就将这个字段的密码数据给他改放到 /etc/shadow 中了。所以这里你会看到一个『 x 』,呵呵!
3. UID:
这个就是使用者标识符啰!通常 Linux 对于 UID 有几个限制需要说给您了解一下:
id 范围 | 该 ID 使用者特性 |
0 (系统管理员) |
当 UID 是 0 时,代表这个账号是『系统管理员』! 所以当你要让其他的账号名称 也具有 root 的权限时,将该账号的 UID 改为 0 即可。 这也就是说,一部系统上 面的系统管理员不见得只有 root 喔! 不过,很不建议有多个账号的 UID 是 0 啦~容易让系统管理员混乱! |
1~999 (系统账号) |
保留给系统使用的 ID,其实除了 0 之外,其他的 UID 权限与特性并没有不一样。 根据系统账号的由来,通常这类账号又约略被区分为两种: |
1000~60000 (可登入账号) |
给 一 般 使 用 者 用 的。 事实 上 , 目 前 的 linux 核心 (3.10.x 版 ) 已 经 可 以支 持 到 4294967295 (2^32-1) 这么大的 UID 号码喔! |
上面这样说明可以了解了吗?是的, UID 为 0 的时候,就是 root 呦!所以请特别留意一下你的/etc/passwd 文件!
4. GID:
这个与 /etc/group 有关!其实 /etc/group 的观念与 /etc/passwd 差不多,只是他是用来规范组名与 GID 的对应而已!GID为初始群组 (initial group) 』!也就是说,当用户一登入系统,立刻就拥有这个群组的相关权限的意思。通常有效群组的作用是在新建文件。因为是初始群组, 使用者一登入就会主动取得,不需要在 /etc/group 的第四个字段写入该账号的!
5. 用户信息说明栏:
这个字段基本上并没有什么重要用途,只是用来解释这个账号的意义而已!不过,如果您提供使用 finger 的功能时, 这个字段可以提供很多的讯息呢!本章后面的 chfn 指令会来解释这里的说明。
6. 家目录:
这是用户的家目录,以上面为例, root 的家目录在 /root ,所以当 root 登入之后,就会立刻跑到 /root 目录里头啦!呵呵! 如果你有个账号的使用空间特别的大,你想要将该账号的家目录移动到其他的硬盘去该怎么作? 没有错!可以在这个字段进行修改呦!默认的用户家目录在 /home/yourIDname
7. Shell:
我们在第十章 BASH 提到很多次,当用户登入系统后就会取得一个 Shell 来与系统的核心沟通以进行用户的操作任务。那为何预设 shell 会使用 bash 呢?就是在这个字段指定的啰! 这里比较需要注意的是,有一个 shell 可以用来替代成让账号无法取得 shell 环境的登入动作!那就是 /sbin/nologin 这个东西!这也可以用来制作纯 pop 邮件账号者的数据呢!
同样以『:』作为分隔符,共9个字段:
1. 账号名称:
由于密码也需要与账号对应啊~因此,这个文件的第一栏就是账号,必须要与 /etc/passwd 相同才行!
2. 密码:
这个字段内的数据才是真正的密码,而且是经过编码的密码 (加密) 啦! 你只会看到有一些特殊符号的字母就是了!需要特别留意的是,虽然这些加密过的密码很难被解出来, 但是『很难』不等于『不会』,所以,这个文件的预设权限是『-rw-------』或者是『----------』,亦即只有 root 才可以读写就是了!你得随时注意,不要不小心更动了这个文件的权限呢!
另外,由于各种密码编码的技术不一样,因此不同的编码系统会造成这个字段的长度不相同。 举例来说,旧式的 DES, MD5 编码系统产生的密码长度就与目前惯用的 SHA 不同(注 2)!SHA 的密码长度明显的比较长些。由固定的编码系统产生的密码长度必须一致,因此『当你让这个字段的长度改变后,该密码就会失效(算不出来)』。 很多软件透过这个功能,在此字段前加上 ! 或 * 改变密码字段长度,就会让密码『暂时失效』了。
3. 最近更动密码的日期:
这个字段记录了『更动密码那一天』的日期,不过,很奇怪呀!在我的例子中怎么会是 16559 呢?呵呵,这个是因为计算 Linux 日期的时间是以 1970 年 1 月 1 日作为 1 而累加的日期,1971 年 1 月 1 日则为 366 啦! 得注意一下这个资料呦!上述的 16559 指的就是 2015-05-04 那一天啦!了解乎? 而想要了解该日期可以使用本章后面 chage 指令的帮忙!至于想要知道某个日期的累积日数, 可使用如下的程序计算:
[root@study ~]# echo $(($(date --date="2015/05/04" +%s)/86400+1))
16559
上述指令中,2015/05/04 为你想要计算的日期,86400 为每一天的秒数, %s 为 1970/01/01 以来的累积总秒数。 由于 bash 仅支持整数,因此最终需要加上 1 补齐 1970/01/01 当天。
4. 密码不可被更动的天数:(与第 3 字段相比)
第四个字段记录了:这个账号的密码在最近一次被更改后需要经过几天才可以再被变更!如果是 0 的话,表示密码随时可以更动的意思。这的限制是为了怕密码被某些人一改再改而设计的!如果设定为 20 天的话,那么当你设定了密码之后, 20 天之内都无法改变这个密码呦!
5. 密码需要重新变更的天数:(与第 3 字段相比)
经常变更密码是个好习惯!为了强制要求用户变更密码,这个字段可以指定在最近一次更改密码后, 在多少天数内需要再次的变更密码才行。你必须要在这个天数内重新设定你的密码,否则这个账号的密码将会『变为过期特性』。 而如果像上面的 99999 (计算为 273 年) 的话,那就表示,呵呵,密码的变更没有强制性之意。
6. 密码需要变更期限前的警告天数:(与第 5 字段相比)
当账号的密码有效期限快要到的时候 (第 5 字段),系统会依据这个字段的设定,发出『警告』言论给这个账号,提醒他『再过 n 天你的密码就要过期了,请尽快重新设定你的密码呦!』,如上面的例子,则是密码到期之前的 7 天之内,系统会警告该用户。
7. 密码过期后的账号宽限时间(密码失效日):(与第 5 字段相比)
密码有效日期为『更新日期(第 3 字段)』+『重新变更日期(第 5 字段)』,过了该期限后用户依旧没有更新密码,那该密码就算过期了。 虽然密码过期但是该账号还是可以用来进行其他工作的,包括登入系统取得bash 。不过如果密码过期了, 那当你登入系统时,系统会强制要求你必须要重新设定密码才能登入继续使用喔,这就是密码过期特性。
那这个字段的功能是什么呢?是在密码过期几天后,如果使用者还是没有登入更改密码,那么这个账号的密码将会『失效』, 亦即该账号再也无法使用该密码登入了。要注意密码过期与密码失效并不相同。
8. 账号失效日期:
这个日期跟第三个字段一样,都是使用 1970 年以来的总日数设定。这个字段表示: 这个账号在此字段规定的日期之后,将无法再使用。 就是所谓的『账号失效』,此时不论你的密码是否有过期,这个『账号』都不能再被使用! 这个字段会被使用通常应该是在『收费服务』的系统中,你可以规定一个日期让该账号不能再使用啦!
9. 保留:
最后一个字段是保留的,看以后有没有新功能加入。
查询shadow使用哪种加密的机制 :authconfig --test | grep hashing
1. 组名:
就是组名啦!同样用来给人类使用的,基本上需要与第三字段的 GID 对应。
2. 群组密码:
通常不需要设定,这个设定通常是给『群组管理员』使用的,目前很少有这个机会设定群组管理员啦! 同样的,密码已经移动到 /etc/gshadow 去,因此这个字段只会存在一个『x』而已;
3. GID:
就是群组的 ID 啊。我们 /etc/passwd 第四个字段使用的 GID 对应的群组名,就是由这里对应出来的!
4. 此群组支持的账号名称:
我们知道一个账号可以加入多个群组,那某个账号想要加入此群组时,将该账号填入这个字段即可。 举例来说,如果我想要让 dmtsai 与 alex 也加入 root 这个群组,那么在第一行的最后面加上『dmtsai,alex』,注意不要有空格, 使成为『 root:x:0:dmtsai,alex 』就可以啰~
[dmtsai@study ~]$ groups #有效与支持群组的观察
[dmtsai@study ~]$ newgrp 有效群组 #有效群组的切换。想要切换的群组必须是你已经有支持的群组。
[dmtsai@study ~]$ exit # 注意!记得离开 newgrp 的环境喔!
newgrp 的运作示意图
1. 组名
2. 密码栏,同样的,开头为 ! 表示无合法密码,所以无群组管理员
3. 群组管理员的账号 (相关信息在 gpasswd 中介绍)
4. 有加入该群组支持的所属账号 (与 /etc/group 内容相同!)
以系统管理员的角度来说,这个 gshadow 最大的功能就是建立群组管理员。当有使用者想要加入某些群组时, root 或许会没有空管理。此时如果能够建立群组管理员的话,那么该群组管理员就能够将那个账号加入自己管理的群组中! 可以免去 root 的忙碌啦!不过,由于目前有类似 sudo 之类的工具, 所以这个群组管理员的功能已经很少使用了。
5.1、useradd 命令新建用户
语法:
选项与参数:
系统已经帮我们规定好非常多的默认值:
使用 useradd 建立使用者账号时,会更改的文件:
使用 useradd 建立使用者账号时,至少会参考:
[root@study ~]# useradd -D #显示useradd 命令的基本账号设定的默认值,数据在/etc/default/useradd文件中。
GROUP=100 <==预设的群组
HOME=/home <==默认的家目录所在目录
INACTIVE=-1 <==密码失效日,在 shadow 内的第 7 栏
EXPIRE= <==账号失效日,在 shadow 内的第 8 栏
SHELL=/bin/bash <==预设的 shell
SKEL=/etc/skel <==用户家目录的内容数据参考目录
CREATE_MAIL_SPOOL=yes <==是否主动帮使用者建立邮件信箱(mailbox)
[root@study ~]# cat /etc/login.defs #useradd 命令的UID、GID、密码参数的默认值
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 1000 <==使用者最小的 UID,意即小于 1000 的 UID 为系统保留
UID_MAX 60000 <==使用者能够用的最大 UID
SYS_UID_MIN 201 <==保留给用户自行设定的系统账号最小值 UID
SYS_UID_MAX 999 <==保留给用户自行设定的系统账号最大值 UID
GID_MIN 1000 <==使用者自定义组的最小 GID,小于 1000 为系统保留
GID_MAX 60000 <==使用者自定义组的最大 GID
SYS_GID_MIN 201 <==保留给用户自行设定的系统账号最小值 GID
SYS_GID_MAX 999 <==保留给用户自行设定的系统账号最大值 GID
CREATE_HOME yes <==在不加 -M 及 -m 时,是否主动建立用户家目录?
UMASK 077 <==用户家目录建立的 umask ,因此权限会是 700
USERGROUPS_ENAB yes <==使用 userdel 删除时,是否会删除初始群组
ENCRYPT_METHOD SHA512 <==密码加密的机制使用的是 sha512 这一个机制!
使用 useradd 建立了账号之后,在默认的情况下,该账号是暂时被封锁的(该账号是无法登入),瞧一瞧 /etc/shadow 内的第二个字段就晓得啰~ 下一步得用:
5.2、passwd 命令设定新密码
语法:
选项与参数:
新的 distributions 是使用较严格的 PAM 模块来管理密码,这个管理的机制写在 /etc/pam.d/passwd 当中。而该文件与密码有关的测试模块就是使用:pam_cracklib.so,这个模块会检验密码相关的信息, 并且取代 /etc/login.defs 内的 PASS_MIN_LEN的设定啦!
理论上,密码最好符合如下要求:
实例:
[root@study ~]# echo "abc543CC" | passwd --stdin vbird2
5.3、chage 更详细的密码参数的显示与设定
语法:
选项与参数:
实例:
[root@study ~]# chage -d 0 agetest #让『使用者在第一次登入时, 强制她们一定要更改密码后才能够使用系统资源
5.4、usermod 账号相关数据的微调
语法:
选项与参数:
仔细的比对,会发现 usermod 的选项与 useradd 非常类似。-L 与 -U 这两个选项也与另一个命令 passwd 的 -l, -u 相同。
5.5、userdel 删除用户的相关数据
用户的数据有:
语法:
选项与参数:
如果该账号只是『暂时不启用』的话,那么将/etc/shadow 里头账号失效日期 (第八字段) 设定为 0 就可以让该账号无法使用,但是所有跟该账号相关的数据都会留下来! 使用 userdel 的时机通常是『你真的确定不要让该用户在主机上面使用任何数据了!』
另外,其实用户如果在系统上面操作过一阵子了,那么该用户其实在系统内可能会含有其他文件的。举例来说,他的邮件信箱 (mailbox) 或者是例行性工作排程 (crontab, 十五章) 之类的文件。 所以,如果想要完整的将某个账号完整的移除,最好可以在下达 userdel -r username 之前, 先以『 find /-user username 』查出整个系统内属于 username 的文件,然后再加以删除吧!
5.6、id 查询某人或自己的相关 UID/GID 等等的信息
语法:
范例:查阅 root 自己的相关 ID 信息!
[root@study ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
5.7、finger 显示用户相关的信息
这个指令有点危险,所以新的版本中已经默认不安装这个软件。
语法:
选项与参数:
命令结果,其实他列出来的几乎都是 /etc/passwd 文件里面的东西。列出的信息说明如下:
5.8、chfn 更改自己帐号的相关信息
change finger 的意思。改到/etc/passwd的第五个字段。finger命令可以显示出来。这个指令说实在的,除非是你的主机有很多的用户,否则倒真是用不着这个程序!这就有点像是 bbs里头更改你『个人属性』的那一个资料啦。
语法:
选项与参数:
范例一:vbird1 自己更改一下自己的相关信息!
[vbird1@study ~]$ 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.
5.9、chsh 修改/etc/passwd文件的第7段Shell
change shell的缩写。
语法:
选项与参数:
[vbird1@study ~]$ chsh -l
/bin/sh
/bin/bash <==一般默认选项
/sbin/nologin <==所谓:合法不可登入的 Shell 就是这玩意!
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh <==这就是 C shell 啦!
[vbird1@study ~]$ ll $(which chsh)
-rws--x--x. 1 root root 23856 Mar 6 13:59 /bin/chsh
chfn 与 chsh ,都是能够让一般用户修改 /etc/passwd 这个系统文件的。这两个文件的权限是什么? 一定是 SUID 的功能。
5.10、groupadd 新增群组
为了让使用者的 UID/GID 成对,她们建议新建的与使用者私有群组无关的其他群组时,使用小于 1000 以下的 GID 为宜。
语法:
选项与参数:
5.11、groupmod 进行 group 相关参数的修改
选项与参数:
5.12、groupdel 删除群组
语法:
存在用户的群组不允许删除。删除有用户的群组的两个办法:
5.13、gpasswd 群组管理员功能
# 关于系统管理员(root)做的动作:
选项与参数:
# 关于群组管理员(Group administrator)做的动作:
选项与参数:
除了本机的账号之外,我们可能还会使用到其他外部的身份验证服务器所提供的验证身份的功能!如果你的 Linux 主机要使用到上面提到的这些外部身份验证系统时,可能就得要额外的设定一些数据了
语法:
rhcsa7 第5题:
请按照以下要求创建用户、用户组:
答:
groupadd -g 40000 adminuser
useradd -G adminuser natasha
useradd -G adminuser harry
useradd -s /usr/sbin/nologin sarah
echo redhat | passwd --stdin natasha
echo redhat | passwd --stdin harry
echo redhat | passwd --stdin sarah
usermod -s /sbin/nologin saraha #帐号saraha设置错误,此时修改
ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的read,write,execute 权限之外的细部权限设定。ACL 可以针对单一使用者,单一文件或目录来进行r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。
ACL 主要可以针对以下3方面来控制权限:
? 使用者 (user):可以针对使用者来设定权限;
? 群组 (group):针对群组为对象来设定其权限;
? 默认属性 (mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的默认权限。
目前 ACL 几乎已经预设加入在所有常见的 Linux 文件系统的挂载参数中(ext2/ext3/ext4/xfs 等等)!
6.1、dmesg | grep -i acl #检查一下核心挂载时显示的信息
6.2、setfacl #设定某个目录/文件的 ACL 规范
语法:
选项与参数:
6.3、getfacl #取得某个文件/目录的 ACL 设定项目
语法:
选项与参数:
getfacl 的选项与 setfacl 相同
# 1. 针对特定使用者的方式:
# 设定规范:『 u:[使用者账号列表]:[rwx] 』,例如针对 vbird1 的权限规范 rx :
[root@study ~]# touch acl_test1
[root@study ~]# ll acl_test1
-rw-r--r--. 1 root root 0 Jul 21 17:33 acl_test1
[root@study ~]# setfacl -m u:vbird1:rx acl_test1
[root@study ~]# ll acl_test1
-rw-r-xr--+ 1 root root 0 Jul 21 17:33 acl_test1
# 权限部分多了个 + ,且与原本的权限 (644) 看起来差异很大!但要如何查阅呢?
[root@study ~]# setfacl -m u::rwx acl_test1
[root@study ~]# ll acl_test1
-rwxr-xr--+ 1 root root 0 Jul 21 17:33 acl_test1
# 设定值中的 u 后面无使用者列表,代表设定该文件拥有者,所以上面显示 root 的权限成为 rwx 了!
# 2. 针对特定群组的方式:
# 设定规范:『 g:[群组列表]:[rwx] 』,例如针对 mygroup1 的权限规范 rx :
[root@study ~]# setfacl -m g:mygroup1:rx acl_test1
[root@study ~]# getfacl acl_test1
# 3. 针对有效权限 mask 的设定方式:
# 设定规范:『 m:[rwx] 』,例如针对刚刚的文件规范为仅有 r :
[root@study ~]# setfacl -m m:r acl_test1
[root@study ~]# getfacl acl_test1
# 4. 针对预设权限的设定方式:
# 设定规范:『 d:[ug]:使用者列表:[rwx] 』
[root@study ~]# setfacl -m d:u:myuser1:rx /srv/projecta
[root@study ~]# getfacl /srv/projecta
rhcsa7 d6:
复制文件/etc/fstab到/var/tmp目录下,并按照以下要求配置/var/tmp/fstab文件的权限:
答:
sudo cp /etc/fstab /var/tmp/
ll /var/tmp/fstab
sudo setfacl -m u:natasha:rw /var/tmp/fstab
sudo setfacl -m u:harry:--- /var/tmp/fstab
getfacl /var/tmp/fstab
2018-05-28 《鸟哥的Linux私房菜 基础学习篇(第四版)》 第13章 Linux 账号管理与 ACL 权限设定 笔记
原文:https://www.cnblogs.com/shoubituling/p/9098834.html