linux 用户,组

权限:

  • 所谓的权限是,由用户启动的进程,或者由操作系统启动的进程,可以访问哪些文件,不可以访问哪些文件。
  • 进程太多了,不可能为每个进程定义权限对吧,所以进程的权限来自于启动进程的用户。
  • 用户有哪些权限,则由此用户启动的进程就有哪些权限。
  • 操作系统启动后,会启动很多后台进程(daemon进程),这些进程有的是由管理员(root)身份启动的,有的是由一般用户身份启动的。
  • 有一种需求:不想以root身份启动进程,若由root启动的进程被黑客劫持,则黑客就拥有了root权限。
  • 有一种需求:不想以root身份启动进程,那么就创建一个普通用户,这个普通用户的作用只是启动进程而已,不使用她手动登录系统。这种普通用户就叫【系统用户】。手动登录系统的普通用户就叫【登录用户】

linux使用uid管理用户;使用gid管理组。uid和gid是16bits的二进制数字,取值范围从0-65535

一,用户

用户分类:

  • 管理员(uid:0)

  • 普通用户(uid:1-65535)

    • 系统用户:1-499(CentOS6);1-999(CentOS7)
    • 登录用户:500-60000(CentOS6);1000-60000(CentOS7)
  • 用户名解析文件:/etc/passwd。使用man 5 passwd查看,各个项目的意义。

    name:password:UID:GID:GECOS:directory:shell

    • name:用户名
    • password:密码,或者占位符。如果是【x】,则密码在/etc/shadow中。
    • UID
    • GID:用户所属的主组的ID号。
    • GECOS:用户的额外信息,比如全名。是可选的
    • directory:用户的家目录
    • shell:用户使用的shell种类
    $ cat /etc/passwdroot:x:0:0:root:/root:/bin/bashys:x:1000:1000:ys:/home/ys:/bin/bash

