说明:

1、这篇博文记录的是CentOS 7 用户账户的配置,包括添加用户、添加用户组、删除用户、删除用户组等。其中包括分析用户的配置文件、目录以及对安全的思考。

2、用户配置方面CentOS 7与以往版本感觉没有差别。

第一部分 认识用户

  Centos 7 系统最小化安装,默认配置,是没有创建其他用户的。作为服务器操作系统,为了安全起见,一般是使用一般用户。这就牵涉到用户、用户组的创建以及删除。

此外,CentOS 7 和其他版本的Linux一样,都具有相应用户的配置文件及目录,如下:

/etc/passwd         //用户账户信息,可以看出用户名称 
/etc/shadow //用户账户加密后信息,包括但不限于/etc/passwd中的信息
/etc/group //组账户信息,可以看出组名称
/etc/gshadow     //组账户安全信息,包括但不限于/etc/group中的信息
/etc/default/useradd //账户创建时默认值
/etc/skel/ //包含默认文件的目录,具体作用尚不清楚
/etc/login.defs //安全性的默认配置,与上面/etc/default/useradd有区别

  我们看一下比较重要的配置文件/etc/default/useradd,内容如下:

# useradd defaults file
GROUP=100 //起始GID值
HOME=/home //家目录位置
INACTIVE=-1             //有效时间,负值为永久,正数代表天数
EXPIRE=
SHELL=/bin/bash //shell路径
SKEL=/etc/skel //默认配置文件路径
CREATE_MAIL_SPOOL=yes //是否创建邮件池,具体作用待以后学习

  我们再来看一下/etc/login.defs文件,重点内容如下:

MAIL_DIR        /var/spool/mail
... # Password aging controls: 密码期限配置
#
#       PASS_MAX_DAYS   Maximum number of days a password may be used.
#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
#       PASS_MIN_LEN    Minimum acceptable password length.
#       PASS_WARN_AGE   Number of days warning given before a password expires.
#
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    8
PASS_WARN_AGE   7
... # Min/max values for automatic uid selection in useradd 最小/最大UID设置
#
UID_MIN                  1000 //我们创建的用户的UID从1000开始
UID_MAX                 60000
.... # Min/max values for automatic gid selection in groupadd
#
GID_MIN                  1000
GID_MAX                 60000
....
CREATE_HOME     yes //是否创建家目录
... # Use SHA512 to encrypt password. //采用SHA512加密
ENCRYPT_METHOD SHA512

  从文件内容可见,/etc/login.defs 是比较宏观的进行偏重安全方面的配置。

  下面是一些实际过程中常用的命令:

useradd         //添加用户
passwd //为用户设置密码
userdel //删除用户
usermod //修改用户信息
groupadd //添加用户组
groupdel //删除用户组
groupmod //修改用户组信息
groups //显示当前进程用户所属的用户组

第二部分  创建用户

例子一: 最简单的创建用户

执行如下命令:

useradd test

passwd test

  实例如图,并且系统会对密码做限制,比如长度、复杂度,但是不影响创建。可以理解为“温馨提示”。

  这样一个用户名为test的用户已经创建好了。我们看一下属性。

  执行命令:id test   //查看用户信息

  我们发现test的uid=1000,gid=1000,位于test用户组,说明缺参数的新建用户,会默认新建一个与用户名同名的用户组并加入其中,我们也注意到UID、GID的值与默认的配置文件中保持一致,可见配置文件是生效的,同样也可以再新建一个用户,看一下UID、GID的值,会看到是1001.可以尝试一下。我们可以切到/home目录下,会看到用户目录,与配置文件设定一致。

例子二:带参数的创建账户

  上个例子我们采用默认配置,只是设置了用户名和密码。这次我们手动设置UID、GID等。首先我们看一下,useradd的参数,如下:

 -b, --base-dir BASE_DIR       新账户的主目录的基目录
-c, --comment COMMENT 新账户的 GECOS 字段
-d, --home-dir HOME_DIR 新账户的主目录
-D, --defaults 显示或更改默认的 useradd 配置
-e, --expiredate EXPIRE_DATE 新账户的过期日期
-f, --inactive INACTIVE 新账户的密码不活动期
-g, --gid GROUP 新账户主组的名称或 ID
-G, --groups GROUPS 新账户的附加组列表
-h, --help 显示此帮助信息并推出
-k, --skel SKEL_DIR 使用此目录作为骨架目录
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-l, --no-log-init 不要将此用户添加到最近登录和登录失败数据库
-m, --create-home 创建用户的主目录
-M, --no-create-home 不创建用户的主目录
-N, --no-user-group 不创建同名的组
-o, --non-unique 允许使用重复的 UID 创建用户
-p, --password PASSWORD 加密后的新账户密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
-s, --shell SHELL 新账户的登录 shell
-u, --uid UID 新账户的用户 ID
-U, --user-group 创建与用户同名的组
-Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER

  新建一个UID=501,GID=600,30天有效期,家目录为/home/test5的用户test4.

