首页 文章 精选 留言 我的

精选列表

搜索[运维监控],共10000篇文章
优秀的个人博客,低调大师

Linux运维 第二阶段 (五)权限管理

1、计算机资源: 权限:rwx(八进制数0-7表示权限位,rwx分别用421表示,例如:r(100),w(010),x(001),rwx(111)) 用户:标识符UID,/etc/passwd,/etc/shadow 用户组:容器,关联权限,方便地指派权限,标识符GID,/etc/group,/etc/gshadow 2、安全上下文(secure context): 文件(文件默认无x权限): r(可读,可以使用cat等命令查看文件内容) w(可写,可以编辑或删除此文件) x(可执行,excutable,可在命令提示符下当作命令提交给内核运行) 目录: r(可对此目录执行ls以列出内部的所有文件) w(可在此目录中创建文件) x(可以使用cd切换进此目录,也可使用ll查看内部文件详细信息) 3、权限管理命令:chown,chmod,chgrp,umask #chownOWNER[:GROUP] FILE(改变文件(目录也是文件)的属主或属组) #chown-R--reference=/PATH/TO/SOMEFILE DIR(-R,--recursive递归,--reference参考某文件的属主属组来更改此文件的属主属组) #chgrpGROUP FILE #chgrp-R--reference=/PATH/TO/SOMEFILE DIR #chmodMODE FILE #chmod-R MODE DIR #chmod--reference=/PATH/TO/SOMEFILEFILE #chmod用户类别=MODE FILE(修改某类用户或某些类用户的权限,u,g,o,a) #chmod用户类别<+|->MODE FILE #umask(遮罩码,文件默认权限666,目录默认权限777) #umask023 文件:666-023=644(文件默认不能有执行权限,如果算得的结果中有执行权限,则将其权限加1) 目录:777-023=754 4、特殊权限: SUID(运行某程序时,相应进程的属主是程序文件的属主,而不是启动者,如/usr/bin/passwd) SGID(运行某程序时,相应进程的属组是程序文件的属组,而不是启动者) sticky(在一个公共目录,每个用户都可以创建文件,但仅允许删除自己的文件,不能删除别人的文件) 以上三个对应权限位为4、2、1 #chmodu+s FILE(#chmod 4644FILE,如果文件原来就有执行权限,则SUID显示为s,否则显示为S) #chmodg+s FILE(#chmod 2644FILE) #chmodo+t /DIR(#chmod 1755/DIR,如果原目录有执行权限显示为t,否则显示为 举例:同一项目,不同用户同属这个项目的组,创建的文件在此目录下为该目录的属组 #mkdir/tmp/project #groupadddevelopteam #useradduser1 #useradduser2 #useradduser3 #chown-R :developteam /tmp/project #usermod-a -G developteamuser1 #usermod -a-G developteam user2 #usermod-a -G developteamuser3 #chmodg+w /tmp/project #chmodg+s /tmp/project #ll-d /tmp/project #su- user1 $cd/tmp/project;touch a.user1 $ll/tmp/project/ $logout 5、facl(filesystemaccess control list):利用文件扩展保存额外的访问控制权限 #setfacl-m u|g|o:UID|GID:PERMS FILE(--modify设定facl) #setfacl-x u|g|o:UID|GID FILE(--remove取消facl) #setfacl-m [-R] d:u|g:UID|GID:PERMS DIR(给目录设facl权限) #setfacl-m m:PERMS FILE(设置mask权限) #getfaclFILE #setfacl-m u:hadoop:rw /backup/inittab #getfacl/backup/inittab #ls-l /bakup/inittab(设定好后权限位为-rw-rw-r--+,+表示有扩展属性) #setfacl-m g:mygroup:rw /backup/inittab #getfacl/backup/inittab #setfacl-x u:hadoop inittab #setfacl-x g:mygroup inittab #setfacl-R -m d:u:hive:rw/tmp/project(给目录设facl) 注:默认权限应用顺序:owner-->group-->other; 有facl后权限应用次序为:owner-->facl,user-->group-->facl,group-->other 6、sudo:某个用户能以另外一个用户的身份通过某主机执行某命令 配置文件:/etc/sudoers权限440 #visudo(edit the sudoersfile此命令可直接编辑配置文件并检查语法,不用#vim /etc/sudoers) Defaults(定义默认属性) WHOWHICH_HOSTS=(RUNAS) [TAG:] COMMAND(RUNAS表示以谁的身份,常用的TAG有NOPASSWD:、PASSWD:,需要输密码的有5分钟有效期限) WHO(User_Alias用户别名,用户的用户名,组名前使用%,还可包含其它已经定义的别名) WHICH_HOSTS(Host_Alias主机别名,主机名,IP,网络地址,其它主机别名) RUNAS(Runas_Alias用户名,%组名,其它的Runas别名) COMMAND(Cmnd_Alias,命令路径,目录(此目录内的所有命令),其它事先定义过的命令别名) 举例: #visudo hadoopALL=(root)NOPASSWD:/usr/sbin/useradd,PASSWD:/usr/sbin/usermod #su- hadoop $sudo/usr/sbin/useradd tom(不用输入密码即可使用此命令) $sudo/usr/sbin/usermod -s /bin/cshtom(第一次输账号密码后有效期为5分钟,在5分钟内执行第二次不需输密码) $sudo-l(列出当前用户可使用的sudo命令) $sudo-k(取消有效期5分钟,无论下次何时使用sudo命令都要输入密码) #visudo User_AliasUSERADMIN = hadoop,%hadoop,%USERADMIN Cmnd_Alias USERADMINCMND =/usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel, /usr/bin/passwd[A-Za-z]*, ! /usr/bin/passwd root USERADMIN ALL=(root) NOPASSWD:USERADMINCMND $sudo/usr/bin/passwd tom #tail/etc/secure(注意此文件权限为600) 以上是学习《马哥网络视频》做的笔记。 一、权限管理(解决用户和身份不足的问题) 》#dumpe2fs -h/dev/sda2 (查询指定分区详细文件系统信息的命令,-h仅显示超级块中的详细信息) #mount -oremount,acl / (重新挂载根分区,加入acl权限) 》acl基本命令: #getfacl文件名(查询文件的acl权限) #setfacl -m u:用户名:权限 文件名 #setfacl -m g:组名:权限 文件名 #setfacl -m u:用户名:权限 –R /test (赋予递归acl权限,只能赋予目录) #setfacl -md:u:用户名:权限–R /test (加入默认权限,默认权限只能赋予目录) #setfacl -b/test (删除acl所有权限) #setfacl -xu:aa (删除指定用户和用户组的acl权限) 注意:如果给目录赋予acl权限,以下两条命令都要: #setfacl -m u:用户名:权限 /test (只对已经存在的文件生效) #setfacl -md:u:用户名:权限 /test (只对未来要新建的文件生效) 最大有效权限mask(实际设置的权限与最大权限相与才是有效权限,effective) #setfacl -mm:rx project/ (设定mask权限为rx,使用“m:权限”格式) #getfacl project/ 二、sudo授权 #visudo (与操作vi一样) root ALL=(ALL) ALL 用户名被管理主机的IP=(可使用的身份)授权命令(绝对路径) %wheel ALL=(ALL) ALL %组名被管理主机的IP=(可使用的身份)授权命令(绝对路径) 用户名/组名:代表root给哪个用户或组赋予命令,注意组名前加“%” 被管理主机的IP:如果写ALL代表可以管理任何主机,如果写固定IP,代表用户可以管理指定的服务器。这里的IP指的是用户可以管理哪个IP地址的服务器,如果一台独立的服务器那写IP地址和ALL都一样。而写入网段,只有对NIS用户和密码集中管理的服务器才有意义。这里写本机的IP地址,代表指定的用户可以从任何来源IP地址来管理当前服务器,并不是只允许本机的用户使用指定命令。 可使用的身份:把来源用户切换成什么身份使用,ALL代表可切换成任意身份,这个字段可省略 授权命令:代表root把什么命令授权给普通用户,细化到选项和参数,注意命令一定要写成绝对路径 例:授权用户lamp可以重启服务器 #visudo lamp ALL=/sbin/shutdown -r now $sudo -l 例:授权一个用户管理你的web服务器,从三处着手:可使用apache管理脚本;可修改apache配置文件;可更新网页内容。 lamp ALL=/etc/rc.d/init.d/httpd reload, /etc/rc.d/init.d/httpd configtest 注:重新读取配置文件让更改的设置生效(reload);检测apache语法错误(configtest);不允许执行stop/restart等操作 lamp ALL=/bin/vi /etc/httpd/conf/httpd.conf 注:授权可使用root身份使用vi编辑配置文件 #chown lamp/var/www/html/ 注:授权lamp对此目录具有写权限或更改此目录的属主为lamp 例:授权aa用户可创建新用户 aa ALL=/usr/sbin/useradd aa ALL=/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd “”,!/usr/bin/passwd root 三、文件特殊权限 1、setuid:只有可执行的二进制程序才能设定suid权限;命令执行者要对该程序拥有x权限;命令执行者在执行该程序时获得该程序文件属主的身份;只在该程序执行过程中有效。 #ll /etc/shadwo #ll /usr/bin/passwd -rwsr-xr-x 危险的suid:#chmod u+s/usr/bin/vim 几点建议:关键目录严格控制w权限,如:/,/usr等;密码严格遵守三原则;对系统中默认具有setuid的文件作一列表,定时检查有没有这之外的文件被设置了suid权限。 2、setgid 》针对文件:只有可执行的二进制程序才能设置sgid;命令执行者要对该程序拥有w权限;执行时组身份升级为该文件的属组;在程序执行过程中有效。 #ll /var/lib/mlocate/mlocate.db #ll /usr/bin/locate 》针对目录:普通用户必须对此目录拥有rx;普通用户在此目录中的有效组会变成此目录的属组;当普通用户对此目录拥有w,新建文件的默认属组是这个目录的属组。 3、sticky BIT:粘着位,仅针对目录有效;普通用户对该目录拥有WX,可在此目录拥有写权限;设置了SBIT,普通用户有W,只能删自己建立的文件,不能删其它用户建立的文件。 SUID:4 SGID:2 SBIT:1 #chmod 4755ftest #chmod 2755ftest #chmod 1755ftest 四、chattr (文件系统属性权限) #chattr [+-=] i|a|e文件或目录 i:对文件:不允许删除、改名、不能添加修改数据,已锁死; 对目录:只能修改目录下文件的数据,不允许建立和删除文件。 a:对文件:可增加数据,但不能删除和修改数据; 对目录:只允许在目录中建立和修改文件,但不允许删除 e:linux中绝大多数的文件默认拥有e属性,表示该文件使用ext文件系统进行存储,不能用#chattr -e取消e属性。 #lsattr -a|-d文件名(-a,all;-d,directory) 本文转自 chaijowin 51CTO博客,原文链接:http://blog.51cto.com/jowin/1641485,如需转载请自行联系原作者

