Linux是多用户多任务的操作系统,支持创建多个用户,和我们个人经常用的windows是一样的,创建的每个用户可以有不同的操作权限。大致上Linux可以分为两种用户,超级用户和普通用户,超级为root,具有所有的权限,是整个系统的king,其他用户的权限可以由root用户赋予!不同的用户也属于不同的组(每个用户创建的时候会自动生成基本组),不过linux把组分为基本组和从属组。
基本信息
用户 | 家目录 | 属组 | 用户信息存放 | 密码存放 | 组信息存放 | 组密码 |
---|---|---|---|---|---|---|
root | /root | root | /etc/passwd | /etc/shadow | /etc/group | /etc/gshadow |
普通用户 | /home | 与用户同名 |
[root@guowei ~]# cat /etc/passwd | head -1
root:x:0:0:root:/root:/bin/bash
//用户名:密码:UID:GID:说明栏,类似于注释,不过现在已经基本不用:家目录:登录的shell
[root@guowei ~]# cat /etc/shadow | head -1
root:$6$/h4yt6VlHBRy7GBE$XOaMFh2tiGi/Ac.kSMZY7/Ef3CHHjeCd/NSy96JeqYJcYZID.qJyqzKlCGxN.TELlHp4vdj4MFp/wm7I68smR1::0:99999:7:::
//用户名:密码:密码的最近修改日:密码不可修改的天数(为0,则可随时改):密码重新修改的天数:密码失效前提前警告的天数:密码失效宽限天数:账号失效日期:保留字段
常用命令
用户 | 组 |
---|---|
添加用户 useradd [选项]... 用户名 选项:-u 用户id -d 家目录 -s 登录的shell -g 基本组 -G 从属组 | 添加组 groupadd [-g 组id] 组名 |
设置密码 passwd 用户名 交互式生成密码 echo "密码" | passwd --stdin 用户 直接设置密码 | 管理组 gpasswd -a 用户名 组名 //添加用户 gpasswd -d 用户名 组名 //删除用户 |
修改属性 usermod [选项]... 用户名 选项:-u 用户id -d 家目录 -s 登录的shell -g 基本组 -G 从属组 | 修改组 groupmod [-g 组id] [-n 新组名] 组名 |
检查用户 id 用户名 | 删除组 groupdel 组名 |
删除用户 userdel [-r] 用户名 | 查看组成员 groupmems -l -g 组名 |
[root@server0 ~]# useradd -u 3456 jack //创建用户jack uid为3456
[root@server0 ~]# useradd -s /sbin/nologin rose //创建用户rose 登录shell为/sbin/nologin
[root@server0 ~]# passwd jack
Changing password for user jack.
New password:
[root@server0 ~]# echo “123456” | passwd --stdin jack
Changing password for user jack. //已经为用户jack更改密码令牌
passwd: all authentication tokens updated successfully. //密码令牌更新成功
[root@server0 ~]# usermod -u 1234 jack
[root@server0 ~]# id jack
uid=1234(jack) gid=3456(jack) groups=3456(jack)
[root@server0 ~]# useradd -s /sbin/nologin xiaoming
[root@server0 ~]# id xiaoming
uid=1235(xiaoming) gid=1235(xiaoming) groups=1235(xiaoming)
[root@server0 ~]# userdel -r xiaoming
[root@server0 ~]# id xiaoming
id: xiaoming: no such user
[root@server0 ~]#groupadd -g 2345 test
[root@server0 ~]#tail -1 /etc/group
test:x:2345:
[root@server0 ~]#gpasswd -a jack test
Adding user jack to group test
[root@server0 ~]#groupmems -l -g test
jack
[root@server0 ~]# gpasswd -d jack test
Removing user jack from group test
[root@server0 ~]# groupmod -g 2222 -n wind test
[root@server0 ~]# tail -1 /etc/group
wind:x:2222:
[root@guowei ~]# users //查看当前系统有哪些用户
root root
[root@guowei ~]# who //查看用户以何种方式登录
root pts/0 2019-03-02 22:44 (:2) //第一列为用户,第二列是终端,第三列是时间,
root :2 2019-03-02 20:04 (:2)
[root@guowei ~]# w //查看详细的登录信息
22:49:20 up 9:13, 4 users, load average: 0.00, 0.01, 0.05
//第一行显示当前时间,系统运行时间,已登录的用户数量和系统负载
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 :2 22:44 0.00s 0.04s 0.02s w
root :2 :2 20:04 ?xdm? 1:53 0.11s /usr/libexec/gnome-sess
//下面信息分为8列:
第一列:登录的用户名
第二列:用户登录终端
第三列:如果是远程登录,会显示远程主机的主机名和IP地址
第四列:登录时间
第五列:用户闲置时间
第六列:与终端相关的当前所有运行进程消耗的CPU时间总量
第七列:当前WHAT列所对应的进程消耗的CPU时间总量
第八列:用户当前运行的进程
权限管理
基本权限 | r权限 能够浏览目录内容 | w权限 能够执行更改目录内容操作 | x权限 可以切换到此目录 |
权限适用对象 | 所有者(-user):拥有次文件/目录的用户 ;所属组(-group):拥有文件/目录的组; 其他用户(-other):除所有者和所属组 |
例如: ls -ld /etc/passwd
-rw-r--r--. 1 root root 2358 12月 28 19:38 /etc/passwd
权限位[依次为类型-属主-属组-其他人 硬链接数 属主 属组 大小 最后修改时间 文件/目录名称
权限的数值 | r=4 | w=2 | x=1 |
附加权限 | SUID=4 只有可执行的二进制程序才可以,附加在属主的x位上,使普通用户拥有当前用户(必须对文件有可执行权限)的权限 | SGID=2 附加在属组的x位上,属组的权限标识会变为s ,如果没有执行权限则会变成S 适用于目录,使新增的文档自动设置为与父目录相同的属组 | Sticky Bit=1 附加在其他人的x位上,显示为t 可以对目录进行权限控制,不能执行w权限对于非自己的文件 |
设置基本权限 chmod [-R] 归属关系+-=权限类别 文档...
chmod [-R] nnn 文档... (n为数值)
chmod [-R] xnnn 文档...(x为附加权限4为SUID,2为SGID,1为Sticky Bit)
设置文档归属 chown [-R] 属主 文档... / chown [-R] :属组 文档... / chown [-R] 属主:属组 文档...
[root@ecs-web1 ~]# ls -ld /test/
drwxr-xr-x 2 root root 4096 Jan 29 19:47 /test/
[root@ecs-web1 ~]# chmod u+s,g+w,o+w /test/ //给普通用户赋予s权限
[root@ecs-web1 ~]# ls -ld /test/
drwsrwxrwx 2 root root 4096 Jan 29 19:47 /test/
[root@ecs-web1 ~]# su - jack
[jack@ecs-web1 ~]$ ls /root
ls: cannot open directory /root: Permission denied
[jack@ecs-web1 ~]$ ls -ld /root/ //因为赋予了s权限,所以用户jack可以以root用户执行此文件
dr-xr-x---. 7 root root 4096 Jan 29 19:50 /root/
[root@ecs-web1 ~]# chown jack:jack /test/
[root@ecs-web1 ~]# ls -ld /test/
drwsrwxrwx 2 jack jack 4096 Jan 29 19:47 /test/
[root@ecs-web1 ~]# chmod 111 /test
[root@ecs-web1 ~]# ls -ld /test/
d--x--x--x 2 root root 4096 Jan 29 20:22 /test/
[root@ecs-web1 ~]# chmod 4131 /test
[root@ecs-web1 ~]# ls -ld /test/
d--s-wx--x 2 root root 4096 Jan 29 20:22 /test/
acl策略
普通的文档归属中有三种角色:属主,属组,其他人,不能实现精细的控制。如果我们想对个别的用户和组设置独立的权限,就可以用acl
设置acl策略:setfacl [-R] -m u/g:用户名/组名:权限类别 文档...
查看acl策略:getfacl 文档:
清空acl策略:setfacl [-R] -b 文档
[root@ecs-web1 ~]# setfacl -m u:jack:--- /test
[root@ecs-web1 ~]# getfacl /test
# file: test/
# owner: root
# group: root
user::rwx
user:jack:---
group::rwx
mask::rwx
other::rwx
[root@ecs-web1 ~]# su - jack
[jack@ecs-web1 ~]$ ls /test
ls: cannot open directory /test: Permission denied
[jack@ecs-web1 ~]$ exit
[root@ecs-web1 ~]# setfacl -b /test //清空策略
[root@ecs-web1 ~]# getfacl /test //对jack策略已经清除
账号安全
设置账号有效期
[root@guowei ~]# chage -l guowei //列出账号密码信息
Last password change : Feb 24, 2019
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
[root@guowei ~]# chage -d 0 guowei //登录必须重新设置密码
[root@guowei ~]# chage -l guowei
Last password change : password must be changed
Password expires : password must be changed
Password inactive : password must be changed
[root@guowei ~]# chage -E 2019-12-31 guowei //设置失效日期
[root@guowei ~]# chage -l guowei
...
Account expires : Dec 31, 2019
账号锁定/解锁
[root@guowei ~]# passwd -l guowei //锁定账号
Locking password for user guowei.
passwd: Success
[root@guowei ~]# passwd -u guowei //解锁账号
Unlocking password for user guowei.
passwd: Success
[root@guowei ~]# passwd -S guowei //列出账号状态
guowei PS 1970-01-01 0 99999 7 -1 (Password set, SHA512 crypt.)
切换账户
用户分为根用户(root 超级用户):、普通用户(不能创建用户)、系统用户(不能登录系统)
su 命令 :切换用户
[guowei@guowei ~]$ su //不加传参数,默认切换到root用户
Password:
[root@guowei guowei]# pwd //用户环境不发生变化
/home/guowei
[root@guowei guowei]# exit
exit
[guowei@guowei ~]$ su - //加‘-’切换用户环境,直接进入用户的家目录
Password:
Last login: Sat Mar 2 23:04:00 CST 2019 on pts/0
[root@guowei ~]# pwd
/root
[root@guowei ~]# su - guowei //root可以切换其他用户,不需要密码
sudo 命令:用其他用户的身份执行命令
该命令的使用方式是在sud后加上要执行的命令。运行命令时,会首先检查/etc/sudoers,判断该用户是否有执行sudo的权限。
注:编辑/etc/sudoers,用专门的命令visudo来编辑,这个命令编辑后保存退出时会自动检查语法设置,防止错误无法使用sudo
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
93 guowei ALL=(ALL) ALL //用户guowei(第一列)可以从任何地方(第二列ALL)执行任何人(第三列ALL)的任何命令(第四列的ALL)
94 guowei ALL=(ALL) NOPASSWD:/sbin/shutdown,/usr/bin/reboot //可以设置不需要密码执行某些命令
...
99 ## Allows people in group wheel to run all commands
100 %wheel ALL=(ALL) ALL
101 %guowei ALL=(ALL) ALL //可以设置所有属于guowei组的用户从任何地方执行任何人的任何命令