命令 :

groupadd -g   test3                //创建GID=600的用户组test3
useradd -u -g -f -m -d /home/test5 test4

当我们再次打开用户文件/etc/passwd或者id test4会看到我们自己的配置。

uid=501(test4) gid=600(test3) 组=600(test3)
第三部分 更改用户设置

  不同的 用户需要不同的权限,拥有不同的SHELL,是否允许登录。这个部分,就需要用到usermod命令修改用户配置。我们上个例子中创建过一个test账户,默认SHELL是/bin/bash,是可以登录的。

禁止登录:

usermod -s /sbin/nologin test //-s 指定shell 

修改用户名:

 usermod -l test88 test //-l 新的用户名

此外还可以家目录、过期天数、更换组、锁定用户、解锁用户等功能,可以查看参数实践。

第四部分 删除用户/组

  当我们创建用户/组有错误时,可能会删除用户/组,然后再重新创建。我们使用userdel命令来删除用户。

执行命令:

[root@localhost home]# userdel test
[root@localhost home]# useradd test
useradd:警告:此主目录已经存在。
不从 skel 目录里向其中复制任何文件。
正在创建信箱文件: 文件已存在

  出现这个问题是因为我们删除用户时,系统为了安全起见并没有删除相关的文件以及目录。我们查看一下userdel参数:

用法:userdel [选项] 登录

选项:
-f, --force force some actions that would fail otherwise
e.g. removal of user still logged in
or files, even if not owned by the user
-h, --help 显示此帮助信息并推出
-r, --remove 删除主目录和邮件池
-R, --root CHROOT_DIR chroot 到的目录
-Z, --selinux-user 为用户删除所有的 SELinux 用户映射

  我们可以使用参数-rf 来删除相关文件目录,这一步具有危险性,是否有回滚操作,不是特别清楚。

执行命令:

[root@localhost home]# userdel -rf test
[root@localhost home]# useradd test

  这样,就不会出现提示了。

第五部分 用户安全配置

  在操作系统安全中,用户权限、文件权限也是非常重要。现在就几个小点记录一下。这次目的主要有禁止root用户连接、一般用户使用sudo命令提权。我们在上个步骤中,创建了一个test用户,当我们输入sudo命令时,会提示如下:

test不在 sudoers 文件中。此事将被报告。

解决这个问题,我们只需要在/etc/sudoers 中添加用户test即可,代码如下:

//找到如下一行,在下面添加即可
.....
root ALL=(ALL) ALL
test ALL=(ALL) ALL //这一行是添加的

到这里应该就可以解决问题了。

新增:在虚拟机里面重新安装了一个CentOS 7,实验了一下,确实可以成功。下面是/etc/sudoers 属性:

可以看到拥有setUID权限,任何用户都有x(执行)权限,故可以执行sudo命令。下面的内容就当作是对setUID权限的理解。

ps.因为之前按照网上的资料对其他部分进行了设置,但是感觉并不影响,下面贴出修改的部分及其目的

//修改文件 /usr/bin/sudo 用户及用户组
chown root:root /usr/bin/sudo
//修改权限为4755,其中4代表以文件所有者执行
chmod /usr/bin/sudo

上面的命令意思是,将文件/usr/bin/sudo拥有者改为root,当执行时以root身份执行,这也是‘4’的含义。如果设置权限时,勿把“4755” 配置为755,就会出现这个错误。

sudo:有效用户 ID 不是 ,sudo 属于 root 并设置了 setuid 位吗?

解决方法呢,就是刚才说的以root(uid=0)身份运行。

在实际环境中,为了防止黑客对root账户进行暴力破解,我们通常禁止root账户SSH远程连接。操作如下:

//修改 /etc/ssh/sshd.config 文件,

#PermitRootLogin yes
修改为
PermitRootLogin no //重启sshd服务
systemctl restart sshd.service

备注:CentOS 7 取消了service 用法,尽管部分情况下还可以使用,但是我就先使用systemctl吧。

  除此之外,我觉得最重要的还是不同用户间的权限分配问题。先暂时留下来,以后根据实际情况添加笔记。

  大家,还可以根据参数,依据实际情况配置。大家可以相互交流。

