linux用户相关

在linux中, 一个用户属于一个组, 用户信息和组信息分别存在于etc/passwd/etc/group文件中, 一个用户至少属于一个组.

执行useradd或者adduser命令的时候, 会在/etc/passwd中添加一条新的记录:

# 添加一个用户, 分配指定的组, 用户id和shell环境以及主目录用户名
root@0aa88e669e5f:/# useradd -g chifan -u 2212 -s /bin/bash -d /home/chifan -m hahaha
# 提示该组不存在
useradd: group 'chifan' does not exist
# 新建chifan组
root@0aa88e669e5f:/# groupadd chifan
# 重新执行添加用户命令
# 这里注意, 添加的用户是hahaha, 但是根目录是/home/chifan
root@0aa88e669e5f:/# useradd -g chifan -u 2212 -s /bin/bash -d /home/chifan -m hahaha 
# 查看/home目录
root@0aa88e669e5f:/# ll /home/
total 20
drwxr-xr-x 1 root   root   4096 Aug  1 05:26 ./
drwxr-xr-x 1 root   root   4096 Aug  1 04:48 ../
drwxr-xr-x 2 hahaha chifan 4096 Aug  1 05:26 chifan/
drwxr-xr-x 2 kaka   kaka   4096 Aug  1 04:49 kaka/
# 查看新添加这个用户的元信息
root@0aa88e669e5f:/# stat /home/chifan
  File: '/home/chifan'
  Size: 4096      	Blocks: 8          IO Block: 4096   directory
Device: 8bh/139d	Inode: 3199080     Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 2212/  hahaha)   Gid: ( 1004/  chifan)
Access: 2019-08-01 05:26:05.573243420 +0000
Modify: 2019-08-01 05:33:20.335230696 +0000
Change: 2019-08-01 05:33:20.335230696 +0000
 Birth: -
# 查看/etc/passwd文件最后两行
root@0aa88e669e5f:/# tail -n 2 /etc/passwd
akkk:x:1003:1003:akakddd,kdkdkdkd,kslsld,djsdkjjsdjksd,sdsdjjssfjksf:/home/akkk:/bin/bash
hahaha:x:2212:1004::/home/chifan:/bin/bash

这时候去`/etc/shadow`下面查看认证信息:

root@0aa88e669e5f:/# grep hahaha /etc/shadow
hahahaa:!:18109:0:99999:7:::

这时候注意, :的第二个是!号, 也就是未设置密码, 然后设置hahaha的密码:

# 设置密码
root@0aa88e669e5f:/# passwd hahaha
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
# 查看
root@0aa88e669e5f:/# grep hahaha /etc/shadow
hahaha:$6$tb1762VD$9z9KzZ04QkelFU8R3t88P7WAD2.jDF7NseuZoJrDQVyNvgGXTcYq6dTwqcUnnb1GJWMIfoFaQ9qzhJLc5A3Tj1:18109:0:99999:7:::

设置用户的组和有效组

# 添加一个新用户
adduser admin
# 设置对应的账号密码

# 如果还没有 docker group 就添加一个:
sudo groupadd docker
# 将用户加入该 group 内。然后退出并重新登录就生效啦。
sudo gpasswd -a ${USER} docker
# 重启 docker 服务
sudo service docker restart
# 切换当前会话到新 group 或者重启 X 会话
newgrp - docker

文件解释

用户登录的时候, 先去/etc/passwd中查看对应的用户信息, 读取对应的uid和gid, 然后再去/etc/shadow中确认密码是否正确, 最后确认用户登录成功

linux中一个用户是用uid来确认的, 用户名只是一个别称, 类似于账户表中用户的登录名和实际表中存储的主键一样

/etc/passwd

akkk:x:1003:1003:akakddd,kdkdkdkd,kslsld,djsdkjjsdjksd,sdsdjjssfjksf:/home/akkk:/bin/bash
hahaha:x:2212:1004::/home/chifan:/bin/bash

