前言
操作系统版本:Centos 7
因为安全原因,操作系统被加固。加固过后,无法创建或者修改sftp账号。
正文
1. 如果系统已经加固,那么创建一个新用户,会报错如下:useradd: cannot open /etc/passwd
[root@localhost ~]# useradd test
useradd: cannot open /etc/passwd
2. 查看passwd文件的隐藏属性:
[root@localhost ~]# lsattr /etc/passwd
----i----------- /etc/passwd
上面的 i 表示文件不可修改,因此,执行 useradd test 命令时,会提示不能打开该文件。
3. 修改文件的隐藏属性,去掉 i 属性:
[root@localhost ~]# chattr -i /etc/passwd
[root@localhost ~]#
使用chattr -i 即可删除 i 属性,再次查看文件隐藏属性:
[root@localhost ~]# lsattr /etc/passwd
---------------- /etc/passwd
此时,会发现 i 属性已经没有了。再次创建用户:
[root@localhost ~]# useradd test
useradd: cannot open /etc/group
[root@localhost ~]#
提示不能打开group文件,重复上面的步骤,将group的隐藏属性去掉,再次执行创建用户命令,看是否还有异常信息,直到创建用户成功。
为了简述,这里就直接罗列出创建用户涉及到的文件:
/etc/passwd
/etc/group
/etc/shadow
/etc/gshadow
检查以上四个文件的隐藏属性,如果包含 i ,则对其进行修改,直到用户创建成功。
[root@localhost ~]# useradd test
[root@localhost ~]# cat /etc/passwd|grep test
test:x:1003:1003::/home/test:/bin/bash
4. 创建密码:
[root@localhost ~]# passwd test
Changing password for user test.
New password:
BAD PASSWORD: it is too simplistic/systematic
Retype new password:
passwd: Authentication token manipulation error
密码创建失败,报错信息:passwd: Authentication token manipulation error 。这时需要检查/etc/pam.d/system-auth文件。加固时,会修改该文件,增加密码的复杂度等规则。由于彼此修改的规则不同,因此,为了省事,建议找一个未加固的版本来替换,当然,首先需要备份当前文件/etc/pam.d/system-auth,比如:
cp /etc/pam.d/system-auth /etc/pam.d/system-auth.backup
注意:system-auth 可能是一个软链接,指向的是/etc/pam.d/system-auth-ac,所以需要注意修改的文件是否准确。
这里放一个未加固的配置供参考,可用此配置来绕过密码创建失败的问题:
#%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authconfig is run. auth required pam_env.so auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 1000 quiet_success auth required pam_deny.so account required pam_unix.so account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 1000 quiet account required pam_permit.so password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so -session optional pam_systemd.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so
直接将上面的内容复制,然后粘贴至/etc/pam.d/system-auth里面即可。接下来,重新执行创建密码的命令:
[root@localhost pam.d]# passwd test
Changing password for user test.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost pam.d]#
上面为test用户设置的密码也是test,密码设置成功。
后续其他动作,我这里就不在赘述,比如:修改目录所属用户组,修改目录的读写权限等等。
待上述操作都执行完后,我们还需要将之前修改的所有配置都改回去,保证系统依然是加固版本,避免不安全因素发生。
5. 恢复加固,前面提到的删除隐藏属性用到的是chattr -i,恢复隐藏属性则用:chattr +i。- 表示删除,+表示增加,很好记吧。为了直观对比,以下命令在执行修改前后都先输出了文件当前的隐藏属性:
[root@localhost pam.d]# lsattr /etc/passwd
---------------- /etc/passwd
[root@localhost pam.d]# chattr +i /etc/passwd
[root@localhost pam.d]# lsattr /etc/passwd
----i----------- /etc/passwd
同样的方法,将/etc/group,/etc/shadow,/etc/gshadow 都加上隐藏属性。
另外,我们还修改了/etc/pam.d/system-auth文件,将备份文件恢复即可:
cp /etc/pam.d/system-auth.backup /etc/pam.d/system-auth
至此,加固恢复完毕,想要验证是否生效,则可以创建一个新用户,比如:useradd test1,看看是否允许创建即可。