Linux下不使用useradd创建用户
Linux下手动创建用户的全过程:需要管理员权限。
1.在/etc/group中添加用户所属组的相关信息。如果用户还有辅助组则在对应组中加入该用户作为成员。
2.在/etc/passwd和/etc/shadow中添加用户相关信息。此时指定的家目录还不存在,密码不存在,所以/etc/shadow的密码位使用“!!”代替。
3.创建家目录。cp -r /etc/skel /home/user_name。
4.修改家目录及子目录的所有者和属组。
chown -R user_name:user_name /home/user_name
5.修改家目录及子目录的权限。例如设置组和其他用户无任何权限但所有者有:chmod -R go= /home/user_name
到此为止,用户已经创建完成了,只是没有密码,所以只能su,不能登录。
6.生成密码。使用openssl passwd -1 -salt '12345678'生成使用md5算法的密码,此时要求输入密码,然后将生成的密码复制到/etc/shadow对应用户的密码位。
其中-1是指md5,-salt '12345678'是使用8位的字符创建密码的杂项,8位字符任意指定。虽然新版本的passwd文件中的算法是SHA512(6),但也支持md5(1)。
这里也可以使用passwd命令直接修改密码。
7.测试手动创建的用户是否可以正确登录。
以下为步骤:请千万记得备份这些相关文件。
mkdir /tmp/12;cp /etc/group /etc/passwd /etc/shadow /tmp/12/ /*备份这几个文件*/
echo "userX:x:666" >> /etc/group
echo "userX:x:666:666::/home/userX:/bin/bash" >> /etc/passwd
echo 'userX:!!:17121:0:99999::::' >> /etc/shadow
cp -r /etc/skel /home/userX
chown -R userX:userX /home/userX
chmod -R go= /home/userX
passwd --stdin userX <<< '123456'
测试使用userX是否可以登录。
如果是使用openssl passwd创建的密码。那么使用下面的方法将这部分密码替换到/etc/shadow中。
field=$(cat /etc/shadow | cut -d":" -f2)
password=$(openssl passwd -1 -salt 'abcdefg' 123456)
sed -i '$s%'$field'%'$password'%' /etc/shadow