linux权限:Linux 中超级权限的控制

        在Linux操作系统中root权限是最高也被称为超级权限拥有者普通用户无法执行操作root用户都能完成所以也被称的为超级管理用户 
 
         在系统中每个文件、目录和进程都归属于某个用户没有用户许可其它普通用户是无法操作但对root除外root用户特权性还表现在root可以超越任何用户和用户组来对文件或目录进行读取、修改或删除(在系统正常许可范围内);对可执行执行、终止;对硬件设备添加、创建和移除等;也可以对文件和目录进行属主和权限进行修改以适合系统管理需要(root是系统中权限最高特权用户);

、对超级用户和普通用户理解;


1、什么是超级用户:
       在所有Linux系统中系统都是通过UID来区分用户权限级别而UID为0用户被系统约定为是具有超级权限超级用户具有在系统约定最高权限满园内操作所以说超级用户可以完成系统管理所有工具;我们可以通过/etc/passwd 来查得UID为0用户是root而且只有root对应UID为0从这点来看root用户在系统中是无可替代至高地位和无限制权限root用户在系统中就是超级用户;

2、理解 UID 和用户对应关系

      当系统默认安装时系统用户和UID 是对关系也就是说个UID 对应个用户我们知道用户身份是通过UID 来确认我们在 用户(user)和用户组(group)配置文件详解UID 解说中有谈到“UID 是确认用户权限标识用户登录系统所处角色是通过UID 来实现而非用户名;把几个用户共用个UID 是危险比如我们把普通用户UID 改为0和root共用个UID 这事实上就造成了系统管理权限混乱如果我们想用root权限可以通过su或sudo来实现;切不可随意让个用户和root分享同个UID ;”

        在系统中能不能让UID 和用户是对多关系?是可以比如我们可以把个UID为0这个值分配给几个用户共同使用这就是UID 和用户对多关系但这样做确有点危险;相同UID用户具有相同身份和权限比如我们在系统中把beinan这个普通用户UID改为0后事实上这个普通用户就具有了超级权限能力和权限和root用户样;用户beinan所有操作都将被标识为root操作beinanUID为0,而UID为0用户是root 是不是有点扰口?也可以理解为UID为0用户就是root root用户UID就是0;

      UID和用户对应关系 只是要求管理员进行系统管理时所要坚守准则系统安全还是第所以我们还是把超级权限保留给root这唯用户是最好选择;

      如果我们不把UID0值分享给其它用户使用只有root用户是唯拥有UID=0root用户就是唯超级权限用户;

3、普通用户和伪装用户
 
      和超级用户相对就是普通用户和虚拟(也被称为伪装用户)普通和伪装用户都是受限用户;但为了完成特定任务普通用户和伪装用户也是必须;Linux是个多用户、多任务操作系统多用户主要体现在用户角色多样性区别用户所分配权限也区别;这也是Linux系统比Windows系统更为安全本质所在即使是现在最新版本Windows 2003 也无法抹去其单用户系统烙印;

2. 超级用户(权限)在系统管理中作用
   
       超级权限用户(UID为0用户)到底在系统管理中起什么作用呢?主要表现在以下两点;

1、对任何文件、目录或进程进行操作;
    但值得注意是这种操作是在系统最高许可范围内操作;有些操作就是具有超级权限root也无法完成;
    比如/proc 目录/proc 是用来反应系统运行实时状态信息因此即便是root也无能为力;它权限如下
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd /
[root@localhost /]# ls -ld /proc/
dr-xr-xr-x 134 root root 0 2005-10-27 /proc/
    就是这个目录只能是读和执行权限但绝对没有写权限;就是我们把/proc 目录写权限打开给rootroot用户也是不能进行写操作;
[root@localhost ~]# chmod 755 /proc
[root@localhost /]# ls -ld /proc/
drwxr-xr-x 134 root root 0 2005-10-27 /proc/
[root@localhost /]# cd /proc/
[root@localhost proc]# mkdir testdir
mkdir: 无法创建目录‘testdir’: 没有那个文件或目录

2、对于涉及系统全局系统管理;
    硬件管理、文件系统理解、用户管理以及涉及到系统全局配置等等......如果您执行某个命令或工具时提示您无权限大多是需要超级权限来完成;
    比如用adduser来添加用户这个只能用通过超级权限用户来完成;

3、超级权限不可替代性;
    由于超级权限在系统管理中不可缺少重要作用为了完成系统管理任务我们必须用到超级权限;在般情况下为了系统安全对于般常规级别应用不需要root用户来操作完成root用户只是被用来管理和维护系统的用;比如系统日志查看、清理用户添加和删除......

    在不涉及系统管理工作环境下普通用户足可以完成比如编写个文件听听音乐;用gimp 处理个图片等...... 基于普通应用大多普通用户就可以完成;

    当我们以普通权限用户登录系统时有些系统配置及系统管理必须通过超级权限用户完成比如对系统日志管理添加和删除用户而如何才能不直接以root登录却能从普通用户切换到root用户下才能进行操作系统管理需要工作这就涉及到超级权限管理问题;
 
   获取超级权限过程就是切换普通用户身份到超级用户身份过程;这个过程主要是通过su和sudo 来解决;