用户相关命令:useradduserdelusermodpasswd

  • 添加用户:useradd

    • 语法1:创建用户。

      useradd [options] LOGIN

      例子1:不指定选项,直接创建用户。

      创建了用户a1,而且创建了一个私有组a1

      # useradd a1# tail -1 /etc/passwda1:x:1001:1001::/home/a1:/bin/bash# tail -1 /etc/groupa1:x:1001:
    • -u:指定UID.

      指定了UID,创建了用户a2,而且创建了一个私有组a2

      # useradd -u 3000 a2# tail -1 /etc/passwda2:x:3000:3001::/home/a2:/bin/bash# tail -1 /etc/groupa2:x:3001:
    • -g:指定用户的主组,这个组必须事先存在,不存在会报错。

      指定主组zg4,创建用户a3,没有自动创建了一个私有组a3,因为已经指定了主组zg4.

      # useradd -g cloud a3useradd: group 'cloud' does not exist# tail -1 /etc/groupzg4:x:300:# useradd -g zg4 a3# tail -1 /etc/passwda3:x:3001:300::/home/a3:/bin/bash
    • -G:-G, --groups GROUP1[,GROUP2,...[,GROUPN]]] 指定用户的附加组,可以多个,用逗号分隔。

      创建a5前,组zg4,zg5,a2的附加组列表是空的。使用-G并指定zg4,zg5,a2,创建用户a5后,组zg4,zg5,a2的附加组列表里就多了用户a5.而且创建了一个私有组a5.

      # tail /etc/groupzg4:x:300:zg5:x:3000:a1:x:1001:a2:x:3001:# useradd -G zg4,zg5,a2 a5# tail /etc/groupzg4:x:300:a5zg5:x:3000:a5a1:x:1001:a2:x:3001:a5
    • -d:指定用户的家目录,如果不指定则默认在/home下创建同名目录。

      如果指定的家目录不存在,则系统复制/etc/skel/下的所有文件,到家目录下。

      如果出现错误:useradd: cannot set SELinux context for home directory

      使用setenforce 0即可,但只在当前会话有效。若要永久有效,则编辑/etc/sysconfig/selinux

      SELINUX=disabled 即可。

      # ls -a /etc/skel/.  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla# useradd -d /tmp/aa aauseradd: cannot set SELinux context for home directory /tmp/aa

      如果指定的家目录存在,则系统不复制/etc/skel/下的文件,到家目录下,并提示家目录已经存在。所以最好指定不存在的目录。

      # ls -a /etc/skel/.  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla# mkdir /tmp/abcd# userdel abcd# useradd -d /tmp/abcd abcduseradd: warning: the home directory already exists.Not copying any file from skel directory into it# ls -a /tmp/abcd.  ..
    • -c:指定用户的额外信息(GECOS)

      指定了GECOS,创建了用户a4,而且创建了一个私有组a4

      # useradd -c yyass a4# tail -1 /etc/passwda4:x:3002:3002:yyass:/home/a4:/bin/bash# tail -1 /etc/groupa4:x:3002:
    • -s:指定用户使用哪种shell。可以选择的shell记录在/etc/shells中。不在这个列表里的shell也可以选,但是不太安全。

      # cat /etc/shells/bin/sh/bin/bash/usr/bin/sh/usr/bin/bash/bin/tcsh/bin/csh
    • -r:创建系统用户。

      创建了用户fff,而且创建了一个私有组fff。注意:由于创建的是系统用户,所以UID和GID都小于1000。

      # useradd -r fff# tail -1 /etc/passwdfff:x:986:299::/home/fff:/bin/bash# tail -1 /etc/groupfff:x:299:
    • -m:如果用户的家目录不存在,创建家目录。这个选项没太搞懂

      # useradd -m bbb[root@localhost ~]# ls /home/bbb/[root@localhost ~]# ls -a /home/bbb/.  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla
    • -M:不创建用户的家目录。

      # useradd -M bb# ls /home/bbls: cannot access /home/bb: No such file or directory
    • -f:指定下面介绍的【password inactivity period(⑤)】。如果是0,则过期后马上不能登录系统;如果是-1,即使过期后,只要修改了密码,还是可以登录系统的。

    • 语法2:在标准输出显示创建用户时,所使用的默认值。更多的默认值,存放在/etc/login.defs里。

      useradd -D

      # useradd -DGROUP=100HOME=/homeINACTIVE=-1EXPIRE=SHELL=/bin/bashSKEL=/etc/skelCREATE_MAIL_SPOOL=yes
      • GROUP:?

      • HOME:家目录

      • INACTIVE:指定下面介绍的【password inactivity period(⑤)】。如果是0,则过期后马上不能登录系统;如果是-1,即使过期后,只要修改了密码,还是可以登录系统的。

      • EXPIRE:指定下面介绍的【account expiration date(⑥)】。如果是empty,代表永不过期。

      • SHELL:shell的种类

      • SKEL:指定从哪个目录下复制下面这些文件,到家目录。

        .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla
      • CREATE_MAIL_SPOOL:是否创建信箱。yes是创建。创建的信箱放到目录/var/spool/mail/里。

    • 语法3:修改创建用户时,所使用的默认值。修改后的结果保存在文件/etc/default/useradd中

      useradd -D [options]

      • -b:修改HOME
      • -e:修改EXPIRE
      • -f:修改INACTIVE
      • -g:修改GROUP
      • -s:修改SHELL
      # useradd -D -s /bin/csh# useradd -DSHELL=/bin/csh# cat /etc/default/useraddSHELL=/bin/csh# useradd nn# tail -1 /etc/passwdnn:x:3010:3010::/home/nn:/bin/csh
  • 修改用户:usermod.

    经常使用的给用户增加附加组。联合使用-a和-g。

    • 语法:usermod [options] LOGIN_NAME

    • -u:修改用户的uid为此处的值。

      # tail /etc/passwdbn:x:3011:3011::/home/bn:/bin/csh# usermod -u 4000 bn# tail -1 /etc/passwdbn:x:4000:3011::/home/bn:/bin/csh
    • -g:修改用户的主组为此处的值。注意点和useradd一样。

      # tail -1 /etc/passwdbn:x:4000:3011::/home/bn:/bin/csh# tail /etc/groupa5:x:3003:# usermod -g a5 bn# tail -1 /etc/passwdbn:x:4000:3003::/home/bn:/bin/csh
    • -G:修改用户附加组。会覆盖用户原来有的附加组。不想被覆盖就和-a一起使用。

      # tail -20 /etc/groupzg4:x:300:a5zg5:x:3000:a5a1:x:1001:a2:x:3001:a5a4:x:3002:# usermod -G a1,a4 a5# tail -20 /etc/groupzg4:x:300:zg5:x:3000:a1:x:1001:a5a2:x:3001:a4:x:3002:a5

      原来用户a5的附加组是zg4,zg5,a2,执行命令后,附加组没覆盖了。

    • -a:和-G一起使用,给用户添加附加组。

      # tail -20 /etc/groupa1:x:1001:a5a4:x:3002:a5aa:x:3005:fff:x:299:# usermod -a -G aa,fff a5# tail -20 /etc/groupa1:x:1001:a5a4:x:3002:a5aa:x:3005:a5fff:x:299:a5

      没有被覆盖,是追加。

    • -c:修改用户的额外信息为此处的值。

      # tail -1 /etc/passwdbn:x:4000:3003::/home/bn:/bin/csh# usermod -c hello bn# tail -1 /etc/passwdbn:x:4000:3003:hello:/home/bn:/bin/csh
    • -d:修改用户的家目录为此处的值。原来家目录里的文件,还是放在原来那里,想把家目录里的文件也剪切到新的家目录里的话,就和-m一次使用。

      # usermod -m -d /home/nn2 nn# ls -a /home/nn2/.  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla# ls -a /home/nn/ls: cannot access /home/nn/: No such file or directory# tail -2 /etc/passwdnn:x:3010:3010::/home/nn2:/bin/csh

      /home/nn目录下的文件都被剪切到了/home/nn2目录下了,并且/home/nn目录都被自动删除了。

    • -m:只能和-d一起使用。把旧家目录里的所有文件,复制到新的家目录。

    • -l:修改用户名为此处的值。

      # usermod -l newnn nn# tail -2 /etc/passwdbn:x:4000:3003:hello:/home/bn2:/bin/cshnewnn:x:3010:3010::/home/nn2:/bin/csh
    • -s:修改用户的shell种类。

      # tail -2 /etc/passwdnewnn:x:3010:3010::/home/nn2:/bin/csh# usermod -s /bin/bash newnn# tail -2 /etc/passwdnewnn:x:3010:3010::/home/nn2:/bin/bash
    • -L:锁定用户密码。即在用户密码前加一个!。

      # usermod -L newnn# tail -2 /etc/shadownewnn:!1:18247:0:99999:7:::# usermod -U newnn# tail -2 /etc/shadownewnn:1:18247:0:99999:7:::
    • -U:解锁用户密码。去掉!。

  • 删除用户:userdel [options] LOGIN

    • -r:删除用户的同时,也删除用户的家目录。不指定此选项则保留用户的家目录。

