用户标识符主要是UID和GID,UID表示用户id,GID表示用户组id。在登录的时候,我们输入的是用户名,但是系统实际并不识别用户名,而是根据用户名查表,查询到UID,作为用户的唯一标识。
在用户登录的时候,每个登录用户最少都会获取到两个ID,一个是UID,一个就是GID。
与UID和GID相关的是权限的管控,每一个文件都有所属的用户和用户组用以控制文件的访问权限,当我们ls -l需要显示用户和用户组的时候,实际是会根据/etc/passwd与/etc/group的内容找到对应的UID和GID对应的名称,再完成显示。
用户添加使用命令useradd
sudo useradd -m tom
ubuntu上添加用户后不会弹出直接添加密码,需要添加用户后再添加密码
sudo passwd tom
至此,添加用户成功,这里的-m是创建用户主目录,如果不加,则没有用户主目录,会进入根目录
su tom
$
切换到新用户,这里可以看到没有前面的主机名,用户名和目录的显示,这是因为在创建用户的使用没有指定shell,默认使用的是/bin/sh,一般指定为bash
sudo useradd -m -s /bin/bash Bob
一般使用这条命令就可以了
其他useradd的一些参数
用法:useradd [选项] 登录名
useradd -D
useradd -D [选项]
选项:
--badnames do not check for bad names
-b, --base-dir BASE_DIR 新账户的主目录的基目录
--btrfs-subvolume-home use BTRFS subvolume for home directory
-c, --comment COMMENT 新账户的 GECOS 字段
-d, --home-dir HOME_DIR 新账户的主目录
-D, --defaults 显示或更改默认的 useradd 配置
-e, --expiredate EXPIRE_DATE 新账户的过期日期
-f, --inactive INACTIVE 新账户的密码不活动期
-g, --gid GROUP 新账户主组的名称或 ID
-G, --groups GROUPS 新账户的附加组列表
-h, --help 显示此帮助信息并退出
-k, --skel SKEL_DIR 使用此目录作为骨架目录
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-l, --no-log-init 不要将此用户添加到最近登录和登录失败数据库
-m, --create-home 创建用户的主目录
-M, --no-create-home 不创建用户的主目录
-N, --no-user-group 不创建同名的组
-o, --non-unique 允许使用重复的 UID 创建用户
-p, --password PASSWORD 加密后的新账户密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-s, --shell SHELL 新账户的登录 shell
-u, --uid UID 新账户的用户 ID
-U, --user-group 创建与用户同名的组
-Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER
--extrausers Use the extra users database
sudo userdel tom
这条命令删除用户,保留用户主目录
sudo userdel -r tom
这条命令删除用户,并删除用户主目录和信箱
userdel的其他参数
用法:userdel [选项] 登录名
选项:
-f, --force 即使不属于此用户,也强制删除文件
-h, --help 显示此帮助信息并退出
-r, --remove 删除主目录和信件池
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
--extrausers Use the extra users database
-Z, --selinux-user 为用户删除所有的 SELinux 用户映射
用户添加后会在/etc/passwd中添加一条用户记录
Bob:x:1002:1002::/home/Bob:/bin/bash
Bob:账号名称
x:密码,保存到了/etc/shadow文件中
1002:UID
1002:GID
:这里有一个空的,是用户信息说明栏
/home/Bob:用户主目录
/bin/bash:shell
Bob:$y$j9T$6YPTqUQb3XlMTD0zcGWFY/$rXyBQ2mQndvEBvOcEUllsyxF1sdOcJxi7Mq2GzBxPB6:19729:0:99999:7:::
Bob:用户名
$y$j9T$6YPTqUQb3XlMTD0zcGWFY/$rXyBQ2mQndvEBvOcEUllsyxF1sdOcJxi7Mq2GzBxPB6
:加密后的密码
19729:最近修改密码的日期,从1970年1月1日起的天数
0:密码不可被修改的天数
99999:密码需要重新修改的天数
7:密码需要修改期限前的警告天数
:空的,密码过期后的宽限天数
:空的,账号失效日子
:空的,保留
该文件中保存了用户组相关信息
Bob:x:1002:
Bob:用户组名称
x:用户组密码
1002:GID
:空的,此用户组支持的账号名称
密码修改和添加
passwd username
第一次添加就是初始化密码,后续就是修改密码
passwd其他参数
用法:passwd [选项] [登录名]
选项:
-a, --all 报告所有帐户的密码状态
-d, --delete 删除指定帐户的密码
-e, --expire 强制使指定帐户的密码过期
-h, --help 显示此帮助信息并退出
-k, --keep-tokens 仅在过期后修改密码
-i, --inactive INACTIVE 密码过期后设置密码不活动为 INACTIVE
-l, --lock 锁定指定的帐户
-n, --mindays MIN_DAYS 设置到下次修改密码所须等待的最短天数
为 MIN_DAYS
-q, --quiet 安静模式
-r, --repository REPOSITORY 在 REPOSITORY 库中改变密码
-R, --root CHROOT_DIR chroot 到的目录
-S, --status 报告指定帐户密码的状态
-u, --unlock 解锁被指定帐户
-w, --warndays WARN_DAYS 设置过期警告天数为 WARN_DAYS
-x, --maxdays MAX_DAYS 设置到下次修改密码所须等待的最多天数
为 MAX_DAYS
通常都是通过chmod命令来修改用户和用户组权限
语法
chmod [-cfvR] [--help] [--version] mode file...
mode可以有以下参数
[ugoa...][[+-=][rwxX]...][,...]
u:用户
g:用户组
o:其他用户
a:以上的都包含
+:添加
-:删除
=:赋值
r:读权限
w:写权限
x:可执行权限
X:特殊执行权限
实例:
chmod a+x file
给文件的所有用户添加可执行权限
chmod 777 file
file权限为rwxrwxrwx
chmod -R a+x folder
递归修改文件夹权限
chmod user:group file
修改文件的用户和用户组
chmod其他参数
用法:chmod [选项]... 模式[,模式]... 文件...
或:chmod [选项]... 八进制模式 文件...
或:chmod [选项]... --reference=参考文件 文件...
将每个 <文件> 的模式变更为指定 <模式>。
使用 --reference 时,把每个 <文件> 的模式设置为与 <参考文件> 相同。
-c, --changes 类似 verbose 选项,但仅在做出修改时进行报告
-f, --silent, --quiet 不显示大多数错误消息
-v, --verbose 为每个处理的文件输出一条诊断信息
--no-preserve-root 不特殊对待 "/"(默认行为)
--preserve-root 不允许在 "/" 上递归操作
--reference=参考文件 使用 <参考文件> 的模式而非给定 <模式> 的值
-R, --recursive 递归修改文件和目录
--help 显示此帮助信息并退出
--version 显示版本信息并退出