用户在计算机中识别并不是通过名字,而是通过ID进行识别。
每个登录的用户都至少两个ID,一个用户ID称UID,一个为用户组ID为GID
关于修改用户UID GID等可以在/etc/passwd中修改,但是注意若不修改回来,就会导致很多文件的归属问题,因为文件不会跟随用户UID改变而更改所属ID,这样会导致修改的用户失去之前文件的所有权。甚至连自己的目录也无法访问
/etc/passwd 并没有关于账户密码的信息,实际密码其实是放在/etc/shadow,但我并没看到。。。
可能是加密的原因吧
一般UID有讲究
- 0为系统管理员
- 1-499为系统账号(1-99为系统自带的账号,100-499为用户有需要可自建)通常是不可登录的
- 500-65535 为用户可登录账号
同理对于组也有 /etc/group /etc/gshadow对应GID信息和密码信息,其实和上面两个大同小异
特别的,如果想一个用户组加入其他用户可在最后第四字段加上 “用户1,用户2....”
一旦一个用户是用户组A和B 这样它能获得权限的并集
查看当前账户的用户组 groups
groups出现的第一个用户组就是你的有效用户组,你创建的文件都是属于这个用户组的,而不属于另一个。你可以通过newgrp +用户组切换账户的有效用户组
其实newgrp切换有效用户组,其实就是换了一个新的shell环境,如果退出用exit
创建账户 useradd .... 用户账户名
-u UID -g 初始用户组 -G 次要用户组 ...
一般来说用户账户会创建主文件夹,而系统账号(1-499)是不会的
Centos还会让用户创建一个用户组,但也有系统如SuSE会让新创建的用户隶属于一个默认用户组
关于useradd中的默认值在/etc/default/useradd文件中,也可通过useradd -D 中查看
/etc/login.defs是关于账户密码管理等配置
添加密码就是
passwd 用户名 //若没说就是修改自己密码
passwd还能让账户密码失效,不让用户登录 (根本原因是改变了/etc/shadow中密码的长度)
更详细管理密码的期限,过期时期,警告时期,失效时期什么的就用chage命令
对帐户进行修改则使用usermod 这是关系到/etc/passwd /etc/shadow等文件的修改
userdel 删除用户 参数-r 将主文件夹也删除
chfn 账号名 修改账户的个人信息,是真的个人信息比如说真名,电话什么的。(在/etc/passwd可找到没什么用)
chsh 修改账户的使用shell
-l 当前可用的shell
-s shell地址 修改shell
id 查询自己账户的UID GID 等ID信息
新增删除用户组
新建用户组
groupadd -g gid /-r(新建的用户组是系统用户组) 用户组
修改用户组
groupmod -g gid -n group_name 用户组
删除用户组(有用户关联(作为初始用户组)的话不能删除)
groupdel 用户组
用户管理员
gpasswd -A user1,user2...... -M user4 groupname
代表将user1,user2....作为groupname的group管理员
而将user4作为成员添加进组中 (注意管理员并不意味着已经进入组中,不过它可以自己添加自己进去)
g'passwd groupname 为这个组添加密码
对于组管理员来说可进行这个操作
gpasswd [-ad] user groupname a为添加,d为删除
ACL
更加精确地控制用户权限
针对用户,用户组设置权限
可以新建的文件目录设置默认的权限
账号切换
切换身份 su
主要参数 - 用户名 代表以login-shell登录系统 如果后面没有加用户名就代表为root身份
-l 和上面类似
注意su 有没有加-差别很大,没有加-的话no-login状态登录,虽然的确是变了身份,但其实很多变量还是不会改变身份。
所以如果是彻底转换身份 应该是 su - 用户
如果只是想执行一个命令则可以用sudo (虽然su -c也可以)
sudo [-b] [-u 新用户账号] +命令 (-b 让后续命令让系统自动执行,而不与当前的 shell产生影响
但实际上能否使用sudo 要看 /etc/sudoers中有没有这个账号但是我们不用vim去修改这个文件(有语法规定)
采用visudo,然后进入一个文件也是一堆文字注释
然后你在 root ALL=(ALL) ALL 下添加 用户名 ALL=(ALL) ALL 就可
什么意思呢? 其实是 用户账号 登陆者来源主机名=(可切换的身份) 可执行的命令
也可设置为组支持 就是同样的操作,只不过在组名左边加上%
这样只要在这个组中的用户都可以进行用户转换
命令可以指定 但是要用绝对路径 不过我们可以在里面设置别名 比如User_Alias 注意别名要全大写
用户信息传递
last 可以查询该主机登录信息
w who 显示当前登录的账号
lastlog 表示各个用户上次登录的日期 (其实是在查询文件 /var/log/lastlog)
用户聊天
我们可以和其他用户进行在线交流
write 账号 [用户所在终端接口] (我们可通过who进行查询,接下来输入文字内容,然后ctrl+d 输入完毕)
这时候另一方就会无条件地收到信息,如果不想接收信息则 mesg n ,可以直接mesg查看状态
但是root老大的信息还是会被收到
我们也可以发送广播 wall + 信息 这样所有人都会接收到(除了mesg n的账户)
上述聊天是针对在线的用户进行交流,如果想离线交流就要采用邮箱的方式,我们邮箱都会放在/var/spool/mail/用户
mail 账户
subject: 标题
正文
. //这个点很关键,代表结束
然后接收方就可以用mail,进入邮箱界面
这是常见命令 数字代表第几个邮件,enter则读取信息
然后 d+数字代表删除信,h+数字则列出信件清单,同时将准备读取该序号的信件
x 不操作则离开,之前删除的信件操作都为无效
q 则代表保存离开,将刚才删除的信件移除,或者将阅读过的信件存入~/mbox当中 如果之后想读取未删除但已读的信件,就要 mail -f ~/mbox 可能~要用绝对路径表示