3、使用 su 命令临时切换用户身份:


1、su 适用条件和威力
    su命令就是切换用户工具如何理解呢?比如我们以普通用户beinan登录但要添加用户任务执行useradd beinan用户没有这个权限而这个权限恰恰由root所拥有解决办法无法有两个是退出beinan用户重新以root用户登录但这种办法并不是最好; 2是我们没有必要退出beinan用户可以用su来切换到root下进行添加用户工作等任务完成后再退出root我们可以看到当然通过su 切换是种比较好办法;
    通过su可以在用户的间切换如果超级权限用户root向普通或虚拟用户切换不需要密码什么是权力?这就是!而普通用户切换到其它任何用户都需要密码验证;

2、su 使用方法:
su [OPTION选项参数] [用户]
-, -l, --login 登录并改变到所切换用户环境;
-c, --commmand=COMMAND 执行个命令然后退出所切换到用户环境;
    至于更详细请参看man su ;

3、su 范例:
    su 在不加任何参数默认为切换到root用户但没有转到root用户家目录下也就是说这时虽然是切换为root用户了但并没有改变root登录环境;用户默认登录环境可以在/etc/passwd 中查得到包括家目录SHELL定义等;
[beinan@localhost ~]$ su
Password:
[root@localhost beinan]# pwd
/home/beinan
su 加参数 - 表示默认切换到root用户并且改变到root用户环境;
[beinan@localhost ~]$ pwd
/home/beinan
[beinan@localhost ~]$ su -
Password:
[root@localhost ~]# pwd
/root
su 参数 - 用户名
[beinan@localhost ~]$ su - root 注:这个和su - 是功能;
Password:
[root@localhost ~]# pwd
/root
[beinan@localhost ~]$ su - linuxsir 注:这是切换到 linuxsir用户
Password: 注:在这里输入密码;
[linuxsir@localhost ~]$ pwd 注:查看用户当前所处位置;
/home/linuxsir
[linuxsir@localhost ~]$ id 注:查看用户UID和GID信息主要是看是否切换过来了;
uid=505(linuxsir) gid=502(linuxsir) groups=0(root),500(beinan),502(linuxsir)
[linuxsir@localhost ~]$
[beinan@localhost ~]$ su - -c ls 注:这是su表示切换到root用户并且改变到root环境然后列出root家目录文件然后退出root用户;
Password: 注:在这里输入root密码;
anaconda-ks.cfg Desktop .log .log.syslog testgroup testgroupbeinan testgrouproot
[beinan@localhost ~]$ pwd 注:查看当前用户所处位置;
/home/beinan
[beinan@localhost ~]$ id 注:查看当前用户信息;
uid=500(beinan) gid=500(beinan) groups=500(beinan)

4、su优缺点;
        su 确为管理带来方便通过切换到root下能完成所有系统管理工具只要把root密码交给任何个普通用户他都能切换到root来完成所有系统管理工作;

        但通过su切换到root后也有不安全原因;比如系统有10个用户而且都参和管理如果这10个用户都涉及到超级权限运用做为管理员如果想让其它用户通过su来切换到超级权限root必须把root权限密码都告诉这10个用户;如果这10个用户都有root权限通过root权限可以做任何事这在定程度上就对系统安全造成了威协;想想Windows吧简直就是恶梦;

    “没有不安全系统只有不安全人”我们绝对不能保证这10个用户都能按正常操作流程来管理系统其中任何人对系统操作重大失误都可能导致系统崩溃或数据损失;
 
       所以su 工具在多人参和系统管理中并不是最好选择su只适用于两个人参和管理系统毕竟su并不能让普通用户受限使用;
    超级用户root密码应该掌握在少数用户手中这绝对是真理!所以集权而治存在还是有定道理

4、sudo 授权许可使用su也是受限制su

1. sudo 适用条件;
    由于su 对切换到超级权限用户root后权限无限制性所以su并不能担任多个管理员所管理系统如果用su 来切换到超级用户来管理系统也不能明确哪些工作是由哪个管理员进行操作特别是对于服务器管理有多人参和管理时最好是针对每个管理员技术特长和管理范围并且有针对性下放给权限并且约定其使用哪些工具来完成和其相关工作这时我们就有必要用到 sudo

    通过sudo我们能把某些超级权限有针对性下放并且不需要普通用户知道root密码所以sudo 相对于权限无限制性su来说还是比较安全所以sudo 也能被称为受限制su ;另外sudo 是需要授权许可所以也被称为授权许可su;

    sudo 执行命令流程是当前用户切换到root(或其它指定切换到用户)然后以root(或其它指定切换到用户)身份执行命令执行完成后直接退回到当前用户;而这些前提是要通过sudo配置文件/etc/sudoers来进行授权;