这里通过:将各种信息分隔开, 其中有:

  • 账户名称
  • 密码
    • 这里用x是因为密码加密保存到/etc/shadow
  • 用户id
    • 0
      • 超级管理员
    • 1~499
      • 系统保留
        • 1~99是自动创建的系统账户
    • 500~最多
      • 这个最多是自己设置的
      • 这个就是自己定义的账户uid了
  • 用户对应组的id
    • 组信息可以在/etc/group中查看
    • 默认的, 如果不设置用户对应组的话, 新建一个haha用户会新建以一个haha的组, 在ubuntu的/etc/adduser.conf中可以看对应配置
  • 用户信息说明
    • 比如用户的全名什么的, 都在这个段里面写
    • 等于说是对这个用户的描述
  • 根目录
    • 这个用户的根目录, 创建用户的时候-d参数设置, 默认是在/home/user_name或者/user/group_name/user_name, 推荐/home/user_name
  • 用户的shell环境

/etc/shadow

root@0aa88e669e5f:/# grep hahaha /etc/shadow
hahaha:$6$tb1762VD$9z9KzZ04QkelFU8R3t88P7WAD2.jDF7NseuZoJrDQVyNvgGXTcYq6dTwqcUnnb1GJWMIfoFaQ9qzhJLc5A3Tj1:18109:0:99999:7:::

同样, 都是:分隔开

  • 用户名
  • 加密的密码, 这里根据$6$这个来确定加密的算法类型
  • 最近更新时间
  • 口令不可被更新的天数
  • 口令需要重新变更的天数
  • ...

目录和文件权限

hahahaa@0aa88e669e5f:~$ ll
total 24
drwxr-xr-x 2 hahaha chifan 4096 Aug  1 06:05 ./
drwxr-xr-x 1 root   root   4096 Aug  1 05:35 ../
-rw------- 1 hahaha chifan  239 Aug  1 06:13 .bash_history
-rw-r--r-- 1 hahaha chifan  220 Aug 31  2015 .bash_logout
-rw-r--r-- 1 hahaha chifan 3771 Aug 31  2015 .bashrc
-rw-r--r-- 1 hahaha chifan  655 Jul 12 19:26 .profile
-rw-r--r-- 1 hahaha a         0 Aug  1 06:04 kaka.text
-rw-r--r-- 1 hahaha b         0 Aug  1 06:05 kakaaaa.text

前面分开的格式是1, 3, 3, 3

  • 文件类型
    • linux中一切皆为文件
    • d
      • 目录
    • -
      • 文件
    • l
      • link file
    • b
      • 可够存储的接口设备
    • c
      • 鼠标键盘等串行端口设备
  • 所有者权限
    • r
      • 4
    • w
      • 2
    • x
      • 执行
      • 1
    • 一个用户执行一个文件的最低权限是5
  • 对应组的权限
  • 其他人的权限

总结

用到的命令

# 添加用户
useradd aaa
adduser akaka
# 添加组
groupadd kkk
# 设置用户密码
passwd root
# 切换用户的激活组
newgrp + 组名
# 切换权限
chmod +x ./hahaa.text
# 切换用户
chown aha.text
# 查看用户的信息
hahahaa@0aa88e669e5f:~$ id hahaha
uid=2212(hahaha) gid=1004(chifan) groups=1004(chifan),1005(a),1006(b)
# 查看用户的组
hahahaa@0aa88e669e5f:~$ groups hahaha
hahaha : chifan a b
# 或者
cat /group | grep 用户名
# 组的最后一个对应的就是该组的用户名
# 查看所有组
cat /etc/grroup

写在最后

摘抄linux的启动流程

# http://cn.linux.vbird.org/linux_basic/0510osloader.php#startup_intro
加载 BIOS 的硬件资讯与进行自我测试,并依据配置取得第一个可启动的装置;
读取并运行第一个启动装置内 MBR 的 boot Loader (亦即是 grub, spfdisk 等程序);
依据 boot loader 的配置加载 Kernel ,Kernel 会开始侦测硬件与加载驱动程序;
在硬件驱动成功后,Kernel 会主动呼叫 init 程序,而 init 会取得 run-level 资讯;
init 运行 /etc/rc.d/rc.sysinit 文件来准备软件运行的作业环境 (如网络、时区等);
init 运行 run-level 的各个服务之启动 (script 方式);
init 运行 /etc/rc.d/rc.local 文件;
init 运行终端机模拟程序 mingetty 来启动 login 程序,最后就等待使用者登陆啦;
posted @ 2019-08-01 14:45  吃饭不喝汤  阅读(216)  评论(0编辑  收藏  举报