账号和权限管理
账号和权限管理
用户账号类型
linux中每个用户是通过User id (UID)来唯一标识的1-60000 自动分配。
管理员:root,0
程序用户:1-499(centOS 6之前),1-999 (centOS 7以后)
对守护进程获取资源进行权限分配
普通用户:500+(cengtOS6之前),1000+(centOS7以后)
给用户进行交互登录使用
管理用户账号和组账号
linux基于用户身份对资源访问进行控制
用户账号
超级用户、普通用户、程序用户
组账号
基本组(私有组 最前面的一个组,有且唯一)
附加组(公共组,可有可无,也可以是多个,非必要)
UID和GID
UID(User IDentity,用户标识号)
GID(Group IDentify,组标识号)
用户账号文件/etc/passwd
保存用户名称、宿主目录、登录shell等基本信息
文件位置:/etc/passwd
每一行对应一个用户的账号记录
[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
root:用户名
x:密码占位符
0:UID
0:GID
root:超级管理员
/root:宿主目录
/bin/bash:shell环境
用户账号文件/etc/shadow
保存用户的密码、账号有效期等信息
文件位置:/etc/shadow
每一行对应一个用户的密码记录
[root@localhost ~]# cat /etc/shadow
root:$6$8NEwKCljQ6q3jMTk$bZFLMsG5A55PEh/8h0wrDG.nhMN30mEkoO6z2H88b6WVCK4/nZIwCYhI8E7noPx6ikjRaODGyQZO1pvXnZ7Ed1::0:99999:7:::
root#用户账号
$6$8NEwKCljQ6q3jMTk$bZFLMsG5A55PEh/8h0wrDG.nhMN30mEkoO6z2H88b6WVCK4/nZIwCYhI8E7noPx6ikjRaODGyQZO1pvXnZ7Ed1#用户密码
::0:99999:7::#密码修改时间
root:$6$8NEwKCljQ6q3jMTk$bZFLMsG5A55PEh/8h0wrDG.nhMN30mEkoO6z2H88b6WVCK4/nZIwCYhI8E7noPx6ikjRaODGyQZO1pvXnZ7Ed1::0:99999:7:::
此文件的每行包括 9 个字段,使用半角冒号 (“:”) 分隔,顺序如下:
字段1:用户帐号的名称;
字段2:使用SHA512加密的密码字串信息,当为“*” 或“! !”时表示此用户不能登录到系统。,若该字段内容为空,则该用户无须密码即可登录系统;
字段3:上次修改密码的时间,表示从1970年01月01日算起到最近一次修改密码时间隔的天数;
字段4:密码的最短有效天数,自本次修改密码后,必须至少经过该天数才能再次修改密码。默认值为0,表示不进行限制;
字段5:密码的最长有效天数,自 本次修改密码后,经过该天数以后必须再次修改密码。默认值为99999, 表示不进行限制;
字段6:提前多少天警告用户密码将过期,默认值为7;
字段7:在密码过期之后多少天禁用此用户;
字段8:帐号失效时间,此字段指定了用户作废的天数(从1970年01月01日起计算),默认值为空,表示账号永久可用;
字段9:保留字段(未使用),没有特定用用途。
或者也可以用man 5 shadow查看
useradd命令添加用户信息
useradd命令
命令格式:
useradd [选项] 用户名
常用选项:
-u:指定用户的UID号,求uid号未被其他用户使用
-d:指定用户的宿主目录位置与-M一起使用不生效
-e:失效时间指定账户失效时间,可以使用日期格式
-g:指定用户的基本组名
-G:附加组指定用户的附加组名
-M:不生成家目录不建立宿主目录
-s:指定shell环境
添加用户:查看是否在passwd和shadow文件中生成信息
在/etc/passwd文件和/etc/shadow文件的末尾加该用户的账号信息。
若未明确指定用户的宿主目录,则在/home目录下自动创建与该用户账号同名的宿主目录,并在该目录中建立用户的各种初始配置文件。
若没有明确指定用户所属的组,则自动创建与该用户同名的基本组账号,组账号的记录信息将保存到/etc/group和 /etc/gshadow文件中。
[root@localhost ~]# useradd -u 1450 -e 2022-02-25 -d /ky18 -g root -G wheel geng
#添加一个uid号为1450失效时间为2022-02-25宿主目录位置/ky18基本组为root附加组为wheel的用户
[root@localhost ~]# id geng#查询用户身份标识
uid=1450(geng) gid=0(root) 组=0(root),10(wheel)
[root@localhost ~]# tail -1 /etc/shadow#显示末尾一行查看是否添加成功
#这里可以看到帐号失效时间是19048,从1970年后的19048天失效
geng:!!:19044:0:99999:7::19048:
[root@localhost ~]# useradd -M -s /bin/bash xie
#添加一个不生成家目录不建立宿主目指定shell环境的xie目录
[root@localhost ~]# id xie
uid=1451(xie) gid=1451(xie) 组=1451(xie)
[root@localhost ~]# tail -1 /etc/shadow#显示末尾一行查看是否添加成功
xie:!!:19044:0:99999:7:::
[root@localhost ~]# tail -1 /etc/passwd#显示末尾一行查看是否添加成功
xie:x:1451:1451::/home/xie:/bin/bash
设置/更改用户口令passwd
passwd命令
命令格式
passwd [选项] 用户名
常用选项:
-d:清空指定用户名密码
-l:锁定用户账号
-S:查看用户状态
-u解锁用户账号
示例:
[root@localhost ~]# passwd geng#基本用法更改用户账号密码
更改用户 geng 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# passwd -d geng
清除用户的密码 geng。
passwd: 操作成功
[root@localhost ~]# passwd -l geng
锁定用户 geng 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -S geng
geng LK 2022-02-21 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# passwd -u geng
解锁用户 geng 的密码。
passwd: 警告:未锁定的密码将是空的。
passwd: 不安全的操作(使用 -f 参数强制进行该操作)
[root@localhost ~]# passwd -uf geng
解锁用户 geng 的密码。
passwd: 操作成功
修改用户账号属性usermod
usermod命令
命令格式
usermod [选项] 用户名
常用选项
-l:(小L)修改登录用户名
-L:锁定用户账号
-U:解锁用户账号
-u:修改用户的UID号
-d:修改用户的宿主目录位置
-e:修改失效时间指定账户失效时间,可以使用日期格式
-g:修改用户的基本组名
-G:修改附加组名
-s:修改shell环境
示例:
注意:这里所有修改用户账号名必须在最后
[root@localhost ~]# usermod -l wang xie #修改登录账号用户名
[root@localhost ~]# tail -1 /etc/passwd #显示末行
wang:x:1451:1451::/home/xie:/bin/bash #这里可以看出已将用户名为xie的修改为wang
[root@localhost ~]# usermod -L wang #锁定用户账号
[root@localhost ~]# passwd -S wang #查看用户状态
wang LK 2022-02-21 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# passwd -u wang #解锁用户账号
#这里可以看出我用passwd命令也是可以的
解锁用户 wang 的密码。
passwd: 操作成功
[root@localhost ~]# id wang #查询用户身份标识
uid=1451(wang) gid=1451(xie) 组=1451(xie)
[root@localhost ~]# usermod -u 1200 wang #修改用户的UID号为1200
[root@localhost ~]# id wang
uid=1200(wang) gid=1451(xie) 组=1451(xie) #可以看出已修改
[root@localhost ~]# tail -1 /etc/passwd #显示末行
wang:x:1200:1451::/home/xie:/bin/bash
[root@localhost ~]# usermod -d /ky18 wang #修改用户的宿主目录位置
[root@localhost ~]# tail -1 /etc/passwd
wang:x:1200:1451::/ky18:/bin/bash #可以看出已修改
[root@localhost ~]# tail -1 /etc/shadow
wang:$6$iefBHOoB$fAWrboxj2m2hqs.crR431p7ypvKQmWCk5DLvpSUvaGyr4wiIoKyK59NBJEX/rD9Ws9UpbpI337EolRrmUnc0h1:19044:0:99999:7:::
[root@localhost ~]# usermod -e 2022-02-22 wang #:修改失效时间
[root@localhost ~]# tail -1 /etc/shadow
wang:$6$iefBHOoB$fAWrboxj2m2hqs.crR431p7ypvKQmWCk5DLvpSUvaGyr4wiIoKyK59NBJEX/rD9Ws9UpbpI337EolRrmUnc0h1:19044:0:99999:7::19045: #可以看出已修改
[root@localhost ~]# id wang
uid=1200(wang) gid=1451(xie) 组=1451(xie)
[root@localhost ~]# usermod -g root wang #修改用户的基本组名
[root@localhost ~]# id wang
uid=1200(wang) gid=0(root) 组=0(root) #可以看出已修改
[root@localhost ~]# usermod -G wheel wang #修改附加组名
[root@localhost ~]# id wang
uid=1200(wang) gid=0(root) 组=0(root),10(wheel) #可以看出已修改
[root@localhost bin]# usermod -s /sbin/nologin wang #修改shell环境
[root@localhost bin]# tail -1 /etc/passwd
wang:x:1200:0::/ky18:/sbin/nologin #可以看出已修改
删除用户账号userdel
userdel命令
格式
userdel [选线] 用户名
添加-r选项时,表示连同用户的宿主目录一并删除
[root@localhost bin]# ls /home #查看目录
GB zhang
[root@localhost bin]# userdel -r zhang #删除账号zhang
[root@localhost bin]# ls /home
GB
用户账号的初始配置文件
文件来源
新建用户账号时,从/etc/skel目录中复制而来
[root@localhost bin]# ls -a /etc/skel #显示所有隐藏文件
. .. .bash_logout .bash_profile .bashrc .mozilla
主要的用户初始配置文件
用户宿主目录下的初始配置文件只对当前用户有效
~/.bash_profile
此文件命令将在该用户每次登录时执行,他会设置一些变量,并且会调用该用户的~/.bashrc
~/.bashrc
此文件命令将在该用户每次打开新的bash shell时被执行(包括登录系统)
~/.bash_logout
此文件命令将在该用户每次退出时bash shell时使用
组账号文件
与用户账号文件现类似
/etc/group:保存组账号基本信息
/etc/gshadow:保存组账号密码信息
添加组账号groupadd
groupadd命令
格式
groupadd [选项] 组账号名
示例
[root@localhost ~]# groupadd -g 1400 xiao #添加指定gid号为1400账号xaio
[root@localhost ~]# tail -1 /etc/group #显示末行
xiao:x:1400:
添加删除组成员gpasswd
gpasswd命令
命令格式
gpasswd [选项] 组账号名
常用选项
-a:向组内添加成员
-d:从组内删除一个用户成员
-M:定义组成员列表,以逗号分隔
[root@localhost ~]# gpasswd -a root wang #添加成员root
正在将用户“root”加入到“wang”组中
[root@localhost ~]# tail -1 /etc/group
wang:x:1300:root
[root@localhost ~]# gpasswd -d root wang #删除一个用户成员root
正在将用户“root”从“wang”组中删除
[root@localhost ~]# tail -1 /etc/group
wang:x:1300:
[root@localhost ~]# gpasswd -M root,GB wang #添加多个成员
[root@localhost ~]# tail -1 /etc/group
wang:x:1300:root,GB
删除组账号groupdel
groupdel命令
格式
groupdel 组账号名
示例
[root@localhost ~]# tail -1 /etc/group
xiao:x:1400:wang
[root@localhost ~]# groupdel xiao
[root@localhost ~]# tail -1 /etc/group
wang:x:1300:root,GB
查询账号信息
groups命令
查询用户所属的组
groups [用户名]
id命令
查询用户省份标识
id [用户名]
finger命令
需要安装
yum install finger -y#可以用这条命令安装
查询用户账号的详细信息
finger[用户名]
w、who、users命令
查询一登陆到主机的信息
示例
[root@localhost ~]# groups wang #查询用户所属的组
wang : root wheel #前面基本组后面附加组
[root@localhost ~]# id wang #查询用户省份标识
uid=1200(wang) gid=0(root) 组=0(root),10(wheel)
[root@localhost ~]# finger wang #查询用户账号的详细信息
Login: wang #登录名 Name: 描述信息
Directory: /ky18#家目录 Shell: /sbin/nologin# shell环境
Never logged in.
No mail.
No Plan.
[root@localhost ~]# w #登录详细信息
17:11:57 up 4:38, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 12:34 ?xdm? 43.46s 0.16s /usr/libexec/gnome
root pts/0 192.168.88.1 12:34 5.00s 0.31s 0.01s w
[root@localhost ~]# who #登录时间
root :0 2022-02-21 12:34 (:0)
root pts/0 2022-02-21 12:34 (192.168.88.1)
[root@localhost ~]# users#显示当前登录系统的所有用户的用户列表
root root
补充:
last命令
选项
-x:信息显示系统开关机和执行等信息
-a:将登陆IP最后一行
-f:读取特定的文件,你可以选择- f / var / log / dtmp文件
-d:将IP地址转换为主机名
-n:设置列出名单显示的列数
-t:看指定的时间用户登录的历史
lastlog命令
last log查看所有用户最后一次登录
选项
-u:指定用户
-t:指定时间以天为单位
[root@localhost ~]# lastlog -u root
用户名 端口 来自 最后登陆时间
root pts/0 192.168.88.1 一 2月 21 12:34:54 +0800 2022
[root@localhost ~]# lastlog -t 3
用户名 端口 来自 最后登陆时间
root pts/0 192.168.88.1 一 2月 21 12:34:54 +0800 2022
gdm :0 一 2月 21 12:33:31 +0800 2022
管理目录和文件的属性
文件/目录的权限和归属
访问权限
r:可读允许查看显示目录列表
w:可写允许修改、新建、移动、删除文件或目录
x:可执行允许运行程序、切换目录
归属(所有权)
属主:拥有该文件的/目录的用户信息
属组:拥有该文件的/目录的账号
查看文件/目录的权限和归属
在表示属主、属组用户或者其他用户对该文件的访问权限时,主要使用了三种不同的权限字符,权限字符也可以分别表示为八进制数字4、2、1,表示一个权限组合时需要将数字进行累加。
[root@localhost ~]# ls -l httpd-2.4.52.tar.bz2
-rw-r--r--. 1 root root 7439184 12月 20 17:36 httpd-2.4.52.tar.bz2
-rw-r--r--:文件类型、权限
root:属主
root :属组
设置文件和目录的权限chmod
chmod命令
字符组合“[ugoa···][+ - =][rwx]”或者数字组合“nnn”的形式表示要设置的权限模式,其中“nnn”为需要设置的具体权限值,如“755”、“644”等,而“[guoa···][+ - =][rwx]”的形式中,三个组成部分的含义及用法如下所述:
“ugoa”表示该权限设置所针对的用户类别。“u”代表文件属主,“g”代表文件组内的用户,“o”代表其他任何用户长度有用户(ugo的总和);
“+ - =”表示设置权限的操作动作。“+”号代表增加权限,“-”号代表减少相应权限,“=”号代表仅设置对应的权限;
常用选项: -R:递归修改指定目录下所有子项的权限(包括目录中的文件)
[root@localhost mnt]# ll
总用量 0
--w-------. 1 root root 0 2月 21 18:13 li.txt
[root@localhost mnt]# chmod +rwx li.txt
[root@localhost mnt]# ll
总用量 0
-rwxr-xr-x. 1 root root 0 2月 21 18:13 li.txt
示例
[root@localhost mnt]# chmod +777 li.txt
[root@localhost mnt]# ll
总用量 0
-rwxrwxrwx. 1 root root 0 2月 21 18:13 li.txt
[root@localhost mnt]# chmod -022 li.txt
[root@localhost mnt]# ll
总用量 0
-rwxr-xr-x. 1 root root 0 2月 21 18:13 li.txt
[root@localhost mnt]# mkdir -p aaa/bbb/ccc #递归创建目录
[root@localhost mnt]# tree
.
├── aaa
│ └── bbb
│ └── ccc
└── li.txt
3 directories, 1 file
[root@localhost mnt]# ll -R aaa #递归显示
aaa:
总用量 0
drwxr-xr-x. 3 root root 17 2月 21 18:28 bbb
aaa/bbb:
总用量 0
drwxr-xr-x. 2 root root 6 2月 21 18:28 ccc
aaa/bbb/ccc:
总用量 0
[root@localhost mnt]# chmod -R +777 aaa #递归设置权限(递归设置权限只需要设置开头第一个就可以了)
[root@localhost mnt]# ll -R aaa
aaa:
总用量 0
drwxrwxrwx. 3 root root 17 2月 21 18:28 bbb
aaa/bbb:
总用量 0
drwxrwxrwx. 2 root root 6 2月 21 18:28 ccc
权限掩码umask
umask作用
控制新建文件或目录的权限
默认权限去除umask的权限为新建的文件或目录的权限
新建的文件或者目录的权限为默认最大权限减去umask(普通文件的最大默认权限为6,目录的最大默认权限为7)
umask设置:umask 022
umask查看:umask
示例
[root@localhost mnt]# umask 000
[root@localhost mnt]# mkdir 1.txt
[root@localhost mnt]# ll
总用量 0
drwxrwxrwx. 2 root root 6 2月 21 18:40 1.txt
#这里可以看到目录的默认权限为777
[root@localhost mnt]# umask 022
[root@localhost mnt]# mkdir 2.txt
[root@localhost mnt]# ll
总用量 0
drwxrwxrwx. 2 root root 6 2月 21 18:40 1.txt
drwxr-xr-x. 2 root root 6 2月 21 18:40 2.txt
#这里可以看到权限为755
[root@localhost mnt]# touch 3.txt
[root@localhost mnt]# ll
总用量
-rw-rw-rw-. 1 root root 0 2月 21 18:51 3.txt
#这里可以看到文件的默认权限为666
[root@localhost mnt]# umask 022
[root@localhost mnt]# touch 4.txt
[root@localhost mnt]# ll
总用量 0
-rw-rw-rw-. 1 root root 0 2月 21 18:51 3.txt
-rw-r--r--. 1 root root 0 2月 21 18:52 4.txt
#这里可以看到权限为644
设置文件和目录的归属chown
chown命令
chown 属主 文件或目录
chown:属组 文件 或目录
chown 属主:属组 文件或目录
常用选项
-R:递归修改指定目录下所有文件、子目录的归属
[root@localhost mnt]# ll
总用量 0
drwxrwxrwx. 3 root root 17 2月 21 18:28 aaa
-rwxr-xr-x. 1 root root 0 2月 21 18:13 li.txt
[root@localhost mnt]# chown wang li.txt #设置属主
[root@localhost mnt]# ll
总用量 0
drwxrwxrwx. 3 root root 17 2月 21 18:28 aaa
-rwxr-xr-x. 1 wang root 0 2月 21 18:13 li.txt
[root@localhost mnt]# chown wang:wang li.txt #设置属主属组
[root@localhost mnt]# ll
总用量 0
drwxrwxrwx. 3 root root 17 2月 21 18:28 aaa
-rwxr-xr-x. 1 wang wang 0 2月 21 18:13 li.txt
[root@localhost mnt]# chown :root li.txt #设置属组
[root@localhost mnt]# ll
总用量 0
drwxrwxrwx. 3 root root 17 2月 21 18:28 aaa
-rwxr-xr-x. 1 wang root 0 2月 21 18:13 li.txt
[root@localhost mnt]# ll -R aaa #递归显示
aaa:
总用量 0
drwxrwxrwx. 3 root root 17 2月 21 18:28 bbb
aaa/bbb:
总用量 0
drwxrwxrwx. 2 root root 6 2月 21 18:28 ccc
aaa/bbb/ccc:
总用量 0
[root@localhost mnt]# chown -R :wang aaa #递归设置属组
[root@localhost mnt]# ll -R aaa
aaa:
总用量 0
drwxrwxrwx. 3 root wang 17 2月 21 18:28 bbb
aaa/bbb:
总用量 0
drwxrwxrwx. 2 root wang 6 2月 21 18:28 ccc
aaa/bbb/ccc:
总用量 0
三种特殊权限
suid
[root@localhost aa]#which passwd
/usr/bin/passwd
[root@localhost aa]#ll /usr/bin/passwd
#此处s表示当使用这个命令程序时,把当前用户当成文件的所属主
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
[root@localhost aa]#which vim
/usr/bin/vim
[root@localhost aa]#chmod u+s /usr/bin/vim
#给vim加上suid权限,代表所有用户可以使用vim打开并编辑所有文件
[root@localhost aa]#ll /usr/bin/vim
-rwsr-xr-x. 1 root root 2289640 8月 2 2017 /usr/bin/vim
7777
SGID
[root@localhost aa]#ll /usr/bin/vim
-rwxr-sr-x. 1 root root 2289640 8月 2 2017 /usr/bin/vim
Sticky 位
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
sticky 设置在文件上无意义
Sticky权限设定:
[root@localhost aa]#chmod o+t /opt/aa
chmod o+t DIR...
chmod o-t DIR..
[root@localhost aa]#chmod o+t /opt/aa
添加Sticky 位
[root@localhost opt]#chmod o-t /opt/aa
#减少Sticky 位
总结
1.Linux用户账号分为超级用户、程序用户和普通用户。
2.passwd和shadow文件保存了用户的基本信息及密码。
3.useradd、passwd、usermod 和userdel命令可以对用户账号进行管理。
4.groupadd、gpasswd、 groupdel 命令可以管理组账号。
5.chmod 命令可以设置文件和目录的访问权限。
6.chown命令可以设置文件和目录的属主、属组。
7.umask 就是默认指定目前用户在新建文件或目录时的权限默认值。
8.suid、sgid、stycky三种特殊权限