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,如需转载请自行联系原作者