优秀的个人博客,低调大师

运维之我的docker-Dockerfile构建镜像详情

介绍 docker构建镜像就像java的编译代码工作一样“docker build -t centos7-nginx .”,这句话意思是自动寻找当前目录下的 Dockerfile文件进行构建(build)镜像,镜像名“centos7-nginx”,至于执行Dockerfile内的指令则是自上而下逐步进行的. 当然Dockerfile写起来很简单,但是希望大家遵循几个docker初创理念,同样是官方推荐用法: 1.你的docker尽量保持轻盈的,保证我们随时可以停止,删除,重新构建新的实现最小化的设置和配置。 这样就要求你在构建镜像时尽量创建一个空目录,在里面放入有效文件进行构建,如果实在无法避免就写一个.dockerignore文件把不必要的文件忽略 2.避免安装不必要的包,否则会增加你的镜像大小 3.每个容器尽量只运行一个进程,多个应用运行多个容器,这样更容易让你横向批量拓展。而不是把多个应用集成到一个容器内,当然如果你只是为了方便拷贝环境确实可以这么做,或者使用更聪明的link方法。 4.层数的最小化,可以说docekr里面每个指令都是一层。为了可读行,快速性方便你以后长期维护 5.当你一行的操作太长的时候尽量使用“\”去把各个操作分成更短的行方便你修改和查看 6.因为Dockerfile是由上向下执行,每个指令都会生成一个层默认会缓存构建结果。如果你最后一指令构建错了或做了修改,重新构建时只会执行最后一个指令。如果想去掉这个缓存请使用--no-cache=true docker在构建新的镜像时需要写一个Dockerfile文件里面描述了新的镜像是基于哪个镜像,中间需要哪些操作等等,下面做把镜像做比喻 docker创建镜像的创建想做饭一样: 1.首先我们准备一个干净厨房:目录`myp_w_picpath`,然后把需要的食材(文件)放到这 2.在目录里面写一个饭菜需要的:食谱“Dockerfile”,当然食谱是需要注明食材加入的先后顺序的 FROMregistry.cn-hangzhou.aliyuncs.com/forker/centos7#这里声明镜像是基于哪个镜像创建的 MAINTAINERbaishaohua #指定维护的人 RUNyum-y installsshd #给你的镜像执行特定操作相当于/bin/sh-c CMD/usr/sbin/sshd-D#一个dockerfile只能有一个CMD如果有多个只执行最后一个 LABELversion="1.0" #标签信息 EXPOSE #容器监听指定端口 上面是几个常用的,下面有几个:ENV,ADD,COPY,ENTRYPOINT,VOLUME,USER,WORKDIR 3.构建容器:材料准备好以后,下面就开始做饭了 [root@salt-node1 bai]#catDockerfile FROMcentos7 RUNyum-yinstall openssh-serveropenssh-clients CMD/usr/sbin/sshd -D [root@salt-node1 bai]#dockerbuild-tcentos7sshv1. SendingbuildcontexttoDockerdaemon2.048kB#docker确认build需要的信息 Step1:FROMcentos7 #引用指定的镜像到本地,这里ID是中间基础容器 --->00f6c5817350 Step2:RUNyum-yinstallopenssh-serveropenssh-clients#基于上面的容器运行RUN里面的命令生成新的基础容器 --->Usingcache --->c173480a6c42 Step3:CMD/usr/sbin/sshd-D #基于上面的容器运行RUN里面的命令生成新的基础容器并构建成镜像,删除临时容器 --->Runningine8072b88b11b --->ee81230261f1 Removing intermediatecontainere8072b88b11b Successfullybuilt ee81230261f1 4.运行新的容器 [root@salt-node1 bai]#dockerrun-d--name"testssh"-p8022:22centos7sshv2 cc225eff2520c47d54b264d5a338bb127933812d53e98f1c2b799bc8bb688f21 #########################| 华丽分割线 |################################### 下面详细介绍各个Dockerfile的参数,这里执行要大些 FROM FROM [base_p_w_picpath] 你的镜像基于哪个基础镜像进行构建的 MAINTAINER MAINTAINER operation@example.com 这个是显示镜像维护人 RUN 运行命令,有两种方式如下,它的运行原理是 /bin/sh -c 注意:1. 这里传递是通过json所以只能用双引号,2.他不会运行脚本所以执行的时候不能获取系统变量 RUN ps RUN ["executable", "param1", "param2"] LABEL 你可以通过标签让更多的人知道你的镜像信息例如:授权许可,帮助你的自动化,或者其它。 你可以添加一个开始标签,一个值或多个值。如果你的字符串包含空格请用双引号进行包裹。 举例: # Set one or more individual labelsLABEL com.example.version="0.0.1-beta"LABEL vendor="ACME Incorporated"LABEL com.example.release-date="2015-02-12"LABEL com.example.version.is-production="" # Set multiple labels on one lineLABEL com.example.version="0.0.1-beta" com.example.release-date="2015-02-12" # Set multiple labels at once, using line-continuation characters to break long linesLABEL vendor=ACME\ Incorporated \ com.example.is-beta= \ com.example.is-production="" \ com.example.version="0.0.1-beta" \ com.example.release-date="2015-02-12" EXPOSE 用来指定容器监听哪些端口,但是容器并不会暴露这些端口给服务器,除非你启动容器时使用-P参数。 ENV 它将把容器内部的很多变量替换掉,用你指定的key ENV key=value ADD 把指定文件标准输入到镜像内,如果是压缩文件将会被自动解压,当然这里是 支持通配符 < dest >是一个绝对路径或相对路径WORKDIR,源将被复制在目的地的容器。 ADD hom* /mydir/ # adds all files starting with "hom" ADD hom?.txt /mydir/ # ? is replaced with any single character, e.g., "home.txt" ADD test relativeDir/ # adds "test" to `WORKDIR`/relativeDir/ ADD test /absoluteDir/ # adds "test" to /absoluteDir/ ADD http://example.com/foobar / COPY 用法基本和ADD一致 ENTRYPOINT 有两种运行方式,他的主要作用:一些你常用的参数可以加到这里,当你执行的时候自动添加 ENTRYPOINT ["executable", "param1", "param2"] (exec form, preferred) ENTRYPOINT command param1 param2 (shell form) VOLUME 创建一个数据卷,这个是映射到系统的“/var/lib/docker/volumes/<容器ID>/_data/” 如果你重新构建镜像这个数据卷信息将被清除,注意:因为这里是为了构建一个标准json所以只能用双引号, 单引号是会报错的 VOLUME /opt/code/ VOLUME ["/data", "/opt"] USER RUN和ENTRYPOINT 将使用哪个用户运行 USER daemon WORKDIR 设置Dockerfile里面RUN, CMD, ENTRYPOINT, COPY 和ADD工作目录,如果WORKDIR不存在,它将被创建,即使它没有在任何后续的Dockerfile指令中使用。 ARG docker build时候的参数,如果命令中带有将不会被使用 ARG <name>[=<default value>] 1 FROM busybox 2 USER ${user:-some_user} 3 ARG user 4 USER $user … 构建docker时就可以传入参数 $ docker build --build-arg user=what_user Dockerfile 使用此Dockerfile示例,CONT_IMG_VER仍然保留在映像中,但其值为v1.0.0,因为它是ENV指令在第3行中的默认设置。 此示例中的变量扩展技术允许您从命令行传递参数,并通过利用ENV指令将它们持久保存在最终映像中。 仅对一组有限的Dockerfile指令支持变量扩展。 Docker有一组预定义的ARG变量,您可以在Dockerfile中使用相应的ARG指令。通过这个参数调用下面的变量 --build-arg <varname>=<value> HTTP_PROXY http_proxy HTTPS_PROXY https_proxy FTP_PROXY ftp_proxy NO_PROXY no_proxy ONBUILD ONBUILD指令在镜像被用作另一个镜像的构建基础时,会触发执行的指令。 触发器将在下游构建的上下文中执行,就好像它已经在下游Dockerfile中的FROM指令之后立即插入指令。 任何构建指令都可以注册为触发器。 如果您正在构建将用作构建其他映像的基础的图像,例如应用程序构建环境或可以使用用户特定配置自定义的后台驻留程序,这将非常有用。 详解: 当build镜像时遇到ONBUILD时候它将插入一个触发器到镜像的metadata,他不会影响当前的构建 在构建结束时,所有触发器的列表存储在镜像的OnBuild清单中的key下。 可以使用docker inspect命令检查它们。 当build执行的时候第一个执行的是FROM 引用一个基础镜像引用后这一步并不会结束他会检查并执行触发器,如果触发器全部执行完成FROM才能算成功,否则只要一个触发器失败FROM就算失败 触发器在执行完成后会被清楚,也就是在新建的镜像中是不会集成这个触发器的 使用ONBUILD ONBUILD是不允许的,也就是不能自己触发自己,同样也不可以触发FROM和MAINTAINER [...] ONBUILD ADD . /app/src ONBUILD RUN /usr/local/bin/python-build --dir /app/src [...] STOPSIGNAL 给系统发送退出信号(终止信号),该信号可以是与内核系统调用 “9”相似,或者是格式为SIGNAME的信号名称,例如SIGKILL。 STOPSIGNAL signal HEALTHCHECK HEALTHCHECK指令是在Docker 1.12版本加入,此指令有两种格式: HEALTHCHECK [OPTIONS] CMD command #在容器内运行一个命令检测容器健康 HEALTHCHECK NONE #禁止从基础镜像集成任何健康检测 描述 HEALTHCHECK 指令告诉docker如何去检测容器仍然在工作,例如你的web容器因为一个无限循环卡住无法创建新的连接它可以告诉容器不再健康,即使现在进程依然在运行。 容器的初始状态是‘starting’,如果健康检测容器正常他的状态会是'healthy'状态码为“0”, 如果健康检测出现连续失败会出现'unhealthy' 状态码为“1”,如果因为非健康执行退出则为“reserved”状态码为“2”。 参数介绍: 可以出现在CMD的参数: --interval=DURATION #默认间隔30s --timeout=DURATION #默认超时时间30s --retries=N #默认重试3次 HEALTHCHECK --interval=5m --timeout=3s \CMD curl -f http://localhost/|| exit 1 上面三个参数连贯起来就是,健康检测默认间隔5分钟运行一次,如果超过3秒则认为超时,如果尝试三次一直失败则认为容器不再健康执行"exit 1"。 假如说在Dockerfile里面多次出现这个参数,将会采用最后一个HEALTHCHECK 指令,这个是和CMD指令一样的。 如果你想获取容器现在的状态可以使用“docker inspect [CONTAINER ID ]”获取当前容器的health_status 下面是一些我写的其它帮助文档: 0.docker安装 阿里云加速你的docker 运行你第一个镜像实例-docker容器 docker命令参数 docker仓库使用和镜像提交 docker镜像构建构建及参数详解 docker镜像的导入导出 docker的网络 docker网络的测试示例 docker数据卷 docker的api和python sdk 单机多容器的编排-compose docker-swarm集群的管理-swarm docker-swarm集群管理详解 docker-swarm集群中删除节点和服务 docker自建仓库Registry 使用技巧和推荐 docker集群web页面管理工具 不要再给你的docker安装ssh server compose快速创建zookeeper集群

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册