二,组分类:

  • 组分类1

    • 管理员组(gid:0)

    • 普通用户组(gid:1-65535)

      • 系统用户组:1-499(CentOS6);1-999(CentOS7)
      • 登录用户组:500-60000(CentOS6);1000-60000(CentOS7)
    • 组名解析文件:/etc/group

      group_name:password:GID:user_list

      • group_name:组名
      • password:密码,或者占位符。如果是【x】,则密码在/etc/shadow中。
      • GID:
      • user_list:以此组为附加组的用户成员列表。
  • 组分类2:站在用户角度分。一个用户可以在多个组里,哪个组是用户的主要组,这个组就叫用户的主组。

    • 用户的主组

    • 用户的附加组

    • 可以使用id命令查看用户的主组是什么,附加组是什么

      $ whoamiza1$ iduid=1001(za1) gid=1001(za1) groups=1001(za1),1002(zg1)

      gid:用户的主组。

      主组的作用:当创建文件后,此文件的所属组,是这个用户的主组。

      groups:用户所属的组的集合,所以用户的主组和附加组都在这个集合里。

      用户自己可以从自己所属的组里,挑出一个组,作为自己的主组,所以用户的主组是可以随时改变的。使用newgrp命令,切换用户的主组。切换成功后,还可以使用exit命令退出来,主组还会变成切换前的。

  • 组分类3:站在用户角度分

    • 私有组:组名同用户名,且组里只有自己一个用户
    • 公共组:组内包含了多个用户

