14 Linux 账号管理与 ACL 权限配置

来源:互联网 发布:网络倩女幽魂2挂机地点 编辑:程序博客网 时间:2024/05/16 14:09
登录时,输入账号密码之后,系统处理:
  1. 先找寻 /etc/passwd 里面是否有你输入的账号?如果没有则跳出,如果有的话则将该账号对应的 UID 与 GID (在 /etc/group 中) 读出来,另外,该账号的主目录与 shell 配置也一并读出;
  2. 再来则是核对口令表!这时 Linux 会进入 /etc/shadow 里面找出对应的账号与 UID,然后核对一下你刚刚输入的口令与里头的口令是否相符?
  3. 如果一切都 OK 的话,就进入 Shell 控管的阶段!


/etc/passwd 文件结构

每一行都代表一个账号,有几行就代表有几个账号在你的系统中! 不过需要特别留意的是,里头很多账号本来就是系统正常运行所必须要的,我们可以简称他为系统账号, 例如 bin, daemon, adm, nobody 等等,这些账号请不要随意的杀掉他呢!每一行使用『:』分隔开,共有七个,分别是:
1.账号名称:

2.口令:早期 Unix 系统的口令就是放在这字段上!但是因为这个文件的特性是所有的程序都能够读取,这样一来很容易造成口令数据被窃取, 因此后来就将这个字段的口令数据给他改放到 /etc/shadow 中了。所以这里你会看到一个『 x 』!

3.UID:


4.GID:这个与 /etc/group 有关!其实 /etc/group 的观念与 /etc/passwd 差不多,只是他是用来规范组名与 GID 的对应而已!
5.用户信息说明栏:这个字段基本上并没有什么重要用途,只是用来解释这个账号的意义而已!不过,如果您提供使用 finger 的功能时, 这个字段可以提供很多的信息呢!
6.主目录: root 的主目录在 /root ,所以当 root 登陆之后,就会立刻跑到 /root 目录里头!如果你有个账号的使用空间特别的大,你想要将该账号的家目录移动到其他的硬盘去该怎么作? 没有错!可以在这个字段进行修改呦!默认的用户家目录在 /home/yourIDname
7.Shell:我们在第十一章 BASH 提到很多次,当用户登陆系统后就会取得一个 Shell 来与系统的核心沟通以进行用户的操作任务。那为何默认 shell 会使用 bash 呢?就是在这个字段指定的! 这里比较需要注意的是,有一个 shell 可以用来替代成让账号无法取得 shell 环境的登陆动作!那就是 /sbin/nologin 这个东西!这也可以用来制作纯 pop 邮件账号者的数据!

/etc/shadow 文件结构
一般用户的口令忘记了:请系统管理员帮忙, 他会重新配置好你的口令而不需要知道你的旧口令!利用 root 的身份使用 passwd 命令来处理即可。
root 口令忘记了:这就麻烦了!因为你无法使用 root 的身份登陆了嘛! 但我们知道 root 的口令在 /etc/shadow 当中,因此你可以使用各种可行的方法启动进入 Linux 再去修改。 例如重新启动进入单人维护模式后,系统会主动的给予 root 权限的 bash 接口, 此时再以 passwd 修改口令即可;或以 Live CD 启动后挂载根目录去修改 /etc/shadow,将里面的 root 的口令字段清空, 再重新启动后 root 将不用口令即可登陆!登陆后再赶快以 passwd 命令去配置 root 口令即可。

账号相关文件之间的 UID/GID 与口令相关性示意图



其实重点是 /etc/passwd ,其他相关的数据都是根据这个文件的字段去找寻出来的。 图中, root 的 UID 是 0 ,而 GID 也是 0 ,去找 /etc/group 可以知道 GID 为 0 时的组名就是 root 。 至于口令的寻找中,会找到 /etc/shadow 与 /etc/passwd 内同账号名称的那一行,就是口令相关数据。

有效群组

『假如我同时加入多个群组,那么我在作业的时候,到底是以那个群组为准?』

groups: 有效与支持群组的观察

newgrp: 有效群组的切换

/etc/gshadow文件结构
1.组名
2.口令栏,同样的,开头为 ! 表示无合法口令,所以无群组管理员
3.群组管理员的账号 (相关信息在 gpasswd 中介绍)
4.该群组的所属账号 (与 /etc/group 内容相同!)
 gshadow 最大的功能就是创建群组管理员啦!由于系统上面的账号可能会很多,但是 root 可能平时太忙碌,所以当有使用者想要加入某些群组时, root 或许会没有空管理。此时如果能够创建群组管理员的话,那么该群组管理员就能够将那个账号加入自己管理的群组中! 可以免去 root 的忙碌啦!不过,由于目前有类似 sudo 之类的工具, 所以这个群组管理员的功能已经很少使用了。

useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM]  [-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名
使用『 useradd 账号 』来创建使用者即可。 

CentOS 这些默认值主要会帮我们处理几个项目:

  • 在 /etc/passwd 里面创建一行与账号相关的数据,包括创建 UID/GID/家目录等;
  • 在 /etc/shadow 里面将此账号的口令相关参数填入,但是尚未有口令;
  • 在 /etc/group 里面加入一个与账号名称一模一样的组名;
  • 在 /home 底下创建一个与账号同名的目录作为用户家目录,且权限为 700


私有群组机制:系统会创建一个与账号一样的群组给使用者作为初始群组。 这种群组的配置机制会比较有保密性,这是因为使用者都有自己的群组,而且家目录权限将会配置为 700 (仅有自己可进入自己的家目录) 之故。使用这种机制将不会参考 GROUP=100 这个配置值。代表性的 distributions 有 RHEL, Fedora, CentOS 等;
公共群组机制:就是以 GROUP=100 这个配置值作为新建账号的初始群组,因此每个账号都属于 users 这个群组, 且默认家目录通常的权限会是『 drwxr-xr-x ... username users ... 』,由于每个账号都属于 users 群组,因此大家都可以互相分享家目录内的数据之故。代表 distributions 如 SuSE等。
我们的 CentOS 使用私有群组机制,因此这个配置项目是不会生效的!

使用 useradd 在创建 Linux 上的账号时,至少会参考:
/etc/default/useradd
/etc/login.defs
/etc/skel/*

passwd [--stdin]  <==所有人均可使用来改自己的口令
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 字段,口令失效日期

chage [-ldEImMW] 账号名
选项与参数:
-l :列出该账号的详细口令参数;
-d :后面接日期,修改 shadow 第三字段(最近一次更改口令的日期),格式 YYYY-MM-DD
-E :后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD
-I :后面接天数,修改 shadow 第七字段(口令失效日期)
-m :后面接天数,修改 shadow 第四字段(口令最短保留天数)
-M :后面接天数,修改 shadow 第五字段(口令多久需要进行变更)
-W :后面接天数,修改 shadow 第六字段(口令过期前警告日期)
如果你想要让『使用者在第一次登陆时, 强制她们一定要更改口令后才能够使用系统资源』,可以利用如下的方法来处理的!
创建一个名为 agetest 的账号,该账号第一次登陆后使用默认口令,但必须要更改过口令后,使用新口令才能够登陆系统使用 bash 环境
useradd agetest
echo "agetest" | passwd --stdin agetest
chage -d 0 agetest


在使用 useradd 后,发现某些地方还可以进行细部修改。 此时,当然我们可以直接到 /etc/passwd 或 /etc/shadow 去修改相对应字段的数据, 不过,Linux 也有提供相关的命令让大家来进行账号相关数据的微调,就是 usermod 。
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 [-r] username
选项与参数:
-r  :连同用户的家目录也一起删除

如果该账号只是『暂时不激活』的话,那么将 /etc/shadow 里头账号失效日期 (第八字段) 配置为 0 就可以让该账号无法使用,但是所有跟该账号相关的数据都会留下来! 使用 userdel 的时机通常是『你真的确定不要让该用户在主机上面使用任何数据了!』其实用户如果在系统上面操作过一阵子了,那么该用户其实在系统内可能会含有其他文件的。 举例来说,他的邮件信箱 (mailbox) 或者是例行性工作排程 (crontab, 十六章) 之类的文件。 所以,如果想要完整的将某个账号完整的移除,最好可以在下达 userdel -r username 之前, 先以『 find / -user username 』查出整个系统内属于 username 的文件,然后再加以删除吧!

几个一般身份用户常用的账号数据变更与查询命令!
finger [-s] username
选项与参数:
-s  :仅列出用户的账号、全名、终端机代号与登陆时间等等;
-m  :列出与后面接的账号相同者,而不是利用部分比对 (包括全名部分)

chfn 有点像是: change finger 的意思!
chfn [-foph] [账号名]
选项与参数:
-f  :后面接完整的大名;
-o  :您办公室的房间号码;
-p  :办公室的电话号码;
-h  :家里的电话号码!

chsh这就是 change shell 的简写!
chsh [-ls]
选项与参数:
-l  :列出目前系统上面可用的 shell ,其实就是 /etc/shells 的内容!
-s  :配置修改自己的 Shell 啰
不论是 chfn 与 chsh ,都是能够让一般用户修改 /etc/passwd 这个系统文件的!

新增与移除群组groupadd
groupadd [-g gid] [-r] 组名
选项与参数:
-g  :后面接某个特定的 GID ,用来直接给予某个 GID ~
-r  :创建系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。

groupmod跟 usermod 类似的,这个命令仅是在进行 group 相关参数的修改而已。
groupmod [-g gid] [-n group_name] 群组名
选项与参数:
-g  :修改既有的 GID 数字;
-n  :修改既有的组名

『创建一个群组管理员』得要透过 gpasswd !
gpasswd groupname
gpasswd [-A user1,...] [-M user3,...] groupname
gpasswd [-rR] groupname
选项与参数:
    :若没有任何参数时,表示给予 groupname 一个口令(/etc/gshadow)
-A  :将 groupname 的主控权交由后面的使用者管理(该群组的管理员)
-M  :将某些账号加入这个群组当中!
-r  :将 groupname 的口令移除
-R  :让 groupname 的口令栏失效

什么是 ACL:
ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限配置。ACL 可以针对单一使用者,单一文件或目录来进行 r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。


su 就这样简单的介绍完毕,总结一下他的用法是这样的:

若要完整的切换到新使用者的环境,必须要使用『 su - username 』或『 su -l username 』, 才会连同 PATH/USER/MAIL 等变量都转成新用户的环境;
如果仅想要运行一次 root 的命令,可以利用『 su - -c "命令串" 』的方式来处理;
使用 root 切换成为任何使用者时,并不需要输入新用户的口令;
虽然使用 su 很方便啦,不过缺点是,当我的主机是多人共管的环境时,如果大家都要使用 su 来切换成为 root 的身份,那么不就每个人都得要知道 root 的口令,这样口令太多人知道可能会流出去, 很不妥当呢!透过 sudo 来处理即可!
sudo [-b] [-u 新使用者账号]
选项与参数:
-b  :将后续的命令放到背景中让系统自行运行,而不与目前的 shell 产生影响
-u  :后面可以接欲切换的使用者,若无此项则代表切换身份为 root 。

但是 sudo 默认仅有 root 能使用啊! sudo 的运行的流程:

  • 当用户运行 sudo 时,系统于 /etc/sudoers 文件中搜寻该使用者是否有运行 sudo 的权限;
  • 若使用者具有可运行 sudo 的权限后,便让使用者『输入用户自己的口令』来确认;
  • 若口令输入成功,便开始进行 sudo 后续接的命令(但 root 运行 sudo 时,不需要输入口令);
  • 若欲切换的身份与运行者身份相同,那也不需要输入口令。
所以说,sudo 运行的重点是:『能否使用 sudo 必须要看 /etc/sudoers 的配置值, 而可使用 sudo 者是透过输入用户自己的口令来运行后续的命令串』!由于能否使用与 /etc/sudoers 有关, 所以我们当然要去编辑 sudoers 文件!不过,因为该文件的内容是有一定的规范的,因此直接使用 vi 去编辑是不好的。 此时,我们得要透过 visudo 去修改这个文件!

使用者账号  登陆者的来源主机名=(可切换的身份)  可下达的命令
root                         ALL=(ALL)           ALL   <==这是默认值
上面这一行的四个组件意义是:

  • 系统的哪个账号可以使用 sudo 这个命令的意思,默认为 root 这个账号;
  • 当这个账号由哪部主机联机到本 Linux 主机,意思是这个账号可能是由哪一部网络主机联机过来的, 这个配置值可以指定客户端计算机(信任用户的意思)。默认值 root 可来自任何一部网络主机这个账号可以切换成什么身份来下达后续的命令,默认 root 可以切换成任何人;
  • 可用该身份下达什么命令?这个命令请务必使用绝对路径撰写。 默认 root 可以切换任何身份且进行任何命令之意

透过别名建置 visudo:
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

PAM 模块简介
PAM 可以说是一套应用程序编程接口 (Application Programming Interface, API),他提供了一连串的验证机制,只要使用者将验证阶段的需求告知 PAM 后, PAM 就能够回报使用者验证的结果 (成功或失败)。由于 PAM 仅是一套验证的机制,又可以提供给其他程序所呼叫引用,因此不论你使用什么程序,都可以使用 PAM 来进行验证,如此一来,就能够让账号口令或者是其他方式的验证具有一致的结果!也让程序设计师方便处理验证的问题喔! 

 这也就是说,你可以在写程序的时候将 PAM 模块的功能加入,就能够利用 PAM 的验证功能啰。 因此目前很多程序都会利用 PAM !

PAM 模块配置语法
当你运行 passwd 后,这支程序呼叫 PAM 的流程是:
1.用户开始运行 /usr/bin/passwd 这支程序,并输入口令;
2.passwd 呼叫 PAM 模块进行验证;
3.PAM 模块会到 /etc/pam.d/ 找寻与程序 (passwd) 同名的配置文件;
4.依据 /etc/pam.d/passwd 内的配置,引用相关的 PAM 模块逐步进行验证分析;
5.将验证结果 (成功、失败以及其他信息) 回传给 passwd 这支程序;
6.passwd 这支程序会根据 PAM 回传的结果决定下一个动作 (重新输入新口令或者通过验证!)

cat /etc/pam.d/passwd
第一个字段:验证类别 (Type)
验证类别主要分为四种,分别说明如下:
auth:是 authentication (认证) 的缩写,所以这种类别主要用来检验使用者的身份验证,这种类别通常是需要口令来检验的, 所以后续接的模块是用来检验用户的身份。
account:account (账号) 则大部分是在进行 authorization (授权),这种类别则主要在检验使用者是否具有正确的权限, 举例来说,当你使用一个过期的口令来登陆时,当然就无法正确的登陆了。
session: 是会议期间的意思,所以 session 管理的就是使用者在这次登陆 (或使用这个命令) 期间,PAM 所给予的环境配置。 这个类别通常用在记录用户登陆与注销时的信息!例如,如果你常常使用 su 或者是 sudo 命令的话, 那么应该可以在 /var/log/secure 里面发现很多关于 pam 的说明,而且记载的数据是『session open, session close』的信息! 
password:就是口令嘛!所以这种类别主要在提供验证的修订工作,举例来说,就是修改/变更口令啦!
这四个验证的类型通常是有顺序的,不过也有例外就是了。 会有顺序的原因是,(1)我们总是得要先验证身份 (auth) 后, (2)系统才能够藉由用户的身份给予适当的授权与权限配置 (account),而且(3)登陆与注销期间的环境才需要配置, 也才需要记录登陆与注销的信息 (session)。如果在运行期间需要口令修订时,(4)才给予 password 的类别。这样说起来, 自然是需要有点顺序吧!

第二个字段:验证的控制旗标 (control flag)
『验证的控制旗标(control flag)』就是『验证通过的标准』啦! 这个字段在管控该验证的放行方式,主要也分为四种控制方式:
required:此验证若成功则带有 success (成功) 的标志,若失败则带有 failure 的标志,但不论成功或失败都会继续后续的验证流程。 由于后续的验证流程可以继续进行,因此相当有利于数据的登录 (log) ,这也是 PAM 最常使用 required 的原因。
requisite:若验证失败则立刻回报原程序 failure 的标志,并终止后续的验证流程。若验证成功则带有 success 的标志并继续后续的验证流程。 这个项目与 required 最大的差异,就在于失败的时候还要不要继续验证下去?由于 requisite 是失败就终止, 因此失败时所产生的 PAM 信息就无法透过后续的模块来记录了。
sufficient:若验证成功则立刻回传 success 给原程序,并终止后续的验证流程;若验证失败则带有 failure 标志并继续后续的验证流程。 这玩意儿与 requisits 刚好相反!
optional:这个模块控件目大多是在显示信息而已,并不是用在验证方面的。



/etc/pam.d/*:每个程序个别的 PAM 配置文件;
/lib/security/*:PAM 模块文件的实际放置目录;
/etc/security/*:其他 PAM 环境的配置文件;
/usr/share/doc/pam-*/:详细的 PAM 说明文件。

login 的 PAM 验证机制流程是这样的
验证阶段 (auth):首先,(a)会先经过 pam_securetty.so 判断,如果使用者是 root 时,则会参考 /etc/securetty 的配置; 接下来(b)经过 pam_env.so 配置额外的环境变量;再(c)透过 pam_unix.so 检验口令,若通过则回报 login 程序;若不通过则(d)继续往下以 pam_succeed_if.so 判断 UID 是否大于 500 ,若小于 500则回报失败,否则再往下 (e)
以 pam_deny.so 拒绝联机。
授权阶段 (account):(a)先以 pam_nologin.so 判断 /etc/nologin 是否存在,若存在则不许一般使用者登陆; (b)接下来以 pam_unix 进行账号管理,再以 (c) pam_succeed_if.so 判断 UID 是否小于 500 ,若小于 500 则不记录登录信息。(d)最后以 pam_permit.so 允许该账号登陆。
口令阶段 (password):(a)先以 pam_cracklib.so 配置口令仅能尝试错误 3 次;(b)接下来以 pam_unix.so 透过 md5, shadow 等功能进行口令检验,若通过则回报 login 程序,若不通过则 (c)以 pam_deny.so 拒绝登陆。
会议阶段 (session):(a)先以 pam_selinux.so 暂时关闭 SELinux;(b)使用 pam_limits.so 配置好用户能够操作的系统资源; (c)登陆成功后开始记录相关信息在登录文件中; (d)以 pam_loginuid.so 规范不同的 UID 权限;(e)开启 pam_selinux.so 的功能。

总之,就是依据验证类别 (type) 来看,然后先由 login 的配置值去查阅,如果出现『 include system-auth 』 就转到 system-auth 文件中的相同类别,去取得额外的验证流程就是了。然后再到下一个验证类别,最终将所有的验证跑完! 就结束这次的 PAM 验证啦!


Linux 主机上的用户信息传递

使用者对谈: write, mesg, wall
write 使用者账号 [用户所在终端接口]

使用者邮件信箱: mail
一般来说, mailbox 都会放置在 /var/spool/mail 里面,一个账号一个 mailbox (文件)。 举例来说,我的 vbird1 就具有 /var/spool/mail/vbird1 这个 mailbox !
mail username@localhost -s "邮件标题" 
mail vbird1 -s "nice to meet you"
Hello, D.M. Tsai
Nice to meet you in the network.
You are so nice.  byebye!
.    <==这里很重要喔,结束时,最后一行输入小数点 . 即可!
Cc:  <==这里是所谓的『副本』,不需要寄给其他人,所以直接 [Enter]
[root@www ~]#  <==出现提示字符,表示输入完毕了!

以 mail vbird1 -s "nice to meet you" < filename 来将文件内容传输即可。

pwck
pwck 这个命令在检查 /etc/passwd 这个账号配置文件内的信息,与实际的家目录是否存在等信息, 还可以比对 /etc/passwd /etc/shadow 的信息是否一致,另外,如果 /etc/passwd 内的数据字段错误时,会提示使用者修订。 一般来说,我只是利用这个玩意儿来检查我的输入是否正确就是了。

总结

  • Linux 操作系统上面,关于账号与群组,其实记录的是 UID/GID 的数字而已;
  • 使用者的账号/群组与 UID/GID 的对应,参考 /etc/passwd 及 /etc/group 两个文件
  • /etc/passwd 文件结构以冒号隔开,共分为七个字段,分别是『账号名称、口令、UID、GID、全名、家目录、shell』
  • UID 只有 0 与非为 0 两种,非为 0 则为一般账号。一般账号又分为系统账号 (1~499) 即可登陆者账号 (大于 500)
  • 账号的口令已经移动到 /etc/shadow 文件中,该文件权限为仅有 root 可以更动。该文件分为九个字段,内容为『 账号名称、加密口令、口令更动日期、口令最小可变动日期、口令最大需变动日期、口令过期前警告日数、口令失效天数、 账号失效日、保留未使用』
  • 使用者可以支持多个群组,其中在新建文件时会影响新文件群组者,为有效群组。而写入 /etc/passwd 的第四个字段者, 称为初始群组。
  • 与使用者创建、更改参数、删除有关的命令为:useradd, usermod, userdel等,口令创建则为 passwd;
  • 与群组创建、修改、删除有关的命令为:groupadd, groupmod, groupdel 等;
  • 群组的观察与有效群组的切换分别为:groups 及 newgrp 命令;
  • useradd 命令作用参考的文件有: /etc/default/useradd, /etc/login.defs, /etc/skel/ 等等
  • 观察用户详细的口令参数,可以使用『 chage -l 账号 』来处理;
  • 用户自行修改参数的命令有: chsh, chfn 等,观察命令则有: id, finger 等
  • ACL 可进行单一个人或群组的权限管理,但 ACL 的启动需要有文件系统的支持;
  • ACL 的配置可使用 setfacl ,查阅则使用 getfacl ;
  • 身份切换可使用 su ,亦可使用 sudo ,但使用 sudo 者,必须先以 visudo 配置可使用的命令;
  • PAM 模块可进行某些程序的验证程序!与 PAM 模块有关的配置文件位于 /etc/pam.d/* 及 /etc/security/*
  • 系统上面账号登陆情况的查询,可使用 w, who, last, lastlog 等;
  • 在线与使用者交谈可使用 write, wall,脱机状态下可使用 mail 传送邮件!

原创粉丝点击