Linux用户深度管理

每个文件和进程,都需要对应一个用户和用户组。

linux系统是通过UID和GID来是识别用户和组的。

其中用户名等同于人名(人类识别),UID和GID等同于身份证号(系统识别)。

linux管理员:root

用户和组的关系

一对一,一对多,多对一,多对多

用户分类

超级用户:UID=0 root

普通用户:UID>=500 由超级用户或者具有超级用户权限的用户创建的用户

虚拟用户:UID={1,499}存在满足文件或者服务启动的需要,一般不能登录。

每个文件和进程,都需要对应一个用户和用户组。

和用户关联的四个文件:

/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow.

用户管理的命令:

useeradd 添加用户

userdel 删除用户

passwd 设置或修改密码 更改/etc/shadow

chage 修改用户密码属性 管理/etc/shadow

usermod 修改用户信息

id 查看用户信息

su 用户角色切换工具

sudo 普通用户不需要root密码就可以执行只有root才能执行相应的命令或具备的目录权限

visudo 配置sudo权限的编辑命令,可以直接vi来编辑/etc/sudoers实现。推荐使用,可以自动检查语法。

groupadd 添加组

groupdel 删除组

groups 查看组信息

whoami 查看当前用户

/etc/skel 目录

/etc/skel 目录是用来存放新用户环境变量的目录,当我们添加新用户时,这个目录下的所有文件会自动被复制到新添加的用户家目录下(cp -a /etc/skel/* /home/新用户名/),默认情况下,/etc/skel 目录下的所有文件都是隐藏文件,通过修改添加、删除/etc/skel 目录下的文件,我们可为新用户提供统一的、标准的、初始化用户环境。

/etc/skel 的企业场景作用:

1、可以把通知内容放到skel,让登录人员看

2、统一初始化新用户的环境变量

3、面试题:出现“-bash-4.1$”问题原因及解决方法

原因:家目录环境变量文件丢失。

解决方法:

su - a(a为前面出现问题的用户)

-bash-4.1$ cp /etc/skel/.bash* .

-bash-4.1$ logout

su -

su - a(a为前面出现问题的用户)

/etc/login.defs配置文件

/etc/login.defs文件是用来定义创建用户时需要的一些用户的配置信息。例如创建用户时,是否需要家目录,UID和GID的范围,用户及密码的有效期限每个文件和进程,都需要对应一个用户和用户组。


linux系统是通过UID和GID来是识

每个文件和进程,都需要对应一个用户和用户组。

linux系统是通过UID和GID来是识别用户和组的。

其中用户名等同于人名(人类识别),UID和GID等同于身份证号(系统识别)。

linux管理员:root

用户和组的关系

一对一,一对多,多对一,多对多

用户分类

超级用户:UID=0 root

普通用户:UID>=500 由超级用户或者具有超级用户权限的用户创建的用户

虚拟用户:UID={1,499}存在满足文件或者服务启动的需要,一般不能登录。

每个文件和进程,都需要对应一个用户和用户组。

和用户关联的四个文件:

/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow.

用户管理的命令:

useeradd 添加用户

userdel 删除用户

passwd 设置或修改密码 更改/etc/shadow

chage 修改用户密码属性 管理/etc/shadow

usermod 修改用户信息

id 查看用户信息

su 用户角色切换工具

sudo 普通用户不需要root密码就可以执行只有root才能执行相应的命令或具备的目录权限

visudo 配置sudo权限的编辑命令,可以直接vi来编辑/etc/sudoers实现。推荐使用,可以自动检查语法。

groupadd 添加组

groupdel 删除组

groups 查看组信息

whoami 查看当前用户

/etc/skel 目录

/etc/skel 目录是用来存放新用户环境变量的目录,当我们添加新用户时,这个目录下的所有文件会自动被复制到新添加的用户家目录下(cp -a /etc/skel/* /home/新用户名/),默认情况下,/etc/skel 目录下的所有文件都是隐藏文件,通过修改添加、删除/etc/skel 目录下的文件,我们可为新用户提供统一的、标准的、初始化用户环境。

/etc/skel 的企业场景作用:

1、可以把通知内容放到skel,让登录人员看

2、统一初始化新用户的环境变量

3、面试题:出现“-bash-4.1$”问题原因及解决方法

原因:家目录环境变量文件丢失。

解决方法:

su - a(a为前面出现问题的用户)

-bash-4.1$ cp /etc/skel/.bash* .

-bash-4.1$ logout

su -

su - a(a为前面出现问题的用户)

/etc/login.defs配置文件

/etc/login.defs文件是用来定义创建用户时需要的一些用户的配置信息。例如创建用户时,是否需要家目录,UID和GID的范围,用户及密码的有效期限等等。

/etc/default/useradd文件

/etc/default/useradd文件是在使用useradd添加用户时的一个需要调用的默认配置文件,可以使用 user -D 参数 这样的命令格式来修改文件里面的内容。可以通过vi 命令直接编辑。

用户密码管理

1、密码要复杂8位以上(字母数字特殊字符)

2、大的企业用户和密码统一管理(相当于活动目录,openldap)

3、动态密码:动态口令,第三方提供,或自己开发

用户删除管理

一般不能确认用户相关目录有没有重要数据,就不能用-r。

1、vi /etc/passwd然后注释掉用户,观察一个月,这样出问题可以还原,相当于操作前备份。

2、把登录shell改成/sbin/nologin。

3、openldap(类似活动目录)账号统一管理的,ldap库里干掉用户,所有服务器全部都没了。

提示:修改删除必须小心谨慎!

useradd参数

-c comenment 新账号passwd的说明栏

-d home_dir  新账号每次登入是所使用的home_dir。预设值为default_home内login名称,并当成登入时目录名称。

-e expire_date 账号终止日期。日期格式为MM/DD/YY。重点

-f inactive_days账号过期几日后永久停止权限。当值为0时账号则被立即停用。当值为-1时则关闭此功能。

-g initial_group group名称或以数字来做为用户登入起始用户组。用户组名须为系统现有存在的名称。用户组数字也须为系统现有存在的名称。用户组数字也须为系统现有存在的用户组。预设数字为1.

-G group,[...]  定义此用户为不同groups的成员。每个用户组使用“,”分隔。用户组名同-g选项的限制。默认值为用户的起始用户组。重点

-m  用户目录如不存在则自动建立。如使用-k选项,skeleton——dir内的档案将复制至用户目录下,然而在/etc/skel目录下的档案也会复制过去取代。任何在skeleton_dir /etc/skel的目录也相同会在用户目录下意义建立。The-k 同-m不建立目录以及不复制任何档案为预设值。

-M  不建立用户家目录,优先于/etc/login.defs文件的设定。一般创建虚拟用户时不建立家目录,部署服务时需要创建虚拟用户。重点

-n  默认情况用户的用户组与用户的名称会相同。如果命令加了-n参数,就不会生成和用户同名的用户组了。

-r  此参数是用来建立系统账号。系统账号的UID会比定义在系统档上/etc/login.defs.的UID_MIN来的小。注意useradd此用法所建立的账号不会建立用户家目录,也不会在乎记录在/etc/login,defs.的定义值。如果你想要拥有用户家目录须额外指定-m参数来建立系统账号。这是Red HAT额外增设的选项。

-s shell  用户登入后使用的shell名称。默认值为不填写,这样系统会帮你指定预设的登入shell。

-u uid  用户的ID值。这个值必须是唯一的,除非用-o选项。数字不可为负值。

passwd 参数

-f , --force force operation #强制操作;仅root权限才能操作

-x,--maximum=DAYS #两次密码修改的最大天数,后面接数字;仅root权限操作

-n,--minimum=DAYS #两次密码修改的最小天数,后面接数字;仅root权限操作

-w,--warning=DAYS #在距多少天体系用户修改密码;仅root权限才能操作

-i,--inactive=DAYS #在密码过期后多少天,用户被禁掉;仅root权限才能操作

chage参数

-d,--lastday 最近日期 #将最近一次密码设置时间设为“最近日期”。

-E,--expiredate 过期日期 #将账户过期时间设为“过期日期”,日期写法:MM/DD/YY。

-h,--help #显示此帮助信息并退出

-i,-inactive 失效密码 #在密码过期后多少天,用户被禁掉;仅root权限才能操作

-l,--list #显示账户年龄信息

-m,-mindays 最小天数 #将两次改变密码之间相距的最小天数设为“最小天数”

-M,--maxdays 最大天数 #将两次改变密码之间相距的最大天数设为“最大天数”

-W,warndays 警告天数 #将过期警告天数设为“警告天数”

usermod参数

-c comment #增加用户账号/etc/passwd中的注释说明栏(第五栏)。-c参数功能也可使用功能chfn

命令来修改,当然也可以手工修改/etc/passwd文件来实现。

-d home_dir #更新用户新的家目录,如果给定-m选项,用户旧的家目录会搬到新的家目录去,

如旧的家目录不存在则创建新的。

-e expire_date #加上用户账户停止日期。日期格式:MM/DD/YY。

-f inactive_days #账号过期几日后永久停权。当值为0时账号则立即被停权。当值为-1时则关闭此功能,预 设值为-1.

-g initial_group #更新用户新的起始登入用户组。用户组名须已存在。用户组ID必须参照既有的用户组。用 户组ID预设值为1.

-G group ,[...] #定义用户为一堆groups的成员。每个用户使用“,”隔开。用户在名同-g选项的限制。

-l login_name 变更用户login时名称为login_name,其余信息不变。

-s shell 指定新用户登入shell。如此栏留白,系统将选用系统预设shell。这个-s参数功能也可以使用chsh命令来修改。当然也可以手工修改/etc/passwd文件来实现。

-u uid 指定用户的ID值。这个值必须是唯一的,除非用-o选项。数字不可为负值。

-L 冻结用户的密码,使之无法登录,实际就是间接修改/etc/shadow的密码栏。在密码栏的开头加上“!”号,即表示冻结。这个功能和usermod -e , chage -E或passwd -l等命令有类似功效,就是让用户无法正常登录。

-U 取消冻结用户的密码,使之恢复登录,实际同样是修改/etc/shadow的密码栏,在密码栏的开头取消“!”号,即表示恢复。

用户查询相关命令

id, finger, users, w, who, last, lastlog, groups

用户及日志查询:w who

查看用户登录信息:当前last  历史lastlog

查看用户所属:全部id 组groups主属和附加组users

su 切换用户

-,-l,-login make the shell a login shell 是一个shell成为登录的shell,如执行su - oldboy时,表示该用户想改变身份为oldboy,并且使用oldboy用户的环境配置,如:/home/oldboy/.bash_profile等。

-c,--command=COMMAND pass a single COMMAND to the with -c

切换到一个shell下,执行一个命令,然后退出所切换的用户环境。

-m, --preserve-environment do not reset environment variables,same as -p

切换用户时,不重置用户环境变量,-p的功能同-m,这个参数为su的默认值, 一般较少使用

不加“-”的话,家目录仍是root。

su - oldboy -c pwd 切到oldboy下执行pwd命令  切到用户下执行命令,但当前用户不变

由su和su -的区别谈学习linux运维方法  http://oldboy.blog.51cto.com/2561410/1053606 

env|grep -i 用户名 查看用户环境变量

sudo尚方宝剑

su切换用户方便,但有一些致命的缺点:

1)普通用户必须知道root密码才可以切换到root,这样root密码就泄露了。相当于把“刀把”交给了别人。

2)使用su命令切换身份,无法对切换后的身份做精细的控制,拿到别人超级权限的人可以为所欲为。甚至可以更改root密码,让真正的管理员无法拥有root权限。

为了既不泄露密码,又让普通用户拥有一定的超级权限,推出sudo命令。

通过sudo命令,我们可以把某些超级用户权限分类,有针对性授权给指定的普通用户,并且普通用户不需要知道root密码就可以得到root权限。

sudo的配置文件:/etc/sudoers

sudo命令执行的大概流程:

a)当用sudo执行命令时,系统首先会查找/var/run/sudo/%HOME(新用户会先生成此目录)目录中是否有用户时间戳文件,如果时间戳文件过期,则提示用户输入自身密码(注意:这里需要输入当前执行命令用户的密码,不是root后其他要切换的用户的密码)。

b)当密码验证成功后,系统查找/etc/sudoers配置文件,判断用户是否有执行相应sudo命令权限。

c)如果具备执行相应sudo权限,就会自动由当前用户切到root(或其他指定切换到的用户),然后以root(或其他指定的切换到的用户)身份角色执行该命令。

d)执行完成后,又会自动的直接退回到当前用户shell下(以root等身份执行任务)。

更改授权/etc/sudoers文件

1)执行visudo命令自动编辑/etc/sudoers文件(推荐)

visudo 在98行,为普通用户提权

sudo命令配置时环境配置一定是全路径。

2)直接修改/etc/sudoers文件方法(不推荐)

echo "oldboy  ALL=(ALL)  ALL" >> /etc/sudoers

visudo -c #检查语法

sudo参数

-l  列出用户在主机上可用和被禁止的命令;配置好sudo授权规则后,可用此参数查看授权情况

-v  验证用户时间戳;可跟踪最新时间戳

-u  指定以某个用户身份执行特定命令

-k  删除时间戳,下一个sudo命令要求提供密码

对用户组进行授权:

echo "%oldboy  ALL=(ALL)  ALL" >> /etc/sudoers  #配置oldboy组的授权,也可以通过visudo来更改。

tail -l /etc/sudoers  #查看授权配置

visudo -c  #检查语法

ls -l /etc/sudoers  #检查/etc/sudoers权限

usermod -g oldboy ett  #更改ett属于oldboy组

id ett  #查看更改结果

别名类型(Alias_Type):

1)Host_Alias 定义主机别名

1.在生产场景中,一般不需要设置主机别名,在定义授权规则时可以通过ALL来匹配所有主机。

2.注意定义规范(Host_Alias  FILESERVERS  =  fs1,  fs2 #等号两边有空格逗号后面有空格),虽然不是必须的,但我们还是要求能够按照系统的标准来配置,这样可以避免意外的问题发生。

3.以上Host_Aliases内容截取自/etc/sudoers文件,并取消了注释。

4.其实就是逻辑上的主机组,当多台服务器共享一个/etc/sudoers时候会用到主机别名。

5.%oldboy  ALL=(ALL)  ALL #第一个ALL就是主机别名的应用位置。

6.%oldboy  FILESERVERS=(ALL)  ALL  #相当于里面有两台机器

2)User_Alias定义用户别名

1.设置用户别名也不是必须的,可以通过%groupname的方式来作为成员。

2.#User_Alias ADMINS = jsmith, mikem, %groupname

给ADMINS授权相当于同时授权给jsmith, mikem, %groupname

oldboy  ALL=(ALL)  ALL #oldboy就是主机别名的应用位置。

3)Runas_Alias 定义runas身份别名

1.这个别名指定的是“用户身份”,即sudo允许切换到的用户身份。

2.Runas_Alias定义的是用户可以执行sudo切换身份到Runas_Alias下包含的成员身份。

3.实际语法 Runas_Alias OP = root

4.oldboy  ALL=(ALL)  ALL #小括号中的第二个ALL的位置就是Runas_Alias别名的应用位置。

4)Cmnd_Alias定义命令别名

1.命令别名就是设置可以执行哪些命令。

2.oldboy  ALL=(ALL)  ALL #第三个ALL的位置就是命令别名的位置。

3.所有的命令别名下的成员必须是文件或目录的绝对路径。

4.命令别名超过一行,可用“\”换行。

5.在定义时,可以使用正则表达式,如/usr/bin/passwd [A-Za-z]*。

sudo授权,别名和具体授权配置的关系

用户和组

主机

可以切换的用户角色

命令

root

ALL=

(ALL)

ALL

User_Alias ADMINS = jsmith, mikem,  %groupname

Host_Alias FILESERVERS  =  fs1,  fs2

Runas_Alias OP = root

Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

什么情况下使用上述别名?

工作中一般有多个系统用户,需要分类,分层次管理用户时。

别名应用

Linux系统安全最小原则

最小化原则对Linux系统安全来说极其重要:即多一事不如少一事。

具体包括:

▲安装Linux系统最小化,即选包最小化,yum安装软件包也要最小化,无用的包不装

▲开机自启动服务最小化,即无用的服务不开启。

▲操作命令最小化。例:能“rm -f a.txt”就不用“rm -fr a.txt”。

▲登录Linux用户最小化。平时没有特殊需求就不登录root,用普通用户登录即可。

▲普通用户授权最小化,即只给用户必须管理系统的命令,不能啥都可以干。

▲Linux系统文件及目录的权限设置最小化,禁止随意创建、更改、删除文件。

配置sudo命令用户行为日志审计

说明:所谓sudo命令日志审计,并不记录普通用户的普通操作。而是记录执行sudo命令的用户操作。

项目实战:简历中的经验说明

服务器日志审计项目提出与实施

1.权限方案实施后,权限得到了细化控制,接下来进一步实施对所有用户日志记录方案。

2.通过sudo和syslog(rsyslog)配合实现对所有用户进行日志审计并将记录集中管理(发送到中心日志服务器)。

3.实施后让所有运维和开发的所有执行的sudo管理命令都有记录可查,杜绝了内部人员的操作安全隐患。

生产环境企业日志审计解决方案:

所谓日志审计,就是所有系统及相关用户行为的信息,并且可以自动分析、处理、展示(包括文本或录像)

1)通过环境变量命令及rsyslog服务进行全部日志审计(信息太大)。

2)sudo配合rsyslog服务,进行日志审计(审计信息较少)

3)在bash解释器程序里嵌入一个监视器,让所有被审计的系统用户使用修改过的增加了监视器的特殊bash程序作为解释程序。

4)齐治的堡垒机(齐治科技堡垒主机系统):商业产品

https://wenku.baidu.com/view/76b3b3e6f18583d0486459 (齐治科技堡垒主机系统技术白皮书)

5)Python开发的开源产品

开源跳板机(堡垒机)Jumpserver部署详解

http://blog.51cto.com/zt/658

开源堡垒机CrazyEye

http://3060674.blog.51cto.com/3050674/1700814

sudo日志审计

1)安装sudo命令,syslog服务(Centoa6.4为rsyslog服务)

2)配置/var/sudoers(其实只要一行就可搞定sudo审计)

下面3,4可以不执行,直接切换到普通操作,然后查看/var/log/sudo.log有无记录。

3)配置文件系统日志/etc/rsyslog.conf(可以不配)

4)重启rsyslog内核日志记录器

日志集中管理

1)rsync+inotify或定时任务+rsync,推到日志管理器上,10.0.0.7_2013.0303.sudo.log

2)rsylog服务来处理。

echo "10.0.2.164 logserver" >> /etc/hosts #日志服务器地址

echo "*.info  @logserver" >> /etc/syslog.conf #时候所有日志推送

3)日志收集解决方案scribe,Flume,stom,logstash ELK

别用户和组的。


其中用户名等同于人名(人类识别),UID和GID等同于身份证号(系统识别)。


linux管理员:root


用户和组的关系


一对一,一对多,多对一,多对多


用户分类


超级用户:UID=0 root


普通用户:UID>=500 由超级用户或者具有超级用户权限的用户创建的用户


虚拟用户:UID={1,499}存在满足文件或者服务启动的需要,一般不能登录。


每个文件和进程,都需要对应一个用户和用户组。


和用户关联的四个文件:


/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow.


用户管理的命令:


useeradd 添加用户


userdel 删除用户


passwd 设置或修改密码 更改/etc/shadow


chage 修改用户密码属性 管理/etc/shadow


usermod 修改用户信息


id 查看用户信息


su 用户角色切换工具


sudo 普通用户不需要root密码就可以执行只有root才能执行相应的命令或具备的目录权限


visudo 配置sudo权限的编辑命令,可以直接vi来编辑/etc/sudoers实现。推荐使用,可以自动检查语法。


groupadd 添加组


groupdel 删除组


groups 查看组信息


whoami 查看当前用户


/etc/skel 目录


/etc/skel 目录是用来存放新用户环境变量的目录,当我们添加新用户时,这个目录下的所有文件会自动被复制到新添加的用户家目录下(cp -a /etc/skel/* /home/新用户名/),默认情况下,/etc/skel 目录下的所有文件都是隐藏文件,通过修改添加、删除/etc/skel 目录下的文件,我们可为新用户提供统一的、标准的、初始化用户环境。


/etc/skel 的企业场景作用:


1、可以把通知内容放到skel,让登录人员看


2、统一初始化新用户的环境变量


3、面试题:出现“-bash-4.1$”问题原因及解决方法


原因:家目录环境变量文件丢失。


解决方法:


su - a(a为前面出现问题的用户)


-bash-4.1$ cp /etc/skel/.bash* .


-bash-4.1$ logout


su -


su - a(a为前面出现问题的用户)


/etc/login.defs配置文件


/etc/login.defs文件是用来定义创建用户时需要的一些用户的配置信息。例如创建用户时,是否需要家目录,UID和GID的范围,用户及密码的有效期限等等。


/etc/default/useradd文件


/etc/default/useradd文件是在使用useradd添加用户时的一个需要调用的默认配置文件,可以使用 user -D 参数 这样的命令格式来修改文件里面的内容。可以通过vi 命令直接编辑。


用户密码管理


1、密码要复杂8位以上(字母数字特殊字符)


2、大的企业用户和密码统一管理(相当于活动目录,openldap)


3、动态密码:动态口令,第三方提供,或自己开发


用户删除管理


一般不能确认用户相关目录有没有重要数据,就不能用-r。


1、vi /etc/passwd然后注释掉用户,观察一个月,这样出问题可以还原,相当于操作前备份。


2、把登录shell改成/sbin/nologin。


3、openldap(类似活动目录)账号统一管理的,ldap库里干掉用户,所有服务器全部都没了。


提示:修改删除必须小心谨慎!


useradd参数


-c comenment 新账号passwd的说明栏


-d home_dir  新账号每次登入是所使用的home_dir。预设值为default_home内login名称,并当成登入时目录名称。


-e expire_date 账号终止日期。日期格式为MM/DD/YY。重点


-f inactive_days账号过期几日后永久停止权限。当值为0时账号则被立即停用。当值为-1时则关闭此功能。


-g initial_group group名称或以数字来做为用户登入起始用户组。用户组名须为系统现有存在的名称。用户组数字也须为系统现有存在的名称。用户组数字也须为系统现有存在的用户组。预设数字为1.


-G group,[...]  定义此用户为不同groups的成员。每个用户组使用“,”分隔。用户组名同-g选项的限制。默认值为用户的起始用户组。重点


-m  用户目录如不存在则自动建立。如使用-k选项,skeleton——dir内的档案将复制至用户目录下,然而在/etc/skel目录下的档案也会复制过去取代。任何在skeleton_dir /etc/skel的目录也相同会在用户目录下意义建立。The-k 同-m不建立目录以及不复制任何档案为预设值。


-M  不建立用户家目录,优先于/etc/login.defs文件的设定。一般创建虚拟用户时不建立家目录,部署服务时需要创建虚拟用户。重点


-n  默认情况用户的用户组与用户的名称会相同。如果命令加了-n参数,就不会生成和用户同名的用户组了。


-r  此参数是用来建立系统账号。系统账号的UID会比定义在系统档上/etc/login.defs.的UID_MIN来的小。注意useradd此用法所建立的账号不会建立用户家目录,也不会在乎记录在/etc/login,defs.的定义值。如果你想要拥有用户家目录须额外指定-m参数来建立系统账号。这是Red HAT额外增设的选项。


-s shell  用户登入后使用的shell名称。默认值为不填写,这样系统会帮你指定预设的登入shell。


-u uid  用户的ID值。这个值必须是唯一的,除非用-o选项。数字不可为负值。


passwd 参数


-f , --force force operation #强制操作;仅root权限才能操作


-x,--maximum=DAYS #两次密码修改的最大天数,后面接数字;仅root权限操作


-n,--minimum=DAYS #两次密码修改的最小天数,后面接数字;仅root权限操作


-w,--warning=DAYS #在距多少天体系用户修改密码;仅root权限才能操作


-i,--inactive=DAYS #在密码过期后多少天,用户被禁掉;仅root权限才能操作


chage参数


-d,--lastday 最近日期 #将最近一次密码设置时间设为“最近日期”。


-E,--expiredate 过期日期 #将账户过期时间设为“过期日期”,日期写法:MM/DD/YY。


-h,--help #显示此帮助信息并退出


-i,-inactive 失效密码 #在密码过期后多少天,用户被禁掉;仅root权限才能操作


-l,--list #显示账户年龄信息


-m,-mindays 最小天数 #将两次改变密码之间相距的最小天数设为“最小天数”


-M,--maxdays 最大天数 #将两次改变密码之间相距的最大天数设为“最大天数”


-W,warndays 警告天数 #将过期警告天数设为“警告天数”


usermod参数


-c comment #增加用户账号/etc/passwd中的注释说明栏(第五栏)。-c参数功能也可使用功能chfn


命令来修改,当然也可以手工修改/etc/passwd文件来实现。


-d home_dir #更新用户新的家目录,如果给定-m选项,用户旧的家目录会搬到新的家目录去,


如旧的家目录不存在则创建新的。


-e expire_date #加上用户账户停止日期。日期格式:MM/DD/YY。


-f inactive_days #账号过期几日后永久停权。当值为0时账号则立即被停权。当值为-1时则关闭此功能,预 设值为-1.


-g initial_group #更新用户新的起始登入用户组。用户组名须已存在。用户组ID必须参照既有的用户组。用 户组ID预设值为1.


-G group ,[...] #定义用户为一堆groups的成员。每个用户使用“,”隔开。用户在名同-g选项的限制。


-l login_name 变更用户login时名称为login_name,其余信息不变。


-s shell 指定新用户登入shell。如此栏留白,系统将选用系统预设shell。这个-s参数功能也可以使用chsh命令来修改。当然也可以手工修改/etc/passwd文件来实现。


-u uid 指定用户的ID值。这个值必须是唯一的,除非用-o选项。数字不可为负值。


-L 冻结用户的密码,使之无法登录,实际就是间接修改/etc/shadow的密码栏。在密码栏的开头加上“!”号,即表示冻结。这个功能和usermod -e , chage -E或passwd -l等命令有类似功效,就是让用户无法正常登录。


-U 取消冻结用户的密码,使之恢复登录,实际同样是修改/etc/shadow的密码栏,在密码栏的开头取消“!”号,即表示恢复。


用户查询相关命令


id, finger, users, w, who, last, lastlog, groups


用户及日志查询:w who


查看用户登录信息:当前last  历史lastlog


查看用户所属:全部id 组groups主属和附加组users


su 切换用户


-,-l,-login make the shell a login shell 是一个shell成为登录的shell,如执行su - oldboy时,表示该用户想改变身份为oldboy,并且使用oldboy用户的环境配置,如:/home/oldboy/.bash_profile等。


-c,--command=COMMAND pass a single COMMAND to the with -c


切换到一个shell下,执行一个命令,然后退出所切换的用户环境。


-m, --preserve-environment do not reset environment variables,same as -p


切换用户时,不重置用户环境变量,-p的功能同-m,这个参数为su的默认值, 一般较少使用


不加“-”的话,家目录仍是root。


su - oldboy -c pwd 切到oldboy下执行pwd命令  切到用户下执行命令,但当前用户不变


由su和su -的区别谈学习linux运维方法  http://oldboy.blog.51cto.com/2561410/1053606 


env|grep -i 用户名 查看用户环境变量


sudo尚方宝剑


su切换用户方便,但有一些致命的缺点:


1)普通用户必须知道root密码才可以切换到root,这样root密码就泄露了。相当于把“刀把”交给了别人。


2)使用su命令切换身份,无法对切换后的身份做精细的控制,拿到别人超级权限的人可以为所欲为。甚至可以更改root密码,让真正的管理员无法拥有root权限。


为了既不泄露密码,又让普通用户拥有一定的超级权限,推出sudo命令。


通过sudo命令,我们可以把某些超级用户权限分类,有针对性授权给指定的普通用户,并且普通用户不需要知道root密码就可以得到root权限。


sudo的配置文件:/etc/sudoers


sudo命令执行的大概流程:


a)当用sudo执行命令时,系统首先会查找/var/run/sudo/%HOME(新用户会先生成此目录)目录中是否有用户时间戳文件,如果时间戳文件过期,则提示用户输入自身密码(注意:这里需要输入当前执行命令用户的密码,不是root后其他要切换的用户的密码)。


b)当密码验证成功后,系统查找/etc/sudoers配置文件,判断用户是否有执行相应sudo命令权限。


c)如果具备执行相应sudo权限,就会自动由当前用户切到root(或其他指定切换到的用户),然后以root(或其他指定的切换到的用户)身份角色执行该命令。


d)执行完成后,又会自动的直接退回到当前用户shell下(以root等身份执行任务)。


更改授权/etc/sudoers文件


1)执行visudo命令自动编辑/etc/sudoers文件(推荐)


visudo 在98行,为普通用户提权


sudo命令配置时环境配置一定是全路径。


2)直接修改/etc/sudoers文件方法(不推荐)


echo "oldboy  ALL=(ALL)  ALL" >> /etc/sudoers


visudo -c #检查语法


sudo参数


-l  列出用户在主机上可用和被禁止的命令;配置好sudo授权规则后,可用此参数查看授权情况


-v  验证用户时间戳;可跟踪最新时间戳


-u  指定以某个用户身份执行特定命令


-k  删除时间戳,下一个sudo命令要求提供密码


对用户组进行授权:


echo "%oldboy  ALL=(ALL)  ALL" >> /etc/sudoers  #配置oldboy组的授权,也可以通过visudo来更改。


tail -l /etc/sudoers  #查看授权配置


visudo -c  #检查语法


ls -l /etc/sudoers  #检查/etc/sudoers权限


usermod -g oldboy ett  #更改ett属于oldboy组


id ett  #查看更改结果


别名类型(Alias_Type):


1)Host_Alias 定义主机别名


1.在生产场景中,一般不需要设置主机别名,在定义授权规则时可以通过ALL来匹配所有主机。


2.注意定义规范(Host_Alias  FILESERVERS  =  fs1,  fs2 #等号两边有空格逗号后面有空格),虽然不是必须的,但我们还是要求能够按照系统的标准来配置,这样可以避免意外的问题发生。


3.以上Host_Aliases内容截取自/etc/sudoers文件,并取消了注释。


4.其实就是逻辑上的主机组,当多台服务器共享一个/etc/sudoers时候会用到主机别名。


5.%oldboy  ALL=(ALL)  ALL #第一个ALL就是主机别名的应用位置。


6.%oldboy  FILESERVERS=(ALL)  ALL  #相当于里面有两台机器


2)User_Alias定义用户别名


1.设置用户别名也不是必须的,可以通过%groupname的方式来作为成员。


2.#User_Alias ADMINS = jsmith, mikem, %groupname


给ADMINS授权相当于同时授权给jsmith, mikem, %groupname


oldboy  ALL=(ALL)  ALL #oldboy就是主机别名的应用位置。


3)Runas_Alias 定义runas身份别名


1.这个别名指定的是“用户身份”,即sudo允许切换到的用户身份。


2.Runas_Alias定义的是用户可以执行sudo切换身份到Runas_Alias下包含的成员身份。


3.实际语法 Runas_Alias OP = root


4.oldboy  ALL=(ALL)  ALL #小括号中的第二个ALL的位置就是Runas_Alias别名的应用位置。


4)Cmnd_Alias定义命令别名


1.命令别名就是设置可以执行哪些命令。


2.oldboy  ALL=(ALL)  ALL #第三个ALL的位置就是命令别名的位置。


3.所有的命令别名下的成员必须是文件或目录的绝对路径。


4.命令别名超过一行,可用“\”换行。


5.在定义时,可以使用正则表达式,如/usr/bin/passwd [A-Za-z]*。


sudo授权,别名和具体授权配置的关系


用户和组


主机


可以切换的用户角色


命令


root


ALL=


(ALL)


ALL


User_Alias ADMINS = jsmith, mikem,  %groupname


Host_Alias FILESERVERS  =  fs1,  fs2


Runas_Alias OP = root


Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig


什么情况下使用上述别名?


工作中一般有多个系统用户,需要分类,分层次管理用户时。


别名应用


Linux系统安全最小原则


最小化原则对Linux系统安全来说极其重要:即多一事不如少一事。


具体包括:


▲安装Linux系统最小化,即选包最小化,yum安装软件包也要最小化,无用的包不装


▲开机自启动服务最小化,即无用的服务不开启。


▲操作命令最小化。例:能“rm -f a.txt”就不用“rm -fr a.txt”。


▲登录Linux用户最小化。平时没有特殊需求就不登录root,用普通用户登录即可。


▲普通用户授权最小化,即只给用户必须管理系统的命令,不能啥都可以干。


▲Linux系统文件及目录的权限设置最小化,禁止随意创建、更改、删除文件。


配置sudo命令用户行为日志审计


说明:所谓sudo命令日志审计,并不记录普通用户的普通操作。而是记录执行sudo命令的用户操作。


项目实战:简历中的经验说明


服务器日志审计项目提出与实施


1.权限方案实施后,权限得到了细化控制,接下来进一步实施对所有用户日志记录方案。


2.通过sudo和syslog(rsyslog)配合实现对所有用户进行日志审计并将记录集中管理(发送到中心日志服务器)。


3.实施后让所有运维和开发的所有执行的sudo管理命令都有记录可查,杜绝了内部人员的操作安全隐患。


生产环境企业日志审计解决方案:


所谓日志审计,就是所有系统及相关用户行为的信息,并且可以自动分析、处理、展示(包括文本或录像)


1)通过环境变量命令及rsyslog服务进行全部日志审计(信息太大)。


2)sudo配合rsyslog服务,进行日志审计(审计信息较少)


3)在bash解释器程序里嵌入一个监视器,让所有被审计的系统用户使用修改过的增加了监视器的特殊bash程序作为解释程序。


4)齐治的堡垒机(齐治科技堡垒主机系统):商业产品


https://wenku.baidu.com/view/76b3b3e6f18583d0486459 (齐治科技堡垒主机系统技术白皮书)


5)Python开发的开源产品


开源跳板机(堡垒机)Jumpserver部署详解


http://blog.51cto.com/zt/658


开源堡垒机CrazyEye


http://3060674.blog.51cto.com/3050674/1700814


sudo日志审计


1)安装sudo命令,syslog服务(Centoa6.4为rsyslog服务)


2)配置/var/sudoers(其实只要一行就可搞定sudo审计)


下面3,4可以不执行,直接切换到普通操作,然后查看/var/log/sudo.log有无记录。


3)配置文件系统日志/etc/rsyslog.conf(可以不配)


4)重启rsyslog内核日志记录器


日志集中管理


1)rsync+inotify或定时任务+rsync,推到日志管理器上,10.0.0.7_2013.0303.sudo.log


2)rsylog服务来处理。


echo "10.0.2.164 logserver" >> /etc/hosts #日志服务器地址


echo "*.info  @logserver" >> /etc/syslog.conf #时候所有日志推送


3)日志收集解决方案scribe,Flume,stom,logstash ELK等等。

/etc/default/useradd文件

/etc/default/useradd文件是在使用useradd添加用户时的一个需要调用的默认配置文件,可以使用 user -D 参数 这样的命令格式来修改文件里面的内容。可以通过vi 命令直接编辑。

用户密码管理

1、密码要复杂8位以上(字母数字特殊字符)

2、大的企业用户和密码统一管理(相当于活动目录,openldap)

3、动态密码:动态口令,第三方提供,或自己开发

用户删除管理

一般不能确认用户相关目录有没有重要数据,就不能用-r。

1、vi /etc/passwd然后注释掉用户,观察一个月,这样出问题可以还原,相当于操作前备份。

2、把登录shell改成/sbin/nologin。

3、openldap(类似活动目录)账号统一管理的,ldap库里干掉用户,所有服务器全部都没了。

提示:修改删除必须小心谨慎!

useradd参数

-c comenment 新账号passwd的说明栏

-d home_dir  新账号每次登入是所使用的home_dir。预设值为default_home内login名称,并当成登入时目录名称。

-e expire_date 账号终止日期。日期格式为MM/DD/YY。重点

-f inactive_days账号过期几日后永久停止权限。当值为0时账号则被立即停用。当值为-1时则关闭此功能。

-g initial_group group名称或以数字来做为用户登入起始用户组。用户组名须为系统现有存在的名称。用户组数字也须为系统现有存在的名称。用户组数字也须为系统现有存在的用户组。预设数字为1.

-G group,[...]  定义此用户为不同groups的成员。每个用户组使用“,”分隔。用户组名同-g选项的限制。默认值为用户的起始用户组。重点

-m  用户目录如不存在则自动建立。如使用-k选项,skeleton——dir内的档案将复制至用户目录下,然而在/etc/skel目录下的档案也会复制过去取代。任何在skeleton_dir /etc/skel的目录也相同会在用户目录下意义建立。The-k 同-m不建立目录以及不复制任何档案为预设值。

-M  不建立用户家目录,优先于/etc/login.defs文件的设定。一般创建虚拟用户时不建立家目录,部署服务时需要创建虚拟用户。重点

-n  默认情况用户的用户组与用户的名称会相同。如果命令加了-n参数,就不会生成和用户同名的用户组了。

-r  此参数是用来建立系统账号。系统账号的UID会比定义在系统档上/etc/login.defs.的UID_MIN来的小。注意useradd此用法所建立的账号不会建立用户家目录,也不会在乎记录在/etc/login,defs.的定义值。如果你想要拥有用户家目录须额外指定-m参数来建立系统账号。这是Red HAT额外增设的选项。

-s shell  用户登入后使用的shell名称。默认值为不填写,这样系统会帮你指定预设的登入shell。

-u uid  用户的ID值。这个值必须是唯一的,除非用-o选项。数字不可为负值。

passwd 参数

-f , --force force operation #强制操作;仅root权限才能操作

-x,--maximum=DAYS #两次密码修改的最大天数,后面接数字;仅root权限操作

-n,--minimum=DAYS #两次密码修改的最小天数,后面接数字;仅root权限操作

-w,--warning=DAYS #在距多少天体系用户修改密码;仅root权限才能操作

-i,--inactive=DAYS #在密码过期后多少天,用户被禁掉;仅root权限才能操作

chage参数

-d,--lastday 最近日期 #将最近一次密码设置时间设为“最近日期”。

-E,--expiredate 过期日期 #将账户过期时间设为“过期日期”,日期写法:MM/DD/YY。

-h,--help #显示此帮助信息并退出

-i,-inactive 失效密码 #在密码过期后多少天,用户被禁掉;仅root权限才能操作

-l,--list #显示账户年龄信息

-m,-mindays 最小天数 #将两次改变密码之间相距的最小天数设为“最小天数”

-M,--maxdays 最大天数 #将两次改变密码之间相距的最大天数设为“最大天数”

-W,warndays 警告天数 #将过期警告天数设为“警告天数”

usermod参数

-c comment #增加用户账号/etc/passwd中的注释说明栏(第五栏)。-c参数功能也可使用功能chfn

命令来修改,当然也可以手工修改/etc/passwd文件来实现。

-d home_dir #更新用户新的家目录,如果给定-m选项,用户旧的家目录会搬到新的家目录去,

如旧的家目录不存在则创建新的。

-e expire_date #加上用户账户停止日期。日期格式:MM/DD/YY。

-f inactive_days #账号过期几日后永久停权。当值为0时账号则立即被停权。当值为-1时则关闭此功能,预 设值为-1.

-g initial_group #更新用户新的起始登入用户组。用户组名须已存在。用户组ID必须参照既有的用户组。用 户组ID预设值为1.

-G group ,[...] #定义用户为一堆groups的成员。每个用户使用“,”隔开。用户在名同-g选项的限制。

-l login_name 变更用户login时名称为login_name,其余信息不变。

-s shell 指定新用户登入shell。如此栏留白,系统将选用系统预设shell。这个-s参数功能也可以使用chsh命令来修改。当然也可以手工修改/etc/passwd文件来实现。

-u uid 指定用户的ID值。这个值必须是唯一的,除非用-o选项。数字不可为负值。

-L 冻结用户的密码,使之无法登录,实际就是间接修改/etc/shadow的密码栏。在密码栏的开头加上“!”号,即表示冻结。这个功能和usermod -e , chage -E或passwd -l等命令有类似功效,就是让用户无法正常登录。

-U 取消冻结用户的密码,使之恢复登录,实际同样是修改/etc/shadow的密码栏,在密码栏的开头取消“!”号,即表示恢复。

用户查询相关命令

id, finger, users, w, who, last, lastlog, groups

用户及日志查询:w who

查看用户登录信息:当前last  历史lastlog

查看用户所属:全部id 组groups主属和附加组users

su 切换用户

-,-l,-login make the shell a login shell 是一个shell成为登录的shell,如执行su - oldboy时,表示该用户想改变身份为oldboy,并且使用oldboy用户的环境配置,如:/home/oldboy/.bash_profile等。

-c,--command=COMMAND pass a single COMMAND to the with -c

切换到一个shell下,执行一个命令,然后退出所切换的用户环境。

-m, --preserve-environment do not reset environment variables,same as -p

切换用户时,不重置用户环境变量,-p的功能同-m,这个参数为su的默认值, 一般较少使用

不加“-”的话,家目录仍是root。

su - oldboy -c pwd 切到oldboy下执行pwd命令  切到用户下执行命令,但当前用户不变

由su和su -的区别谈学习linux运维方法  http://oldboy.blog.51cto.com/2561410/1053606 

env|grep -i 用户名 查看用户环境变量

sudo尚方宝剑

su切换用户方便,但有一些致命的缺点:

1)普通用户必须知道root密码才可以切换到root,这样root密码就泄露了。相当于把“刀把”交给了别人。

2)使用su命令切换身份,无法对切换后的身份做精细的控制,拿到别人超级权限的人可以为所欲为。甚至可以更改root密码,让真正的管理员无法拥有root权限。

为了既不泄露密码,又让普通用户拥有一定的超级权限,推出sudo命令。

通过sudo命令,我们可以把某些超级用户权限分类,有针对性授权给指定的普通用户,并且普通用户不需要知道root密码就可以得到root权限。

sudo的配置文件:/etc/sudoers

sudo命令执行的大概流程:

a)当用sudo执行命令时,系统首先会查找/var/run/sudo/%HOME(新用户会先生成此目录)目录中是否有用户时间戳文件,如果时间戳文件过期,则提示用户输入自身密码(注意:这里需要输入当前执行命令用户的密码,不是root后其他要切换的用户的密码)。

b)当密码验证成功后,系统查找/etc/sudoers配置文件,判断用户是否有执行相应sudo命令权限。

c)如果具备执行相应sudo权限,就会自动由当前用户切到root(或其他指定切换到的用户),然后以root(或其他指定的切换到的用户)身份角色执行该命令。

d)执行完成后,又会自动的直接退回到当前用户shell下(以root等身份执行任务)。

更改授权/etc/sudoers文件

1)执行visudo命令自动编辑/etc/sudoers文件(推荐)

visudo 在98行,为普通用户提权

sudo命令配置时环境配置一定是全路径。

2)直接修改/etc/sudoers文件方法(不推荐)

echo "oldboy  ALL=(ALL)  ALL" >> /etc/sudoers

visudo -c #检查语法

sudo参数

-l  列出用户在主机上可用和被禁止的命令;配置好sudo授权规则后,可用此参数查看授权情况

-v  验证用户时间戳;可跟踪最新时间戳

-u  指定以某个用户身份执行特定命令

-k  删除时间戳,下一个sudo命令要求提供密码

对用户组进行授权:

echo "%oldboy  ALL=(ALL)  ALL" >> /etc/sudoers  #配置oldboy组的授权,也可以通过visudo来更改。

tail -l /etc/sudoers  #查看授权配置

visudo -c  #检查语法

ls -l /etc/sudoers  #检查/etc/sudoers权限

usermod -g oldboy ett  #更改ett属于oldboy组

id ett  #查看更改结果

别名类型(Alias_Type):

1)Host_Alias 定义主机别名

1.在生产场景中,一般不需要设置主机别名,在定义授权规则时可以通过ALL来匹配所有主机。

2.注意定义规范(Host_Alias  FILESERVERS  =  fs1,  fs2 #等号两边有空格逗号后面有空格),虽然不是必须的,但我们还是要求能够按照系统的标准来配置,这样可以避免意外的问题发生。

3.以上Host_Aliases内容截取自/etc/sudoers文件,并取消了注释。

4.其实就是逻辑上的主机组,当多台服务器共享一个/etc/sudoers时候会用到主机别名。

5.%oldboy  ALL=(ALL)  ALL #第一个ALL就是主机别名的应用位置。

6.%oldboy  FILESERVERS=(ALL)  ALL  #相当于里面有两台机器

2)User_Alias定义用户别名

1.设置用户别名也不是必须的,可以通过%groupname的方式来作为成员。

2.#User_Alias ADMINS = jsmith, mikem, %groupname

给ADMINS授权相当于同时授权给jsmith, mikem, %groupname

oldboy  ALL=(ALL)  ALL #oldboy就是主机别名的应用位置。

3)Runas_Alias 定义runas身份别名

1.这个别名指定的是“用户身份”,即sudo允许切换到的用户身份。

2.Runas_Alias定义的是用户可以执行sudo切换身份到Runas_Alias下包含的成员身份。

3.实际语法 Runas_Alias OP = root

4.oldboy  ALL=(ALL)  ALL #小括号中的第二个ALL的位置就是Runas_Alias别名的应用位置。

4)Cmnd_Alias定义命令别名

1.命令别名就是设置可以执行哪些命令。

2.oldboy  ALL=(ALL)  ALL #第三个ALL的位置就是命令别名的位置。

3.所有的命令别名下的成员必须是文件或目录的绝对路径。

4.命令别名超过一行,可用“\”换行。

5.在定义时,可以使用正则表达式,如/usr/bin/passwd [A-Za-z]*。

sudo授权,别名和具体授权配置的关系

用户和组

主机

可以切换的用户角色

命令

root

ALL=

(ALL)

ALL

User_Alias ADMINS = jsmith, mikem,  %groupname

Host_Alias FILESERVERS  =  fs1,  fs2

Runas_Alias OP = root

Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

什么情况下使用上述别名?

工作中一般有多个系统用户,需要分类,分层次管理用户时。

别名应用

Linux系统安全最小原则

最小化原则对Linux系统安全来说极其重要:即多一事不如少一事。

具体包括:

▲安装Linux系统最小化,即选包最小化,yum安装软件包也要最小化,无用的包不装

▲开机自启动服务最小化,即无用的服务不开启。

▲操作命令最小化。例:能“rm -f a.txt”就不用“rm -fr a.txt”。

▲登录Linux用户最小化。平时没有特殊需求就不登录root,用普通用户登录即可。

▲普通用户授权最小化,即只给用户必须管理系统的命令,不能啥都可以干。

▲Linux系统文件及目录的权限设置最小化,禁止随意创建、更改、删除文件。

配置sudo命令用户行为日志审计

说明:所谓sudo命令日志审计,并不记录普通用户的普通操作。而是记录执行sudo命令的用户操作。

项目实战:简历中的经验说明

服务器日志审计项目提出与实施

1.权限方案实施后,权限得到了细化控制,接下来进一步实施对所有用户日志记录方案。

2.通过sudo和syslog(rsyslog)配合实现对所有用户进行日志审计并将记录集中管理(发送到中心日志服务器)。

3.实施后让所有运维和开发的所有执行的sudo管理命令都有记录可查,杜绝了内部人员的操作安全隐患。

生产环境企业日志审计解决方案:

所谓日志审计,就是所有系统及相关用户行为的信息,并且可以自动分析、处理、展示(包括文本或录像)

1)通过环境变量命令及rsyslog服务进行全部日志审计(信息太大)。

2)sudo配合rsyslog服务,进行日志审计(审计信息较少)

3)在bash解释器程序里嵌入一个监视器,让所有被审计的系统用户使用修改过的增加了监视器的特殊bash程序作为解释程序。

4)齐治的堡垒机(齐治科技堡垒主机系统):商业产品

https://wenku.baidu.com/view/76b3b3e6f18583d0486459 (齐治科技堡垒主机系统技术白皮书)

5)Python开发的开源产品

开源跳板机(堡垒机)Jumpserver部署详解

http://blog.51cto.com/zt/658

开源堡垒机CrazyEye

http://3060674.blog.51cto.com/3050674/1700814

sudo日志审计

1)安装sudo命令,syslog服务(Centoa6.4为rsyslog服务)

2)配置/var/sudoers(其实只要一行就可搞定sudo审计)

下面3,4可以不执行,直接切换到普通操作,然后查看/var/log/sudo.log有无记录。

3)配置文件系统日志/etc/rsyslog.conf(可以不配)

4)重启rsyslog内核日志记录器

日志集中管理

1)rsync+inotify或定时任务+rsync,推到日志管理器上,10.0.0.7_2013.0303.sudo.log

2)rsylog服务来处理。

echo "10.0.2.164 logserver" >> /etc/hosts #日志服务器地址

echo "*.info  @logserver" >> /etc/syslog.conf #时候所有日志推送

3)日志收集解决方案scribe,Flume,stom,logstash ELK

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章