第五章、Linux用户及权限详解
03_04_Linux用户及权限详解
今天内容:
用户、组、权限
用户,用户组: 都只是标识符
安全上下文(secure context):
权限:
r, w, x
文件:
r:可读,可以使用类似cat等命令查看文件内容;
w:可写,可以编辑或删除此文件;
x: 可执行,eXacutable,可以命令提示符下当作命令提交给内核运行;
目录:
r: 可以对此目录执行ls以列出内部的所有文件;
w: 可以在此目录创建文件;
x: 可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息;
rwx:
r--:只读
r-x:读和执行
---:无权限
0 000 ---:无权限
1 001 --x: 执行
2 010 -w-: 写
3 011 -wx: 写和执行
4 100 r--: 只读
5 101 r-x: 读和执行
6 110 rw-: 读写
7 111 rwx: 读写执行
755:rwxr-xr-x:属主 属组 其他
rw-r-----: 640
660: rw-rw----
rwxrwxr-x: 775
用户:UID, /etc/passwd
组:GID, /etc/group
影子口令:
用户:/etc/shadow
组:/etc/gshadow
用户类别:
管理员:0
普通用户: 1-65535
系统用户:1-499, 不需要登录系统,只用来运行某些后台服务
一般用户:500-60000
用户组类别:
管理员组:
普通组:
系统组:
一般组:
用户组类别:
私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组
基本组:用户的默认组
附加组,额外组:默认组以外的其它组
e.g:
进程:tom tom
对象:rwxrw-r-- jerry tom a.txt
tom执行ls命令
rwxr-xr-x root root /bin/ls, 文件属主各属组
ls 运行时,进程的属主是运行的用户
man 5 passwd
/etc/passwd
account: 登录名
password: 密码
UID:
GID:基本组ID
comment: 注释
HOME DIR:家目录
SHELL:用户的默认shell, cat /etc/shells查看合法shell
man 5 shadow: 查看/etc/shadow文件格式
/etc/shadow
account: 登录名
encrypted password: 加密的密码,两个!号表示锁定,不允许登录。格式: $1位$8位$密码
1位段: 加密方法
8位段:杂质(随机生成)
加密方法:
对称加密:加密和解密使用同一个密码
公钥加密:每个密码都成对儿出现,一个为私钥(secret key),一个为公钥(public key)
单向加密,散列加密:提取数据特征码,常用于数据完整性校验
特性: 1、雪崩效应 2、定长输出
MD5:Message Digest, 128位定长输出
SHA1:Secure Hash Algorithm, 160位定长输出
非对称加密更长,速度慢,慢3个数量级(1000倍以上)
用户,组添加
useradd USERNAME
groupadd GRPNAME
用户管理:
useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage
组管理:
groupadd, groupdel, groupmod, gpasswd
权限管理:
chown, chgrp, chmod, umask
/etc/passwd:
用户名:密码:UID:GID:注释:家目录:默认SHELL
/etc/group:
组名:密码:GID:以此组为其附加组的用户列表
/etc/shadow:
用户名:密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告时间:非活动时间:过期时间:
用户管理:
useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage
04_01_Linux用户管理命令详解
1. useradd [options] USERNAME
-u UID
-g GID(基本组)
-G GID,... (附加组) 一个用户可以属于多个附加组
-c "COMMENT"
-d /path/to/directory 指定家目录
-s SHELL ; /etc/shells:指定了当前系统可用的安全shell
-m -k 创建家目录,并复制SKEL_DIR(default: /etc/skel) 下的文件到家目录
-M 不创建用户主目录,即使系统在 /etc/login.defs 中的设置 (CREATE_HOME) 为 yes。
-r: 添加系统用户
/etc/login.defs 用户操作的一些选项
环境变量:
PATH
HISTSIZE
SHELL
2. userdel:
userdel [option] USERNAME
-r: 同时删除用户的家目录
3. id:查看用户的帐号属性信息
-u 显示uid
-g 显示基本组id
-G 显示附加组id
-n 显示名称,而非ID号,结合其它选项
4. finger: 查看用户帐号信息
finger USERNAME
5. usermod: 修改用户帐号属性
-u UID
-g GID
-a -G GID:不使用-a选项,会覆盖此前的附加组;
-c "COMMENT"
-d -m:修改家目录,并复制原家目录下文件到新家目录下
-s : shell
-l : 修改用户名
-L:锁定帐号
-U:解锁帐号
6. chsh: 修改用户的默认shell
7. chfn:change finger 修改更改真名和信息,注释信息
8. passwd [USERNAME]: 密码管理
--stdin 从标准输入接收密码, echo "redhat" | passwd --stdin root
-l lock
-u unlock
-d: 删除用户密码
9. pwck:检查用户帐号完整性
组管理:
10. groupadd:创建组
-g GID
-r:添加为系统组
11. groupmod
-g GID
-n GRPNAME
12. groupdel
13. gpasswd:为组设定密码
14. newgrp GRPNAME <--> exit(退出临时组): 临时切换为其他基本组,这时候需要用到组密码(切换到自己的附加组不需要)
练习:
1、创建一个用户mandriva,其ID号为2002,基本组为distro(组ID为3003),附加组为linux;
# groupadd -g 3003 distro
# groupadd linux
# useradd -u 2002 -g distro -G linux mandriva
2、创建一个用户fedora,其全名为Fedora Community,默认shell为tcsh;
# useradd -c "Fedora Community" -s /bin/tcsh fedora
3、修改mandriva的ID号为4004,基本组为linux,附加组为distro和fedora;
# usermod -u 4004 -g linux -G distro,fedora mandriva
4、给fedora加密码,并设定其密码最短使用期限为2天,最长为50天;
# passwd -n 2 -x 50 fedora
5、将mandriva的默认shell改为/bin/bash;
usermod -s /bin/bash mandirva
6、添加系统用户hbase,且不允许其登录系统;
# useradd -r -s /sbin/nologin hbase
7、
chage:修改用户密码过期时间
-d: 最近一次的修改时间
-E: 过期时间
-I:非活动时间
-m: 最短使用期限
-M: 最长使用期限
-W: 警告时间
04_02_权限及权限管理
复习:
权限管理:
r:
w:
x:
三类用户:
u: 属主
g: 属组
o: 其它用户
1. chown: 改变文件属主(只有管理员可以使用此命令)
# chown USERNAME file,...
-R: 修改目录及其内部文件的属主
--reference=/path/to/somefile file,...
chown USERNAME:GRPNAME file,...
chown USERNAME.GRPNAME file,...
2. chgrp: 改变文件属组
# chgrp GRPNAME file,...
-R:recursive
--reference=/path/to/somefile file,...
3. chmod: 修改文件的权限
修改三类用户的权限:
chmod MODE file,...
-R:recursive
--reference=/path/to/somefile file:参考某个文件设定权限
修改某类用户或某些类用户权限:
u,g,o,a
chmod 用户类别=MODE file,...
e.g: chmod Go=rw,u=r /tmp/abc
修改某类用户的某位或某些位权限:
u,g,o,a
chmod 用户类别+|-MODE file,...
chmod u-x /tmp/abc
chmod u+x,g-x /tmp/abc
chmod u-rx /tmp/abc
练习:
1、新建一个没有家目录的用户openstack;
# useradd -M openstack
2、复制/etc/skel为/home/openstack;
# cp -r /etc/skel /home/openstack
3、改变/home/openstack及其内部文件的属主属组均为openstack;
# chown -R openstack:openstack /home/openstack
4、/home/openstack及其内部的文件,属组和其它用户没有任何访问权限
# chmod -R go= /home/openstack
手动添加用户Hive, 基本组为hive (5000),附加组为mygroup
1. 修改/etc/passwd文件,data +%s 得到19700101到当前的秒数,使用bc(bc是Linux下的计算器)把秒数除以一天的秒数86400,得到19700101到今天的天数。
2. 创建家目录、复制文件、修改文件权限
3. 修改/etc/shadow文件,使用sslpasswd可以生成加盐的加密串。
openssl passwd -1 -salt '12345678'
4. umask:遮罩码
文件:666-umask
目录:777-umask
# umask
# umask 022
文件默认不能具有执行权限,如果算得的结果中有执行权限,则将其权限加1;
umask: 023
文件:666-023=643 X
目录:777-023=754
站在用户登录的角度来说,SHELL的类型:
登录式shell:
正常通常某终端登录
1. su - USERNAME
2. su -l USERNAME
非登录式shell:
1. su USERNAME
2. 图形终端下打开命令窗口
3. 自动执行的shell脚本
bash的配置文件:
全局配置
/etc/profile, /etc/profile.d/*.sh, /etc/bashrc
个人配置
~/.bash_profile, ~/.bashrc
profile类的文件:
设定环境变量
运行命令或脚本
bashrc类的文件:
设定本地变量
定义命令别名
登录式shell如何读取配置文件?
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非登录式shell如何配置文件?
~/.bashrc --> /etc/basrc --> /etc/profile.d/*.sh