用户、组管理
Linux系统中,用户、用户组的概念,以及相关的文件权限、属性。参考文章
用户管理
添加用户
linux下id标识符很重要,我们是使用用户名登录,但是底层的逻辑其实都跟id绑定。比如文件权限,同一个文件,在docker内外具有相同的id,但是docker内跟宿主机居然是两个不同名的用户。这说明底层文件权限记录的是id
新建用户,默认的shell是/bin/sh。
useradd 选项 用户名
其中各选项含义如下:
代码:
- -c comment 指定一段注释性描述。
- -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
- -g 用户组 指定用户所属的用户组。
- -G 用户组,用户组 指定用户所属的附加组。
- -s Shell文件 指定用户的登录Shell。
- -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
#添加一个用户,但是不建立 用户主目录
useradd www
# 指定了主目录,但是不会创建它
useradd -d /home/scc scc
# 切换到新用户
su - scc
mkdir -p /home/scc # 会提示没有权限建目录
# 以root权限建立即可
mkdir -p /home/scc
chown -R scc:scc /home/scc
# -d 配合-m参数,则会自动创建目录
useradd -d /home/scc -m scc
# 创建主目录
useradd -m scc
# 指定shell
useradd -d /home/scc -m -s /bin/bash scc
# 创建一个 禁止登录的账号 nologin参见 /etc/passwd内的路径即可
useradd -m -s /usr/sbin/nologin scc
su - scc # 登录时,则提示:This account is currently not available.
# 附加组
groupadd -g 3050 scc1
groupadd -g 3051 scc2
groupadd -g 3052 scc3
useradd -g scc1 -G scc2,scc3 scc
id scc
# 直接创建,设置shell等选项
useradd -d /home/jieba -s /bin/bash jieba
passwd jie
# 禁止登录时,指定shell nologin
useradd -s /sbin/nologin www
# 分步创建
groupadd -u 3050 www
useradd -u 3050 www
一些共同的操作。
# 创建用户后,可能要切换到该用户, 账号scc
su - scc
# 从该账号退出到上一个账号
exit
# 设置密码,不带参数时,设置当前账号的密码,加用户名参数后,则设定指定账号的密码
passwd
passwd scc
修改用户
usermod -a -G docker jieba # 增加额外一用户组
删除用户
userdel jieba
userdel -r jieba # 连带删除用户的主目录
账号锁定
禁止登录
参考: nologin
一般设置nologin帐号是给启动服务的账号所用的,这只是让服务启动起来,但是不能登录系统。
passwd
- 禁止登录
passwd -l jieba - 解锁登录
passwd -u jieba
/sbin/nologin
修改/etc/passwd 将对应的shell更改为 /sbin/nologin 或 /usr/sbin/nologin 。参见/etc/passwd的设置。
禁止所有用户登录(root除外)
touch /etc/nologin
文件夹权限
访问一个文件夹下面的文件,首先要具有该文件夹的权限,即拥有读写权限。否则可能访问不到。这种非常常见。
查看uid、gid
id # 当前用户
id jie # id + 用户明
修改uid、gid
需求来源于,docker内以www用户运行了apache等,需要对指定目录的读、写权限。而指定的目录,实际上是本机直接通过参数-v /path/to/local:/var/html/www映射的。本机的用户拥有权限,所以,希望本机id的用户,到docker内,则指向到www用户。
usermod -u 123 jiba #修改jiba用户的uid为123
groupmod -g 123 jiba #修改jiba用户的gid为123
# jiba用户的家目录下面的文件属主和属组会在1、2命令执行后自动修改成新的uid、gid对应的属主属组,但是其他文件目录需要手动修改。手动修改的命令也比较简单
find / -user 123 -exec chown -h jiba {} \;
find / -group 123 -exec chgrp -h jiba {} \;
# 我个人觉得最简单的方式
chown -R jieba:jieba /home/jieba