前言
Linux操作系统是多任务(Multi-tasks)多用户(Multi-users)分时操作系统,linux操作系统的用户就是让我们登录到linux的权限;每当我们使用用户名登录操作系统时,linux都会对该用户进行认证、授权审计等操作。操作系统为了识别每个用户,会给每个用户定义一个ID,就是UID。用户组就相当于多个用户的容器;在linux系统中,用户组也有一个ID,GID。
正文
用户管理分类说明
用户分类
- 系统超级管理员 root uid=0
- 系统虚拟用户 www uid=1~999
Linux下面每一个进程都需要有一个对应的用户和用户组
系统虚拟用户是无法登录的
著名的虚拟用户:nobody id=99 - 系统普通用户 uid=1000+
用户与用户组的关系
- 一对一关系 一个用户可以属于一个用户组
- 一对多 一个用户可以属于多个用户组
- 多对多 多个用户可以属于多个用户组
用户权限概念说明
文件管理者信息
- 文件所属用户信息(属主-主人) UID user id(用户id)
- 文件所属的组信息(属组-家人) GID group id(用户组id)
- 文件所属其它用户(其它-隔壁) other user
权限类型
- 读取权限(4):read(r)
文件:可以阅读查看文件中的内容
目录:可以阅读查看目录中的内容 - 写入权限(2):write(w)
文件:可以编辑修改文件中的内容
目录:可以在目录中创建删除修改数据 - 执行权限(1):execute(x)
文件:可以执行文件中的内容
目录:可以切换进入到目录中 - 没有权限(0):N/A(-)
- 权限对应的数字
r 4
w 2
x 1
查看文件或目录权限信息
文件或目录属主用户权限:rwx(7)
文件或目录属组组员权限:r-x(5)
文件或目录其它用户权限:r-x(5)
权限修改
权限修改命令:chmod
符号设定
属主-user u
属组-group g
其他用户-other o
所有用户 a
语法:chmod u或g或o +或-或=权限符号 文件或目录
意思:属主或属组或其他用户 增加或减去 某种权限
属主-user u :
chmod u+r 文件名 或 chmod u+w 文件名 或 chmod u+x 文件名
chmod u-r 文件名 或 chmod u-w 文件名 或 chmod u-x 文件名
属组-group g 和 其他用户-other o 同样的语法:
chmod g+r/w/x u-r/w/x u=rw
chmod o+r/w/x u-r/w/x u=rw
chmod a+r/w/x a-r/w/x a=rw
数值设定
上面已经说明,权限和数字的关系:r=4,w=2,x=1
例子:chmod 761 oldboy.txt
说明:
第一个数字7表示 文件或目录属主的权限信息,为7说明有 rwx 权限
第二个数字6表示 文件或目录属组的权限信息,为6说明有 rw 权限
第三个数字1表示 文件或目录其他用户的权限信息 为1说明有 x 权限
疑惑
为什么刚创建出来的文件或目录权限都是同样的?
目录权限都是 755
文件权限都是 644
因为文件或目录刚创建出来的时候,系统会它设置默认权限,755 和 644 就是系统给他们设置的默认权限。
#查看默认权限:
[root@oldboyedu ~]# umask
0022
意思:
默认文件权限: 666 - 022 = 644
PS:
如果umask数值是奇数(例如:umask=033) 666 - 033 = 633 + 11 = 644。
如果umask数值是偶数(例如:umask=022) 666 - 022 = 644
默认目录权限: 777 - 022 = 755
umask数值是奇数 777 - 033 = 744
umask数值是偶数 777 - 022 = 755
PS: 目录的话,不论umask是奇数还是偶数,都是直接用777 减 umask 值
如何修改umask值?
临时修改:umask 数字 例如:umask 0022
永久修改:
vim /etc/profile
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022 --- 可以永久修改umask数值
fi
权限详解
读权限 chmod 444 file
普通文件:
- 超级用户
可以读取文件内容
可以编写文件内容 (需要用户 wq!强制保存退出)
可以执行文件 - 普通用户
可以读取文件内容
可以编写文件内容 (需要用户 wq!强制保存退出)
可以执行文件
目录:
- 超级用户
可以进入目录里面
可以查看目录里面的内容
可以删除里面的文件,重名名 - 普通用户
不可以进入目录里面
不可以查看目录里面的内容
不可以对里面的文件或目录操作
写入权限 chmod 222 file
普通文件
- 超级用户
可以查看文件内容
可以修改文件内容
可以执行文件 - 普通用户
不可以查看文件内容
可以修改文件内容,但是之前文件里的内容会丢失
不可以执行文件
目录
- 超级用户
可以进入目录
可以查看目录里面的内容
可以修改目录里面的文件或子目录 - 普通用户
不可以进入目录里面
不可以查看目录里面的内容
不可以对里面的文件或目录操作
执行权限 chmod 222 file
普通文件
- 超级用户
可以查看文件内容
可以强制修改文件内容
可以执行文件 - 普通用户
不可以查看文件内容
不可以执行文件
不可以编辑文件
目录
- 超级用户
可以进入目录
可以查看目录里面的内容
可以对里面的文件或子目录操作 - 普通用户
可以进入目录
可以查看目录里面的内容
可以对里面的文件或子目录操作
总结:
结论01: 只要文件有执行权限, root用户对于这个文件就属于无敌的存在
结论02: 如果想让所有用户都有文件执行能力,必须先有对文件读取能力
结论03: 如果想让所有用户都有文件写入能力,必须先有对文件读取能力
结论04: 如果想让文件写权限和执行权限起作用, 必须先有读取权限
用户相关信息文件
用户特征信息
记录系统用户信息文件
/etc/passwd
[root@oldboy-xiaodao.com.cn ~]# ll /etc/passwd
-rw-r--r-- 1 root root 2103 Feb 4 2019 /etc/passwd
/etc/passwd --- 用户信息记录文件
oldboy01:x:1003:1003:sa-xiaozhang:/home/oldboy01:/bin/bash
oldboy02:x:1004:1003:dev-xiaoli:/home/oldboy02:/bin/bash
oldboy03:x:1005:1005::/home/oldboy03:/bin/bash
oldboy04:x:1006:1006::/home/oldboy04:/bin/bash
oldboy05:x:1007:1007::/home/oldboy05:/bin/bash
oldboy06:x:1008:1008::/home/oldboy06:/bin/bash
oldboy07:x:1009:1009::/home/oldboy07:/bin/bash
第一列: 用户名称信息
第二列: 表示用户密码信息. 真正密码信息已经保存在了/etc/shadow文件中
第三列: 表示用户uid数值信息
第四列: 表示用户gid数值信息
第五列: 表示用户注释信息
第六列: 定义用户所在家目录信息
第七列: 用户是否能够登陆系统
shell信息(/etc/shells)
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
shell信息哪些设置可以进行远程登陆
/bin/bash
shell信息哪些设置不可以进行远程登陆?
/sbin/nologin
/usr/sbin/nologin
用户密码信息
记录用户密码信息文件
/etc/shadow
用户组特征信息
记录用户组的信息文件
/etc/group
用户组密码
记录用户组的密码文件
/etc/gshadow
用户相关信息目录
用户家目录的模板
/etc/skel
目录特征01:目录下面文件为隐藏文件
目录特征02:修复被破坏的用户家目录
- 表示记录环境变量和别名信息文件 .bash_profile
- 表示记录系统默认别名信息的文件 .bashrc
- 表示记录系统退出执行的命令信息 .bash_logout
该目录作用说明:
每创建一个用户,就会根据这个目录中的模板,在用户的家创建同样的文件。我们可以在这个目录创建一些公共的文件,例如:《如何使用这台Linux服务器》,这样每个用户家目录都会有这样一份文件,他们可以阅读该文件,学会如何使用Linux服务器。
用户管理相关命令
用户相关命令
useradd
作用:创建一个新用户
选项:
-u 指定用户的uid数值信息
-s 指定用户使用的shell
- 默认使用/bin/bash
- 特殊指定/sbin/nologin,主要用于添加虚拟用户使用(傀儡用户)
-M 表示不创建家目录,在创建虚拟用户使用
-g 指定用户属于的组(组的名称)[添加用户的时候默认创建一个与用户一样的家庭]
-c 创建的新用户添加注释信息
-G 指定用户还属于哪个组 指定用户附属组信息
#如何设置所属组 666 同时还属于1024这个组
useradd -u 666 oldboy30 -G 1024
[root@oldboy-xiaodao.com.cn ~]# id oldboy30
uid=666(oldboy30) gid=1025(oldboy30) groups=1025(oldboy30),1024(oldboy051)
#创建一个用户alex999指定uid为888,禁止用户登录系统,不创建家目录
useradd alex999 -u 888 -s /sbin/nologin -M --- 创建虚拟用户方法
PS:虚拟用户主要用于管理服务进程
PS:检查用户是否存在?
uid=1024(oldboy051) gid=1024(oldboy051) groups=1024(oldboy051)
用户的uid信息 用户的组id,所属组(所属主要组 ) 用户所属的其他组信息
userdel
作用:删除用户信息(避免造成数据丢失,尽量不要删除用户,而是注释用户)
选项:
默认不删除用户的家目录和邮箱
-r 删除用户有关的所有信息(家目录)
usermod
作用:修改用户信息
选项:
-u 指定新建用户的uid数值
-G 指定用户还属于哪个组 指定用户附属组信息
-g 指定用户属于主要组信息
-s 指定新建用户shell信息, 如果指定为/sbin/nologin,用户无法登陆系统
-c 创建的新用户添加注释信息
passwd
作用:设置用户密码信息
超级管理员设置用户密码
交互式设置用户密码
passwd oldboy
免交互设置用户密码
#echo 密码 | passwd --stdin 用户名
echo 123456|passwd --stdin oldboy
普通用户设置密码
交互式给自己设置密码
passwd
chown
作用:修改文件或目录所有者和属于的用户组
选项:
-R 递归修改文件或目录的所有者和用户组
chown oldboy oldboy.txt #只修改了文件的所有者
#修改了文件的所有者和属于的组。第一个是用户名,第二个是组名
chown oldboy.oldboy oldboy.txt
或
chown oldboy:oldboy oldboy.txt #修改了文件的所有者和属于的组
用户组相关命令
groupadd
groupadd (选项) (参数)
作用:创建用户组
选项:
-g:指定新建工作组的id;
-r:创建系统工作组,系统工作组的组ID小于500;
-K:覆盖配置文件“/ect/login.defs”;
-o:允许添加组ID号不唯一的工作组。
参数:
组名:指定新建工作组的组名。
groupadd -g 344 linuxde
groupmod
groupmod (选项) (参数)
作用:更改用户组 gid 或名称
选项:
-g<群组识别码>:设置欲使用的群组识别码;
-o:重复使用群组识别码;
-n<新群组名称>:设置欲使用的群组名称
参数:
组名:指定要修改的工作的组名。
groupdel
groupdel(参数)
作用:用于删除指定的工作组
参数:
组:要删除的工作组名。
用户查询命令
id 用户名/用户uid
查询得到的信息:
- 一个用户是否存在
- 查询用户的uid gid
- 属于哪个用户组
[root@localhost oldboy]# id 1000
uid=1000(cql) gid=1000(cql) 组=1000(cql)
w
显示系统中已经远程登录的用户 正在进行什么操作
[root@localhost oldboy]# w
21:49:15 up 6:52, 3 users, load average: 0.00, 0.01, 0.05
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root tty1 14:59 5:52m 0.24s 0.24s -bash
root pts/0 18:13 3.00s 0.10s 0.01s w
root pts/1 19:42 1:43m 0.02s 0.02s -bash
uptime
[root@localhost oldboy]# uptime
21:51:58 up 6:55, 3 users, load average: 0.00, 0.01, 0.05
last
作用: 哪个用户在什么时候 从哪里 远程登录你的系统 用户登录的信息
lastlog
作用:显示linux中所有用户最近一次远程登录的信息
普通用户获取权限
1.切换用户
#su 切换用户
su - root
su root
PS:
su - 切换用户时更新环境变量(连用户和shell环境一起切换成root身份了)
su 切换用户时不会更新环境变量(切换root身份,但shell环境仍然是普通用户的shell;)
su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su - 命令切换以后,工作目录变成root工作目录了。
2.修改权限
3.用户提权
#sudo 提权:普通用户可以暂时获取root用户的权限
sudo
查看当前用户的特权信息 sudo -l
查看当前用户的密码缓存 sudo -k
配置当前用户的特权信息
visudo=vi /etc/sudoers
PS:配置完成后,可以用visudo -c 进行语法检查
#授权某一个或几个命令
90 ## Allow root to run any commands anywhere
91 oldboy ALL=(ALL) /bin/ls, /bin/touch
#授权使用命令不需要密码
90 ## Allow root to run any commands anywhere
91 oldboy ALL=(ALL) NOPASSWD: ALL
#授权大量命令信息,并排除指定命令
90 ## Allow root to run any commands anywhere
91 oldboy ALL=(ALL) /bin/*, ! /bin/vi
4.设置特殊权限位
linux系统基本权限位为9位权限,但还有额外3为权限位,共12位权限:
suid s(有x) S 4 用户对应的权限位(用户对应的3位上)
sgid s(有x) S 2 用户组对应的权限位(用户组对应的3位上)
sticky t(有x) T 1 其他用户对应的权限位
suid总结:是针对命令和二进制程序的
- 用户或属主对应的前三位权限的x位上如果有s就表示suid权限。当x位上没有小写x执行权限的时候,suid的权限显示的就是大S
- suid的作用是让普通用户可以以root(或其他)的用户角色运行只有root(或其他)账号才能运行的程序或命令,或程序命令对应本来没有权限操作的文件等。
- suid和su及sudo的区别:suid为某一个命令设置特殊权限(使用者为所有人)
sgid总结:是针对用户组权限位的
对于文件来说,sgid的功能如下:
4. sgid仅对二进制程序有效
5. 二进制命令或程序需要有可执行权限x
6. 执行命令的任意用户可以获得该命令程序执行期间所属组的权限
对于目录来说,sgid的功能如下:
7. linux里默认情况所以用户创建文件,默认用户和组都是自身
8. 可以让用户在此目录下 创建的文件和目录 具有和此目录相同的用户组设置
sticky总结:
粘滞位,通常对目录而言。通常对于全局可写目录(other也可写)来说,让该目录具有sticky后,删除只对属于自己的文件有效(但是仍能编辑修改别人的文件,除了root的)。不能根据安全上下文获取对别人的文件的写权限。经典的/tmp
目录就具有sticky权限
[root@localhost ~]# ll / | grep tmp
drwxrwxrwt. 7 root root 4096 11月 10 22:22 tmp
设置方法:
suid:chmod 4755 file 或者chmod u+s file
sgid:chmod 2755 file 或者 chmod g+s file
sticky:chmod 1777 file 或者 chmod o+t file