一、软件包管理
1.1 Linux分为源码包和二进制包(rpm包)
源码包:开源、可选择安装功能、需编译安装 更稳定、卸载方便,但安装步骤多,编译时间长,报错不易解决;
/usr/local/软件名/ | 源码包 默认安装路径(卸载的话直接将/usr/local/<包名>删除即可) | |
源码包安装:将包解压 | ./configure [--prefix=/usr/local/<>] |
定义需要的功能选项; 检测系统环境是否符合要求; 将前两项结果写入makefile文件; |
make | 编译(make clear清空编译) | |
make install | 编译安装 |
rpm包:安装快、简单,但看不到源码、依赖性更大。
rpm默认安装路径 | |||
/etc/ | 配置文件 | /usr/bin/ | 可执行的命令 |
/usr/share/doc | 软件使用手册 | /usr/share/man/ | 帮助文件 |
1.2 rpm命令管理
rpm安装最大问题:依赖性
(1)依赖分为树形依赖,环形依赖(同时安装所有包),模块依赖
#模块依赖 mount /dev/sr0 /mnt/cdrom/ #挂载系统镜像 cd /mnt/cdrom/Packages #选择安装mysql为例 rpm -ivh mysql-connector-odbc* #提示缺少依赖libobdcinst.so.2,so.2格式为安装库,只需找到对应的安装包即可安装,可通过http://www.rpmfind.net/这个网站查询对应的安装包
(2) -i 安装, -v 显示详细信息, -h显示进度, -U升级, --nodeps 不检测依赖性, -e 卸载
-q 查询, -a 所有, -i 查询软件信息, -p 查询未安装包的信息
rpm -ivh make-3.82-23.el7.x86_64.rpm rpm -Uvh make-3.85-20.el7.x86_64.rpm rpm -e make rpm -qa | grep make rpm -qi make rpm -qip zip-3.0-11.el7.x86_64.rpm
rpm -qf <系统文件> #查询系统文件属于哪个安装包
rpm -qRp <包名> #查询未安装包依赖
1.3 yum在线管理
(1)IP地址配置和yum源网络配置
# 修改网络配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 service network restart '''''' TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=50ac09de-bd8f-42f4-99a0-bf6d5d244b9d DEVICE=ens33 ONBOOT=yes HWADDR=00:0C: : : ''''''
#配置网络YUM源 vi /etc/yum.repos.d/CentOS-Base.repo ''''''' [base] 容器名称 mirrorlist 镜像站点 baseurl yum源服务器地址 enabled 此容器是否生效 gpgcheck RPM的数字证书是否生效 gpgkey 数字证书的公钥文件保存位置 '''''''
(2)yum命令
yum list yum search <包名> yum -y install <包名> rpm -q gcc #查询安装结果 yum -y update <包名> yum -y remove <包名> #尽量不用yum卸载,会将依赖一起卸载,可能引入其他包的依赖问题 yum grouplist yum groupinstall <软件组名>
(3)光盘yum源搭建
# 1 挂载光盘 mount /dev/sr0 /mnt/cdrom/ # 2 修改配置文件,本地YUM源配置文件为CentOS-Media.repo,让这个文件生效,其他.repo文件失效(可将其他全备份改名)。 cd /etc/yum.repos.d/ vim CentOS-Media.repo #改enabled=1,baseurl=file:///mnt/cdrom/
二、用户管理
2.1 用户信息文件 /etc/passwd
man 5 passwd #用man打开配置文件 vi /etc/passwd # 每一行代表一个用户 # root:x:0:0:root:/root:/bin/bash # 用户名:密码标识:UID:GID:用户说明:家目录:登录之后的shell UID: 0---超级用户,1-499---系统用户,500-65535---普通用户
2.2 影子文件 /etc/shadow
vi /etc/shadow # zf:$6$P8QkrNzO$0dbklAZRWTqNgmneADWWlKoT70gRuZu.hu3A2jwExuxkOV.RZ4nGCAVkoyDHYrJk75RStR0ffZS0Y3UlzKXBp0:18299:0:99999:7::: # 用户名:加密密码:修改时间戳:密码修改时间间隔:有效期:警告天数
2.3 组信息文件 /etc/group
组密码文件 /etc/gshadow
vim /etc/gshadow '''''' root::: zf:!:: 组名:组密码:组管理员用户名:组中附加用户 '''''' vim /etc/group '''''' root:x:0: zf:x:1000: 组名:组密码标志:GID:组中附加用户 ''''''
2.4 用户家目录
普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700;
超级用户:/root/,所有者和所属组都是root,权限是550
# 将普通用户改为超级用户 vi /etc/passwd '''''' 将UID(第3列)改为0 zf:x:0:1000::/home/zoufan:/bin/bash
''''''
2.5 用户管理命令
#1 用户添加 useradd useradd test # 选项 -u UID,-c 用户说明,-G组名 useradd -u 666 -G root,zf -c "test user" -d /zzff zzff #2 修改密码 passwd passwd test #选项 -S查询用户密码的状态 -l暂时锁定用户 -u解锁用户 #3 修改用户信息 usermod / chage usermod -c "test user" -G root zzff chage -l zzff # 修改用户密码状态 #4 删除用户 userdel userdel -r zzff # -r删除用户的同时删除家目录 #5 用户切换 su su - root # -连带环境变量一起切换 su - root -c "useradd testuser" # -c仅执行一次命令,不切换用户身份
2.6 用户组管理命令
# 1添加用户组 groupadd testg # 2修改用户组 groupmod -n tg testg # 3删除 groupdel tg
三、权限管理
3.1 ACL权限(Access Control List)
(1)定义:一个针对文件/目录的访问控制列表
在普通权限中,用户对文件只有三种身份,就是属主、属组和其他人;每种用户拥有读、写、执行3种权限;ACL用于设定用户针对文件的权限。
(2)应用场景:如图,/project为班级文件夹,属主为老师Teacher,属组为班级名Python,班级同学有Stu1、Stu2。project的权限为770,即老师和两位同学对project的权限为rwx,其他人为---。现有一位旁听人st,需设定他对project的权限为r-x,则此时需要设定ACL权限
#1 查看分区ACL权限是否开启 df -h #找根分区对应的盘符,假设是/dev/sda3 dumpe2fs -h /dev/sda3 #dumpe2fs查询指定分区文件系统信息 #2 设置ACL权限命令 setfacl # 选项:-m设定ACL权限, -x删除指定的ACL权限, -b删除所有ACL权限,-d设定默认ACL权限, -k删除默认ACL权限, -R递归设定ACL权限 mkdir /project chown root:Python /project/ chmod 770 /project/ useradd Stu1 useradd Stu2 groupadd Python gpasswd -a Stu1 Python #将用户加入指定组中 gpasswd -a Stu2 Python useradd st setfacl -m u:st:rx /project/ #用户st ACL权限 setfacl -m g:gt:rx /project/ #组gt ACL权限 getfacl /project
(3)最大有效权限和删除ACL权限
- 最大有效权限mask:mask值和设定值求“相与”值
setfacl -m m:rx /project
- 删除ACL权限
setfacl -x u:st /project #删除用户ACL setfacl -x g:gt /project #删除用户组ACL setfacl -b /project #删除所有ACL
(4)默认ACL权限和递归ACL权限
#1 递归 setfacl -m u:st:rx -R /project/ #2 设定默认ACL setfacl -m d:u:st:rx -R /project/
3.2 文件特殊权限
(1)SetUID
# SetUID功能:对可执行的二进制程序,命令暂时可获得该文件属主身份 # 设置SetUID:chmod 4755 <文件名> whereis vim chmod 4755 /usr/bin/vim ll /usr/bin/vim #修改vim可执行程序的SetUID权限,使用普通用户即可用vim对任意w权限文件修改 # SetUID危险性 1、关键目录严格控制写权限,如“/”、“/usr”; 2、定时检查除系统默认的SetUID权限
(2)SetGID:和SetUID类似,获得的是属组身份,对象包括可执行文件和目录
(3)Sticky BIT:和SetUID类似,获得的是其他人身份,对象为目录
3.3 文件系统属性chattr权限
chattr权限可限制root用户,但是主要是用来防止root误操作
# chattr选项: i 对文件,相当于给文件加锁,不能改,不能删除; 对目录,不能新建和删除文件,只能修改目录下的文件的数据 a 对文件,只能在文件中追加数据,不能改,不能删除; 对目录,不能删除文件,只能在目录中新建和修改文件 chattr +i test.txt lsattr -a test.txt #查看chattr属性,-a显示所有文件和目录,-d列出目录属性 chattr -i test.txt chattr +a test.txt
3.4 系统命令sudo权限
用途:将只能root用户拥有权限的命令赋予普通用户
#1 需要root用户将命令权限赋予普通用户,操作对象是系统命令 visudo #实际是修改/etc/sudoers文件 '''''' 用户名 被管理主机IP=授权命令(绝对路径) root ALL=ALL zf 10.10.10.1=/sbin/vim zf ALL=/sbin/shutdown -r now '''''' su - zf #切换zf用户 sudo -l #查看可用的sudo命令 sudo /sbin/shutdown -r now #使用绝对路径执行