单项加密算法:

  • md5:对应的命令md5sum

    # echo 11 | md5sum166d77ac1b46a1ec38aa35ab7e628ab5  -
  • sha1:对应的命令sha1sum

    # echo 11 | sha1sumdd71038f3463f511ee7403dbcbc87195302d891c  -
  • sha224:对应的命令sha224sum

  • sha256:对应的命令sha256sum

  • sha384:对应的命令sha384sum

  • sha512:对应的命令sha512sum

Linux 是如何把密码加密的呢?

如果2个用户的密码恰巧一样,而且这2个用户都可以查看/etc/shadow文件,如果加密后的串也相同的话,那么就能知道另一个用户的密码了。为了避免这种情况,linux在执行加密前,会加一些salt(随机数)在密码里,这样就避免了上面情况的发生,而且随机数也是放到了/etc/shadow文件里。

密码存放到哪里了?密码是单向加密的,就意味着基本无法反向解密。

  • 用户的密码存放在:/etc/shadow。可以使用man 5 shadow查看下面各个项目的意义。

    login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field

    • login name:用户名

    • encrypted password:加密后的密码

      • 第一个$$间的数字:代表使用的是哪个加密算法

        1:md5;2:sha1;3:sha224;4:sha256;5:sha384;6:sha512

      • 第二个$$间的串:加的salt(随机数)。

      • 第三个$$间的串:加密后,生成的串。

    • date of last password change(①):最近一次修改秘密的时间到1970年1月1号的天数。

      • 0:用于下次登录时,必须修改密码:
      • empty:密码不用修改,且没有期限。可以一直使用。
    • minimum password age(②):过了多少天后,才可以修改密码。

      • 0或者empty:不使用minimum password age
    • maximum password age(③):过了多少天后,必须要修改密码。

      • empty:不使用maximum password age, 不使用password warning period, 不使用password inactivity period
      • 小于minimum password age:用户不可以修改密码
    • password warning period(④):修改密码的截至日期前多少天开始提醒用户,要修改密码了,但是在这个提醒期间内,不修改也是可以登录系统的。

      • 0或者empty:不使用此字段
    • password inactivity period(⑤):超过了密码修改的截止期,多少天内,还可以修改密码,不修改密码就无法登录系统。

      • empty:不使用此字段。
    • account expiration date(⑥):从1970年1月1号开始,经过多少天后,账户就无法使用。

      • empty:永远不会过期。
    • reserved field:保留字段,目前未使用。

    • 用下图来说明上面的日期,下图的圈里的数字对应上面的数字。

      • 黑色⇔段:不可以修改密码
      • 蓝色⇔段:可以修改密码
      • 紫色⇔段:提醒修改密码,但不修改也可以登录系统
      • 绿色⇔段:提醒修改密码,不修改不可以登录系统
      • 红色⇔段:如果修改了密码,则可以继续登录系统;如果没有修改密码,则无法登录系统
      • 橙色⇔段:不可以登录系统。
    # cat /etc/shadowroot:$6$n0lH0mnbr28Igon0$KhYX3C0MjrBCP4qf7A6J4jwdP.eviqIhKGPlE4Uy4jaqkL.SzKvN39v860ckYHojGp0d260moqFPU2ugqdO8U.::0:99999:7:::ys:$6$XjEoNab85Vhf0ajr$kEqHY3ZiJm7nWG.fDY0mzEvdm8L2Yc4d0FEYYh8aufBrYhiDfgQqdzljNbJnK0NIK3v9gy/iM/cqMUnbhS0D71::0:99999:7:::
  • 组的密码存放在:/etc/gshadow

组相关命令:groupaddgroupdelgroupmodgpasswd

  • 添加组:groupadd 默认创建登录用户组。

    • -g:手动指定gid。不指定的话,则由当前最大的gid加1.
    • -r:创建系统用户组
    # groupadd zg1# tail -1 /etc/groupzg1:x:1001:# groupadd -g 1005 zg2# tail -2 /etc/groupzg1:x:1001:zg2:x:1005:# groupadd -r zg3# tail -2 /etc/groupzg2:x:1005:zg3:x:979:# groupadd -r -g 300 zg4# tail -2 /etc/groupzg3:x:979:zg4:x:300:
  • 修改组:groupmod

    • -g:修改GID
    • -n:修改组名(groupmod -n new old)。修改后,里面组员的所属组的名字也变了。
  • 删除组:groupdel。删除后里面的组员就没有所属组了。

    groupdel group_name