2、从编写 sudo 配置文件/etc/sudoers开始;
    sudo配置文件是/etc/sudoers 我们可以用他专用编辑工具visodu 此工具好处是在添加规则不太准确时保存退出时会提示给我们信息;配置好后可以用切换到您授权用户下通过sudo -l 来查看哪些命令是可以执行或禁止
    /etc/sudoers 文件中每行算个规则前面带有#号可以当作是介绍说明内容并不执行;如果规则很长行列不下时可以用\号来续行这样看来个规则也可以拥有多个行;
   /etc/sudoers 规则可分为两类;类是别名定义类是授权规则;别名定义并不是必须但授权规则是必须

    3、/etc/sudoers 配置文件中别名规则
    别名规则定义格式如下:
Alias_Type NAME = item1, item2, ...

Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
    别名类型(Alias_Type):别名类型包括如下 4种
Host_Alias 定义主机别名;
User_Alias 用户别名别名成员可以是用户用户组(前面要加%号)
Runas_Alias 用来定义runas别名这个别名指定是“目用户”即sudo 允许切换至用户;
Cmnd_Alias 定义命令别名;
    NAME 就是别名了NMAE命名是包含大写字母、下划线以及数字但必须以个大写字母开头比如SYNADM、SYN_ADM或SYNAD0是合法sYNAMDA或1SYNAD是不合法
 
        item 按中文翻译是项目在这里我们可以译成成员如果个别名下有多个成员成员和成员的间通过半角,号分隔;成员在必须是有效并事实存在什么是有效呢?比如主机名可以通过w查看用户主机名(或ip地址)如果您只是本地机操作只通过hostname 命令就能查看;用户名当然是在系统中存在在/etc/paswd中必须存在;对于定义命令别名成员也必须在系统中事实存在文件名(需要绝对路径);
 
      item成员受别名类型 Host_Alias、User_Alias、Runas_Alias、Cmnd_Alias 制约定义什么类型别名就要有什么类型成员相配我们用Host_Alias定义主机别名时成员必须是和主机相关相关联比如是主机名(包括远程登录主机名)、ip地址(单个或整段)、掩码等;当用户登录时可以通过w命令来查看登录用户主机信息;用User_Alias和Runas_Alias定义时必须要用系统用户做为成员;用Cmnd_Alias 定义执行命令别名时必须是系统存在文件文件名可以用通配符表示配置Cmnd_Alias时命令需要绝对路径;
 
      其中 Runas_Alias 和User_Alias 有点相似但和User_Alias 绝对不是同个概念Runas_Alias 定义是某个系统用户可以sudo 切换身份到Runas_Alias 下成员;我们在授权规则中以例子进行解说;
 
       别名规则是每行算个规则如果个别名规则行容不下时可以通过\来续行;同类型别名定义次也可以定义几个别名他们中间用:号分隔
   Host_Alias HT01=localhost,st05,st04,10,0,0,4,255.255.255.0,192.168.1.0/24 注:定义主机别名HT01通过=号列出成员
Host_Alias HT02=st09,st10 注:主机别名HT02有两个成员;
Host_Alias HT01=localhost,st05,st04,10,0,0,4,255.255.255.0,192.168.1.0/24:HT02=st09,st10 注:上面两条对主机定义可以通过条来实现别名的间用:号分割;

        注:我们通过Host_Alias 定义主机别名时项目可以是主机名、可以是单个ip(整段ip地址也可以)也可以是网络掩码;如果是主机名必须是多台机器网络中而且这些机器得能通过主机名相互通信访问才有效那什么才算是通过主机名相互通信或访问呢?比如 ping 主机名或通过远程访问主机名来访问在我们局域网中如果让计算机通过主机名访问通信必须设置/etc/hosts/etc/resolv.conf 还要有DNS做解析否则相互的间无法通过主机名访问;在设置主机别名时如果项目是中某个项目是主机名可以通过hostname 命令来查看本地主机主机名通过w命令查来看登录主机是来源通过来源来确认其它客户机主机名或ip地址;对于主机别名定义看上去有点复杂其实是很简单
 
       如果您不明白Host_Alias 是如何回事也可以不用设置主机别名在定义授权规则时通过ALL来匹配所有可能出现主机情况如果您把主机方面知识弄更明白确需要多多学习
User_Alias SYSAD=beinan,linuxsir,bnnnb,lanhaitun 注:定义用户别名下有 4个成员;要在系统中确实在存在
User_Alias NETAD=beinan,bnnb 注:定义用户别名NETAD 我想让这个别名下用户来管理网络所以取了NETAD别名;
User_Alias WEBMASTER=linuxsir 注:定义用户别名WEBMASTER我想用这个别名下用户来管理网站WebSite;
User_Alias SYSAD=beinan,linuxsir,bnnnb,lanhaitun:NETAD=beinan,bnnb:WEBMASTER=linuxsir 注:上面 3行别名定义可以通过这行      来实现请看前面介绍说明是不是符合?
Tags:  linux文件夹权限 linux用户权限 linux文件权限 linux权限

延伸阅读

最新评论

发表评论