CentOS 7 用户账户配置的更多相关文章

  1. centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课

    centos    LAMP第二部分apache配置  下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转  配置apache的访问日志  配置静态文件缓存  配置防盗链 ...

  2. CentOS FTP基于虚拟用户的配置

    详细可以看:http://www.linuxidc.com/Linux/2013-12/94242.htm 所谓虚拟用户就是没有使用真实的帐户,只是通过映射到真实帐户和设置权限的目的.虚拟用户不能登录 ...

  3. ASP.net core 2.0.0 中 asp.net identity 2.0.0 的基本使用(三)—用户账户及cookie配置

    修改用户账户及cookie配置 一.修改密码强度和用户邮箱验证规则: 打开Startup.cs,找到public void ConfigureServices(IServiceCollection s ...

  4. MongoDB学习(配置用户账户和访问控制)

    理解admin数据库 安装MongoDB时,会自动创建admin数据库,这是一个特殊的库.有些用户账户角色赋予用户操作多个数据库的权限,而这些用户只能在admin数据库中创建.要创建有权操作所有数据库 ...

  5. CentOS 7.0安装配置Vsftp服务器

    一.配置防火墙,开启FTP服务器需要的端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...

  6. CentOS 6.5安装配置LNMP服务器(Nginx+PHP+MySQL)

    CentOS 6.5安装配置LNMP服务器(Nginx+PHP+MySQL) 一.准备篇: /etc/init.d/iptables stop #关闭防火墙 关闭SELINUX vi /etc/sel ...

  7. 如何在 CentOS 7 用 cPanel 配置 Nginx 反向代理

    导读 Nginx 是最快和最强大的 Web 服务器之一,以其高性能和低资源占用率而闻名.它既可以被安装为一个独立的 Web 服务器,也可以安装成反向代理 Web 服务器.在这篇文章,我将讨论在安装了 ...

  8. CentOS 7.0安装配置Vsftp服务器步骤详解

    安装Vsftp讲过最多的就是在centos6.x版本中了,这里小编看到有朋友写了一篇非常不错的CentOS 7.0安装配置Vsftp服务器教程,下面整理分享给各位. 一.配置防火墙,开启FTP服务器需 ...

  9. 【转发】【linux】【ftp】CentOS 7.0安装配置Vsftp服务器

    adduser -d /var/www/android -g ftp -s /sbin/nologin ftp2 一.配置防火墙,开启FTP服务器需要的端口 CentOS 7.0默认使用的是firew ...

随机推荐

  1. Lua读写文件

    文件读写 文件读写对制作游戏很有帮助.可以调用别的文件中的代码,保存最高分.游戏存档.玩家状态等信写到文件中. 首先,让我们看一个简单的命令:dofile.这个命令会读入另一个文件的代码并立即执行. ...

  2. 使用jmeter对ActiveMQ集群性能方案进行评估--转载

    原文地址:http://www.51testing.com/html/78/23978-143163.html 1.测试概要1.1 关于这篇文档中涉及的基于JMS的消息系统能为应用程序提供可靠的,高性 ...

  3. Lambdas in Java 8--reference

    Part 1 reference:http://jaxenter.com/lambdas-in-java-8-part-1-49700.html Get to know lambda expressi ...

  4. Anatomy of the Linux kernel--转

    ref:http://www.ibm.com/developerworks/linux/library/l-linux-kernel/?S_TACT=105AGX52&S_CMP=cn-a-l ...

  5. python UTC,时间戳,字符串转换

    #!/usr/bin/env python #_*_coding:utf-8_*_ # 本地时间 转换 为时间戳 import time import pytz import datetime dat ...

  6. Access to the path '' is denied.解决方案

    在本地测试正常,但一上传到服务器上的时候,那个就提示Access to the path ‘路径’ is denied.我在网上找了很多资料,最后终于解决了,原来是因为在该文件的上级文件夹没有修改权限 ...

  7. SOA与C#

    What is SOA? SOA or Service oriented architecture is an architecture style for building business app ...

  8. extjs中grid对于其中表单的表头的读取以及是否隐藏的判断

    //获取grid的表头信息 var columns=baseGrid.columns;                     alert(columns.length); //判断列是否隐藏并输出表 ...

  9. 【php基础】XML,DTD实例

    要求一:能看懂别人写的DTD文件,自己能写更好.例如products.dtd: <!ENTITY AUTHOR "John Doe"> <!ENTITY COMP ...

  10. 【CSS3】---阴影 box-shadow

    box-shadow是向盒子添加阴影.支持添加一个或者多个.实现了投影效果 语法: box-shadow: X轴偏移量 Y轴偏移量 [阴影模糊半径] [阴影扩展半径] [阴影颜色] [投影方式] 参数 ...