三,管理用户(设置用户密码,修改用户密码的各种时间属性)

  • 语法:

    passwd [-k][-l] [-u [-f]][-d] [-e][-n mindays] [-x maxdays] [-w warndays] [-i inactivedays][-S] [--stdin][username]

  • 修改自己的密码:不指定任何选项 passwd

  • 管理员修改用户密码:passwd user

  • 让用户无法登录:-l

    # passwd -l za1Locking password for user za1.passwd: Success
  • 解锁用户:-u

    # passwd -u za1Unlocking password for user za1.passwd: Warning: unlocked password would be empty.passwd: Unsafe operation (use -f to force)# passwd -fu za1Unlocking password for user za1.passwd: Success
  • 删除用户的密码:-d

    删除后,用户登录系统时,不需要输入密码。

  • 强迫用户下次登录必须修改密码:-e

    把【date of last password change(①)】修改成了0,也就是下次登录系统时,必须修改密码。

    -e后面不能输入数字。

    # tail -1 /etc/shadowza1::18247:10:60:7:::# passwd -e za1Expiring password for user za1.passwd: Success# tail -1 /etc/shadowza1::0:10:60:7:::
  • 修改用户密码的【minimum password age(②)】:-n

    # tail -1 /etc/shadowza1::18247:0:99999:7:::# passwd -n 10 za1Adjusting aging data for user za1.passwd: Success# tail -1 /etc/shadowza1::18247:10:99999:7:::
  • 修改用户密码的【maximum password age(③)】:-x

    # tail -1 /etc/shadowza1::18247:10:99999:7:::# passwd -x 60 za1Adjusting aging data for user za1.passwd: Success# tail -1 /etc/shadowza1::18247:10:60:7:::
  • 修改用户密码的【password warning period(④)】:-w

    # tail -1 /etc/shadowza1::0:10:60:7:::# passwd -w 5 za1Adjusting aging data for user za1.passwd: Success# tail -1 /etc/shadowza1::0:10:60:5:::
  • 修改用户密码的【password inactivity period】:-i

    # tail -1 /etc/shadowza1::0:10:60:5:::# passwd -i 8 za1Adjusting aging data for user za1.passwd: Success# tail -1 /etc/shadowza1::0:10:60:5:8::
  • 重定向修改密码,在shell脚本编程里使用:--stdin

    # tail -1 /etc/shadowza1::0:10:60:5:8::# echo "1" | passwd --stdin za1 &> /dev/null# echo $?0# tail -1 /etc/shadowza1:$6$LiKVjDZv$7AGTfLBLiqd48.YC0VglXmCyHfJ5mcCBRtFAtexfEljcjmNWjKdoPQSxFdiFoDyj5BdDBkTdFrR3cPTuSA5F50:18247:10:60:5:8::
  • 备胎命令chage - change user password expiry information,和passwd差不多。

四,管理组(设置组密码;添加用户到组;从组删除用户)

  • gpasswd

    • 语法:gpasswd [option] group

    • 修改组的密码:不使用选项

      # gpasswd zg1Changing the password for group zg1New Password:Re-enter new password:# tail -1 /etc/gshadowzg1:$6$P1Ks//MQ.8$48kY7GOxXxlegd14K3ssR038lt7O6XVnPP1b7emXk8S0r5y4FRHGR9OJDRTQiClH0qvFaikNBmRDYY5IBwDEO0::za1

      为什么要给组设置密码?防止用户随意使用newgrp命令切换自己的主组。

      假设用户要用newgrp把自己的主组切换成zg1,如果此用户的附加组里有zg1,则不需要输入组zg1的密码;如果此用户的附加组里没有zg1,则需要输入组zg1的密码。

      下面的例子,用户za2的所属组里没有zg1,所以切换到zg1时,必须输入zg1的密码。然后创建文件t2,文件t2的所属组就变成了zg1.使用exit退出后,za2的主组又变回了za2.

      # tail -1 /etc/passwdza2:x:1002:1003::/home/za2:/bin/bash# su za2$ iduid=1002(za2) gid=1003(za2) groups=1003(za2)$ touch t1$ lltotal 0-rw-rw-r--. 1 za2 za2 0 Dec 17 14:30 t1$ newgrp zg1Password:$ iduid=1002(za2) gid=1002(zg1) groups=1002(zg1),1003(za2)$ touch t2$ lltotal 0-rw-rw-r--. 1 za2 za2 0 Dec 17 14:30 t1-rw-r--r--. 1 za2 zg1 0 Dec 17 14:31 t2$ exitexit$ whoamiza2$ iduid=1002(za2) gid=1003(za2) groups=1003(za2)

      下面的例子,用户za1的所属组里有zg1,所以把自己的主组切换到zg1时,不需要输入密码。

      $ whoamiza1$ iduid=1001(za1) gid=1001(za1) groups=1001(za1),1002(zg1) $ newgrp zg1$ iduid=1001(za1) gid=1002(zg1) groups=1002(zg1),1001(za1)
      • 临时切换用户的主组:newgrp - group

        加上横线:模拟用户重新登录系统,以事先重新初始化工作环境。

    • 向组里添加用户:-a username

      # tail -2 /etc/groupzg1:x:1002:za1# gpasswd -a za2 zg1Adding user za2 to group zg1# tail -2 /etc/groupzg1:x:1002:za1,za2
    • 从组里删除用户:-d username

      # tail -2 /etc/groupzg1:x:1002:za1,za2# gpasswd -d za2 zg1Removing user za2 from group zg1# tail -2 /etc/groupzg1:x:1002:za1

