useradd 添加用户
passwd 修改用户密码
userdel 删除用户,默认不删除用户主目录和email,如果想删除可加 –r 参数
groupadd 添加组
gpasswd 修改组密码(用的非常少)
groupdel 删除组
需要注意四个文件:
/etc/passwd 存储用户信息:用户名,UID,GID,帐号描述,主目录,登录后的shell等信息‘
/etc/shadow 存储用户密码信息: 用户名,密码,密码使用期限,禁用时间等等
/etc/group 存储组信息:组名,GID,组成员等
/etc/gshadow 组密码相关信息
当我们使用 useradd shrek 添加shrek用户时,linux都做了哪些工作呢?
首先会创建用户和与用户同名的组,我们看一下,对应的文件
# tail -3 /etc/passwd sshd:x:116:65534::/var/run/sshd:/usr/sbin/nologin zhangsan:x:1001:1001::/home/zhangsan: shrek:x:1002:1002::/home/shrek:
# tail -3 /etc/group sambashare:x:124:huanghao zhangsan:x:1001: shrek:x:1002:
可以看到,用户和组都创建了;
同时创建/home/shrek目录,接着会复制一些文件进去
cp –r /etc/skel/* /home/shrek/
最后设置一下权限
chown –R shrek shrek /home/shrek
好了,到这里用户就创建完成了,linux系统为创建用户做了一系列的工作。
那这四个文件里的内容到底是什么呢?
/etc/passwd
pulse:x:115:122:PulseAudio daemon,,,:/var/run/pulse:/bin/false huanghao:x:1000:1000:huanghao,,,:/home/huanghao:/bin/bash sshd:x:116:65534::/var/run/sshd:/usr/sbin/nologin zhangsan:x:1001:1001::/home/zhangsan: shrek:x:1002:1002::/home/shrek:
可以看出文件中是用:来分隔的,各段的意思是:
用户名:密码(x表示有密码,空表示无密码):UID:GID:用户描述信息:家目录:登录后的shell
/etc/shadow
sshd:*:16825:0:99999:7::: zhangsan:$6$OsmW2vs/$Iuth6FJfDqn7s9MQvagO2./BjOXcCeUH/LxSqdth3KXdF.qxC.2wyL5yA0EasxSnevlNra0LdXj2n7annlJyU/:16825:0:99999:7::: shrek:!:16847:0:99999:7::: 用户名:密码(md5加密后的,$$之间是阀值):unixtime(1970.1.1至今的天数):密码最短历史:密码最长历史:过期前多少天通知::多少
天禁用用户
密码最短历史: 0表示任意时间,如果设为1,则表示1天后才能修改密码
密码最长历史: 最长99999天
多少天后禁用用户: 也是unixtime来算
/etc/group
sambashare:x:124:huanghao zhangsan:x:1001: shrek:x:1002: 组名:是否有密码:GID:组成员
注意组成员如果有多个,用,分隔
/etc/gpasswd 这个里面没什么内容,略过。。
那么问题来了:A机器上有200个用户,现在新装了机器B,想把用户转移过去,怎么办呢?
直接将这四个文件复制过去,然后将home目录复制过去就好了。 一切皆文件嘛。
刚才看了四个文件,我们在创建用户的时候有些属性是没有设置的,比如密码历史时间什么的,但是也默认有了。那这些默认属性在哪里设置的呢?
/etc/login.defs, 这个文件里可以设置用户的默认属性
# cat /etc/login.defs |grep -v '^#'|grep -v '^$' MAIL_DIR /var/mail FAILLOG_ENAB yes LOG_UNKFAIL_ENAB no LOG_OK_LOGINS no SYSLOG_SU_ENAB yes SYSLOG_SG_ENAB yes FTMP_FILE /var/log/btmp SU_NAME su HUSHLOGIN_FILE .hushlogin ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games TTYGROUP tty TTYPERM 0600 ERASECHAR 0177 KILLCHAR 025 UMASK 022 PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_WARN_AGE 7 UID_MIN 1000 UID_MAX 60000 GID_MIN 1000 GID_MAX 60000 LOGIN_RETRIES 5 LOGIN_TIMEOUT 60 CHFN_RESTRICT rwh DEFAULT_HOME yes USERGROUPS_ENAB yes ENCRYPT_METHOD SHA512
下面看几个命令
usermod 修改用户属性
usermod –G root,bin,todd shrek 将shrek用户所属组修改为root,bin,todd,注意是修改,不是追加
id shrek 查看用户属性
gpasswd –M shrek,todd,ttt root 将多个用户加入root组
到这问题又来了,如果不小心删除了这四个文件,怎么办?系统还能登录吗?
可以使用单用户模式进入系统
ll /etc/passwd passwd passwd-
看到了吗,有一个passwd-的文件,这是passwd的备份,复制一份就行了,其它三个文件一样都有备份。
继续我们的命令:
users 显示当前登录的用户,只显示用户名
who 也是显示当前登录的用户,但要详细一些
w 这个就更详细了
# w 13:03:32 up 21 days, 22:25, 3 users, load average: 2.12, 2.07, 2.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT huangxm :0 :0 25 1月16 ?xdm? 4:04m 0.48s init --user huangxm pts/11 :0 25 1月16 21days 0.42s 0.42s bash huangxm pts/1 192.168.0.201 一16 4.00s 0.37s 0.05s sshd: huanghao [priv]
kill –9 pts/1 踢掉pts/1的用户
write 给当前联机的某个用户发消息,注意需要使用mesg y 打开开关才可以使用
write “hahahah” pts/1 发送消息到pts/1
wall “hahahahha” 发送消息给所有控制台
last 查看谁登录了系统,什么时间登录的
# last huanghao pts/1 192.168.0.201 Mon Feb 15 16:20 still logged in huanghao pts/24 192.168.0.201 Thu Feb 4 14:04 - 02:54 (10+12:50) huanghao pts/1 192.168.0.201 Wed Feb 3 16:54 - 02:54 (11+10:00)
finger shrek 查看shrek用户信息,可能需要安装才可以使用
# finger shrek Login: shrek Name: Directory: /home/shrek Shell: /bin/sh Never logged in. No mail. No Plan.