用户、组管理

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