五,显示用户属于哪些组id

  • 语法:id [OPTION]... [USER]

    不输入USER就显示当前用户属于哪些组

    • 只显示UID:-u
    • 只显示GID:-g
    • 只显示用户属于的所有组:-G
    • 显示名字而非id,配合-u,-g,-G使用:-n

六,切换用户su

  • 登录式切换:模拟用户登录,初始化目标用户的工作环境,比如直接进入目标用户的家目录。

    • su - username
    • su -l username
  • 非登录式切换:模拟用户登录,所以导致没有初始化目标用户的工作环境,所以就不能直接进入到目标用户的家目录。

    • su usernme
  • 管理员可以无密码切换到其他用户。

  • 最好使用登录式切换。

  • 切换用户后只是执行一个命令,然后再切换回来:su - username -c command

    # whoamiroot[root@localhost ~]# su - ys -c "ls -lrt"total 0drwxr-xr-x. 2 ys ys  6 Nov 29 17:08 Downloads# whoamiroot

七,一些不重要的管理员命令

  • finger和chfn

    finger username:查看user的真名,手机,办公室等信息。

    chfn username:修改user的真名,手机,办公室等信息。

    # finger za1Login: za1                              Name:Directory: /home/za1                    Shell: /bin/bashLast login Tue Dec 17 15:23 (CST) on pts/1No mail.No Plan.# chfn za1Changing finger information for za1.Name []: abcOffice []: offOffice Phone []: 132Home Phone []: 234Finger information changed.# finger za1Login: za1                              Name: abcDirectory: /home/za1                    Shell: /bin/bashOffice: off, 132                        Home Phone: 234Last login Tue Dec 17 15:23 (CST) on pts/1No mail.No Plan.
  • 修改用户的shell种类chsh -s shell username

    # chsh -s /bin/csh za1Changing shell for za1.Shell changed.
  • 检查用户密码是否健康:pwck

  • 检查组密码是否健康:grpck

八,sudo简介

sudo简介

背景:root用户是有所有权限的,所有使用root用户登录,去操作时,难免会发生意外,删除了重要的文件,为了避免,一般不使用root用户登录,而是使用一般用户,但是一般用户又没有权限使用root用户的命令,所以有了sudo机制。

目的:让普通用户可以执行某些管理员才可以执行的命令,但不是全部。

配置文件:/etc/sudoers

用户名A      主机列表A=(用户列表A)       命令列表A
  • 用户名A:允许用户A
  • 主机列表A:从哪些ip地址
  • 用户列表A:以哪些用户的身份
  • 命令列表A:允许哪些命令

下面的root用户的设置:

允许root用户,从任何主机,以任何用户的身份,运行任何命令。

root    ALL=(ALL)       ALL

例子:允许userA用户,从192.168.55.2主机,以root用户的身份,运行/sbin/useradd, /sbin/userdel命令。

userA    192.168.55.2=(root)       /sbin/useradd, /sbin/userdel

