说明:html
一、这篇博文记录的是CentOS 7 用户帐户的配置,包括添加用户、添加用户组、删除用户、删除用户组等。其中包括分析用户的配置文件、目录以及对安全的思考。linux
二、用户配置方面CentOS 7与以往版本感受没有差异。shell
第一部分 认识用户数据库
Centos 7 系统最小化安装,默认配置,是没有建立其余用户的。做为服务器操做系统,为了安全起见,通常是使用通常用户。这就牵涉到用户、用户组的建立以及删除。安全
此外,CentOS 7 和其余版本的Linux同样,都具备相应用户的配置文件及目录,以下:bash
/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文件,重点内容以下:ssh
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 是比较宏观的进行偏重安全方面的配置。学习
下面是一些实际过程当中经常使用的命令:ui
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 600 test3 //建立GID=600的用户组test3 useradd -u 501 -g 600 -f 30 -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 4755 /usr/bin/sudo
上面的命令意思是,将文件/usr/bin/sudo拥有者改成root,当执行时以root身份执行,这也是‘4’的含义。若是设置权限时,勿把“4755” 配置为755,就会出现这个错误。
sudo:有效用户 ID 不是 0,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吧。
除此以外,我以为最重要的仍是不一样用户间的权限分配问题。先暂时留下来,之后根据实际状况添加笔记。
你们,还能够根据参数,依据实际状况配置。你们能够相互交流。