目录
01.用户配置文件
通过用户配置文件来实现用户身份界定和认证
- 用户信息文件/etc/passwd
- 用户口令文件/etc/shadow
- 组信息文件/etc/group
- 组口令文件/etc/gshadow
001.用户信息文件/etc/passwd
vi /etc/passwd
7个字段:
- 用户名称,字符串;比如root,txp,user1
- 有无口令,x表示一个占位符,表示有口令。根据安全登录协议ssh,用户没有口令则不能登录系统
- 用户ID,整型,用户的标志位
– 0,不管用户名是什么,都是超级用户
– 1~999,系统保留编号(伪用户编号);为了方便管理系统进程(服务),当作一个用户使用,比如lp,打印服务的进程,用户编号为4;
– 1000及以上,普通用户编号
vi /etc/login.defs
- 组ID,一个用户可以加入不同的组,这里的GID是创建用户时的自身组(基本组)的ID,加入的组叫附加组
- 用户说明
- 家目录,图中是绿色标记的,比如root的/root,txp的/home/txp;用户创建完成后系统会自动为其分配一个家目录,用户的所有的文件都要写在对应的目录中的
- 用户对应的shell,shell就是命令解释器,root和普通用户都是bash,其他都是nologin(不允许登录到系统中,登录界面输入无效)
002.用户口令文件/etc/shadow
sudo vim /etc/shadow
9个字段:
- 用户名称
- 用户口令,以加密形式存储,加密算法为SHA-512,512位半个字节显示一个ASCII码;!!表示没有密码
- 口令最近修改日期,从1970年1月1日起经过的天数,用date相关命令可算出具体日期:date -d “1970-01-01 18192 days”
- 口令不可修改天数,口令设置或修改成功后不可修改的天数,为0表示任意时间都可修改
- 强制修改口令天数,从1970年1月1日开始,在这个时间戳到期后必须修改口令
- 密码变更提示时间,一般为7,在必须修改口令前7天每天都给一个密码修改提示
- 密码变更过期后的宽限时间
- 账号失效时间
- 保留
003.组信息文件/etc/group
vi /etc/group
4个字段:
- 组名
- 组是否有口令
- 组编号GID,创建用户时会自动创建一个组,编号和UID相同
- 组内附加用户,即除初始用户外的其他用户
004.组口令文件/etc/gshadow
sudo vim gshadow
4个字段:
- 组名
- 组口令字符串,!表示可以有口令但没有设置,一般不设置
- 组管理员,root分权,可管理组用户出入,一般不设置
- 组附加用户
02.用户管理相关命令
要管理员权限
- 添加用户useradd
- useradd bob
- 4个配置文件
– vim /etc/passwd
– vim /etc/shadow,可看出未设置密码
– vim /etc/group
– vim /etc/gshadow
- 没有口令,su bob,可以看到普通用户不能切换登录
- 家目录
– 权限,可以看到用户家目录只有当前用户可读写执行
– 内容
用户家目录基本参数配置文件都在/etc/skel目录下,用useradd添加用户后会自动将此目录下的所有文件复制到用户家目录下
如果希望用户在创立之后自动给他发一个信息,比如说当前系统的使用介绍等,就可以将相应的信息放到skel目录下
- 4个配置文件
- 指定家目录创建用户useradd -d <家目录> <用户名>
– 家目录已存在
mkdir /home/tomtom
useradd -d /home/tomtom
– 家目录不存在
useradd -d /home/user user2
- 指定初始组创建用户
groupadd group1,首先组要存在,否则创建用户会失败
vim /etc/group
useradd -g group1 user3
vim /etc/passwd - 创建用户,同时附加到已经存在的组useradd -G <附加组>… <用户名>
useradd -G group1,bob,tom user4
vim /etc/group
- 指定用户ID创建用户useradd -u< ID > <用户名>
useradd -u8888 user5
vim /etc/passwd
- useradd bob
- 设置口令password
- 更改、设置口令
passwd:修改自己口令
passwd <用户名>:修改某个用户,需要root权限 - 锁定/清除用户口令passwd -l/-d <用户名>
- 无视口令设定规则进行设定
echo 123456 | passwd user1 --stdin
- 更改、设置口令
- 组成员管理gpasswd
- 将用户从组中删除gpasswd -d user4 tom
vim /etc/group
- 将用户加入某个组gpasswd -a user4 tom
- 将用户从组中删除gpasswd -d user4 tom
- 用户删除命令userdel
- userdel <用户名>
- 用户家目录依然保留,由root用户接管
- 若基本组包含其他附加成员,则组不会被删除
userdel tom
到/home
userdel user5
- userdel -r <用户名>
递归删除,用户家目录也会被删除
- 组删除命令groupdel <组名>
groupdel tom - visudo,编辑sudoers文件
授予sonya更改其他用户口令的权限:给出命令的路径
03.用户管理程序设计
得到用户ID函数:getuid()、geteuid()
man getuid()
写一个得到用户ID和EUID的程序uid.c:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
uid_t uid=-1;
uid_t euid=-1;
uid=getuid();
euid=geteuid();
printf("uid=%d,euid=%d\n",uid,euid);
return 0;
}
gcc -c uid.c
gcc -c uid uid.c
./uid可以得到进程当前的uid和euid
- uid:进程的创建者
- euid:文件的所有者