例子:允许userB用户,从任何主机,以任何用户的身份,运行任何命令。

userB基本和root差不多了。

userB    ALL=(ALL)       ALL

使用方法:

$ sudo COMMAND

注意事项:

使用sudo command后,会提示输入当前用户的密码。为了下次sudo不再让用户输入密码,密码保留5分钟。5分钟后,再sudo command,还是提示输入当前用户的密码。

常用选项:

-k:强制下次sudo输入密码,即使在5分钟内

-l:显示当前用户可以执行哪些管理员的命令

[aa@localhost ~]$ sudo -l[sudo] password for aa:Matching Defaults entries for aa on localhost:    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/binUser aa may run the following commands on localhost:    (ALL) /sbin/useradd

九,练习

1,新建系统组mysql,新建系统用户mysql,属于mysql组,没有家目录,且shell为/sbin/nologin,尝试切换至用户,查看其命令提示符。

# groupadd -r mysql# tail -1 /etc/groupmysql:x:979:# useradd -g mysql -M -s /sbin/nologin mysql# tail -1 /etc/passwdmysql:x:1003:979::/home/mysql:/sbin/nologin# id mysqluid=1003(mysql) gid=979(mysql) groups=979(mysql)# su - mysqlsu: warning: cannot change directory to /home/mysql: No such file or directoryThis account is currently not available.# su mysqlThis account is currently not available.

2,新建gid为5000的组mageedu,新建用户gentoo,要求其家目录为/tmp/gentoo,密码同用户名。

# groupadd -g 5000 mageedu# tail -1 /etc/groupmageedu:x:5000:# useradd -d /tmp/gentoo gentoo# tail -1 /etc/passwdgentoo:x:1004:1004::/tmp/gentoo:/bin/bash# passwd gentooChanging password for user gentoo.New password:BAD PASSWORD: The password is shorter than 8 charactersRetype new password:passwd: all authentication tokens updated successfully.# tail -1 /etc/shadowgentoo:$6$HuCz01P5$65qUu5ONTZPKkhHWQJbnTR6jtJDeL3KqY.3mgO2BDpqNoSMlaWasoMSYhBhe6i6EBOstgLRAdNChOErp0PUe0/:18248:0:99999:7:::# ls -a /tmp/gentoo/.  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla

3,新建用户fedora,其家目录/tmp/fedora,密码同用户

# useradd -d /tmp/fedora fedora# tail -1 /etc/passwdfedora:x:1005:1005::/tmp/fedora:/bin/bash# ls -a /tmp/fedora/.  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla# passwd fedoraChanging password for user fedora.New password:BAD PASSWORD: The password is shorter than 8 charactersRetype new password:passwd: all authentication tokens updated successfully.# tail -1 /etc/shadowfedora:$6$32gvhWr5$xMk9xO.QUNEC9h7G71DWsD44Bng8TqqcxagzfD4lj6VrcHLFsA6OQppvDTHwHnO2ANfkNtByW4oGFMqmpMo0M1:18248:0:99999:7:::

4,新建用户www,家目录/tmp/www;删除用户www,但保留其家目录。

# useradd -d /tmp/www www# tail -1 /etc/passwdwww:x:1006:1006::/tmp/www:/bin/bash# ls -a /tmp/www.  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla# userdel www# ls -a /tmp/www.  ..  .bash_logout  .bash_profile  .bashrc  .emacs  .mozilla# id wwwid: www: no such user

5,把用户gentoo和fedora加到组mageedu里。

# gpasswd -a gentoo mageeduAdding user gentoo to group mageedu# gpasswd -a fedora mageeduAdding user fedora to group mageedu# id gentoouid=1004(gentoo) gid=1004(gentoo) groups=1004(gentoo),5000(mageedu)# id fedorauid=1005(fedora) gid=1005(fedora) groups=1005(fedora),5000(mageedu)

6,复制目录/var/log到/tmp目录,修改/tmp/log及其内部的所有文件及子目录的属组为mageedu,并让属组有写权限。

