Linux操作系统是一个多用户操作系统,它允许多用户同时登陆到系统上并使用资源。系统会根据账户来区分每个用户的文件,进程,任务和工作环境,使得每个用户工作都不受干扰
Linux如何保证多个不同的用户对同个文件进行操作时有不同的权限控制呢?
1)Linux使用User和Group来控制使用者对文件的访问权限;
2)不同用户是使用不同的账号/密码进行登录到Linux;
3)每个文件都有owner,并且每个owner都归属于某个Group;
4)每个程序/文件都有自己的owner和group;
===> 使得Linux的安全性才有严格的保障
用户:
1)每个用户都有一个唯一的UserID,唯一性标识符;
2)User的信息存储在 /etc/passwd中
root:x:0:0:root:/root:/bin/bash
每个属性之间采用:分隔
root:登录Linux的用户名
x:该用户需要使用密码才能登录, 如果为空表示不需要密码就能登录
0:数字,表示的是uid, 0到499是系统预留的, 如果是我们新增的User,那么500开始计数的
0:数字,表示的是gid
root:是账户的描述信息
/root:该用户的home路径, 如果是我们自己添加的用户呢?它的home是哪里呢?
/bin/bash:登录后执行的程序
3)/etc/shadow:存储的是用户对应的密码信息
root:$1$puUB8Y.1$5nURxhc.1a9JhdfZwgvKB0:15970:0:99999:7:::
root:账号的名称,和/etc/passwd中的用户名是一一对应的
$1$puUB8Y.1$5nURxhc.1a9JhdfZwgvKB0:密码,不是明文的,经过MD5加密的
15970:最后一次修改密码的时间
0:数字,密码不能被修改的天数
99999:数字,密码多少天后需要强制修改
7:数字,密码需要被修改之前要提醒的天数
4)每个User都有一个对应的home目录
root:/root
xxxx:home在哪里呢??????(/home/xxxx)
5)root用户:超级管理员账号,具有非常高的权限
用户组:
1)每个用户都属于一个Group,具有一个唯一的标识符
2)Group信息存储在/etc/group下
root:x:0:
root:组的名称
x:该组需要使用密码才能登录
0:数字,就是该组的id,gid
3)系统会为每个用户关联一个和User同名的Group、User也可以被加入到其他组,一个User可以对应多个组;
user:root group:root
保存用户组密码的文件:/etc/gshadow
用户配置文件:/etc/default/useradd
用户/组参考文章:
http://blog.51yip.com/linux/1137.html
https://wiki.archlinux.org/index.php/Users_and_groups_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
添加用户: useradd kgc
cat /etc/passwd
kgc:x:500:500::/home/kgc:/bin/bash
新增的kgc用户对应的根目录是/home/kgc /home/<username>
[root@kgc ~]# su - kgc //用户切换,从root切换到kgc用户,是不需要密码的
[kgc@kgc ~]$ pwd
/home/kgc
但是kgc用户切换到kgc用户自己,却提示我们需要输入密码,但是我们却不知道密码。怎么办?
[kgc@kgc ~]$ su - kgc
Password:
修改kgc用户的密码:passwd kgc
修改用户名:usermod -l new_name old_name
usermod -l kgc_linux kgc
cat /etc/passwd
kgc_linux:x:500:500::/home/kgc:/bin/bash
对用户进行名称修改时,用户名是发生了变化,但是home目录的文件夹名称并没有发生改名/home/kgc
删除用户: userdel -r kgc_linux
-r:在删除该用户时一并删除该用户对应的home文件夹
用户组添加: groupadd g1
用户组修改: groupmod -n newg1 g1
用户组删除: groupdel newg1
作业:如何为用户设置其他的组?
r: 读权限(read)可以读取文件/目录的内容 ls
w: 写权限(write)可以写、删除文件/目录
x: 执行权限(execute)可以执行可执行文件
没有权限: -
drwxr-xr-x 2 root root 4096 Oct 29 02:12 Desktop
rwx
r-x
r-x
第一位:文件类型 d是目录 -是文件 l是链接
第2-4位:所属用户的权限, 用u(user)表示
第5-7位:所属组的权限,用g(group)表示
第8-10位:其他用户的权限,用o(other)表示
第2-10位:表示所有的权限,用a(all)表示
d rwx -w- ---
目录、owner权限为可读写执行、group权限为可写、others没有任何权限
- rwx rwx r-x
文件、owner权限为可读写执行、group权限为可读写执行、others可读可执行
字符表示法:chmod [-R] mode file
mode有哪些:
who operator permission
u(owner) + r
g(group) - w
o(others) = x
a(ugo)
去掉owner的写权限:chmod u-w perm
为group添加写权限:chmod g+w perm
为owner和group添加写权限: chmod ug+w perm
ugo去掉执行权限: chmodugo-x perm
为文件夹添加执行权限: chmod a+x perm
others改成写权限:chmod o=w perm
将perm文件夹的所有权限去掉: chmod a= perm
虽然perm目录的权限都被我们删除了,但是并不影响该目录下的子目录或者文件的权限
给perm文件夹下的所有文件都添加rwx权限: chmod -R a+rwx perm(-R是递归操作)
数字表示法: r用4表示、w用2表示、x用1表示、没有权限用0表示
owner: rwx: 4 + 2 + 1 = 7
group: r-x: 4 + 0 + 1 = 5
others: r--: 4 + 0 + 0 = 4
rwxr-xr-- = 754
owner设置r-x: r=4 w=0 x=1 5 chmod 577 perm
ugo设置r-x: chmod 555 perm 递归设置:chmod -R 555 perm
作业:============================================》
创建一个目录test,并在test目录下创建file1.txt文件、file3.txt文件和file2.txt文件,为目录test增加所有权限,为file1.txt增加用户的执行权限,为file2.txt删除组的所有权限,将文件file3.txt的用户权限改为读写执行,组权限改为读写,其他用户权限改为读。
参考答案:
第1步:mkdir test (创建test文件夹)
第2步:cd test (进入test文件夹)
第3步:touch file1.txt (创建文件file1.txt)
第4步:touch file1.txt (创建文件file2.txt)
第5步:touch file3.txt (创建文件file2.txt)
第6步:chmod a=rwx test或chmod 777 test(为目录test增加所有权限)
第7步:cd test (进入test)
第8步:chmod u+x file1.txt (为文件file1.txt增加执行权限)
第9步:chmod g= file2.txt (为文件file2.txt删除组的所有权限)
第10步:chmod u=rwx file3.txt (将文件file3.txt的用户权限改为读写执行)
第11步:chmod g=rw file3.txt (将文件file3.txt的组权限改为读写权限)
第12步:chmod o=r file3.txt (将文件file3.txt的其他用户权限改为写)
(第10到12步可以用数字表示法:chmod 764 file3.txt)