# cp -r /var/log/ /tmp/# ll -d /tmp/log/drwxr-xr-x. 21 root root 4096 Dec 18 10:44 /tmp/log/# ll /tmp/log/drwxr-xr-x. 2 root root      176 Dec 18 10:44 anacondadrwx------. 2 root root       80 Dec 18 10:44 audit-rw-------. 1 root root        0 Dec 18 10:44 boot.log-rw-------. 1 root root    48266 Dec 18 10:44 boot.log-20191211# chown -R :mageedu /tmp/log/# ll -d /tmp/logdrwxr-xr-x. 21 root mageedu 4096 Dec 18 10:44 /tmp/log# ll /tmp/logdrwxr-xr-x. 2 root mageedu      176 Dec 18 10:44 anacondadrwx------. 2 root mageedu       80 Dec 18 10:44 audit-rw-------. 1 root mageedu        0 Dec 18 10:44 boot.log-rw-------. 1 root mageedu    48266 Dec 18 10:44 boot.log-20191211# chmod -R g+w /tmp/log/# ll -d /tmp/logdrwxrwxr-x. 21 root mageedu 4096 Dec 18 10:44 /tmp/log# ll /tmp/logdrwxrwxr-x. 2 root mageedu      176 Dec 18 10:44 anacondadrwx-w----. 2 root mageedu       80 Dec 18 10:44 audit-rw--w----. 1 root mageedu        0 Dec 18 10:44 boot.log-rw--w----. 1 root mageedu    48266 Dec 18 10:44 boot.log-20191211

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

(0)

相关推荐

  • 用户的管理

    用户组及配置文件 用户的类型 Linux是一个多用户.多任务的操作系统,如果要使用系统资源,就必须向系统管理员申请一个用户,通过这个用户进入系统,通过建立不同属性的用户实现 不同的作用或权限,可以合理 ...

  • Linux的秘密就在这18张图里面了~

    来自公众号:我是程序员小贱 1 Linux安全策略 在生产环境几乎都是Linux,为了保护我们程序,防止我们功能被破坏,会采取一些列的措施,所以提前学习和了解这些策略势必也会为后面的学习打下不错的基础 ...

  • 查看centos中的用户和用户组

    3.查看系统中有哪些用户: cut -d : -f 1 /etc/passwd 4.查看可以登录系统的用户: cat /etc/passwd | grep -v /sbin/nologin | cut ...

  • 运维工作中,Linux用户信息查询命令有哪些

    Linux运维工作中常用的Linux命令很多,用户信息查询命令有哪些?互联网时代发展迅速,Linux运维技术的需求更多推进不少.掌握Linux运维知识是混迹it行业的技能之一.对于运维学习Linux命 ...

  • 3.1.1 linux用户管理 : 常用查询(debian和RedHat通用) : 用户查询

    3.1.1 linux用户管理 : 常用查询(debian和RedHat通用) : 用户查询

  • Linux 用户切换、修改用户名、修改密码

    一.用户切换 '$':普通用户提示符 '#':root用户提示符 1.普通用户到root: 方式一:命令:su然后输入root密码 此种方式只是切换了root身份,但Shell环境仍是普通用户的She ...

  • 如何在Linux用户态开发驱动

    如何在Linux用户态开发驱动 用户态的驱动应用场景主要是以下几种,如果有其他的,希望各位朋友拍砖 1.功能基本集中在芯片,驱动主要做控制芯片用途的 2.加速器,功能独立,无需内核调度的 用户态驱动最 ...

  • Linux 用户 和 用户组 管理 (添加、删除、修改)及说明

    From:http://www.cnblogs.com/xd502djj/archive/2011/11/23/2260094.html 鸟哥官网 Linux 帐号管理与 ACL 权限设定:http: ...

  • Linux用户切换命令的使用——su、sudo

    一. su su用于用户之间的切换,但是切换前的用户依然保持登录状态.如果是root向普通切换则不需要密码,反之普通用户切换到其它任何用户则都需要密码验证. su不加任何参数默认切换到root用户,但 ...

  • Linux 用户和用户组管理 | 菜鸟教程

    Linux 用户和用户组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 用户的账号一方面可以帮助 ...

  • Linux 用户和用户组管理

    Linux 用户和用户组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 用户的账号一方面可以帮助 ...

  • 第五章 linux用户与用户组管理

    博客地址:http://www.moonxy.com Linux 是一个多用户的操作系统,在日常的使用中,从安全角度考虑,应该尽量避免直接使用 root 用户登录,而使用普通用户. 1. 关于用户 u ...