美文网首页
系统基础-用户管理

系统基础-用户管理

作者: 苏近之2017 | 来源:发表于2017-06-06 16:26 被阅读0次

    Linux 是一个多用户分时系统,想要使用系统资源,就必须在系统中有合法的账号,每个账号都有一个唯一的用户名,同时必须设置密码。

    Linux 用户和用户组

    UID 和 GID

    事实上,Linux 系统采用一个 32 位的整数记录和区分不同的用户,这意味着系统可以记录多达40亿个不同的用户。这个用来区分不同用户的数字被称为 User ID ,简称 UID。系统会自动记录“用户名”和“UID” 的对应关系。

    Linux 系统中的用户分为3类,即普通用户、根用户、系统用户。

    用户登录 权限
    普通用户 只能在其家目录、系统临时目录或其他经过授权的目录中操作,以及属于该用户的文件,通常普通用户的UID大于500,从500开始编号。
    根用户 即ROOT用户,它的ID是0,也被称为超级用户,拥有对系统的完全控制权。
    系统用户 系统用户指系统运行时必须有的用户,但并不是指真的使用者。比如在RedHat 或 CentOS 下运行网站服务时,需要使用系统用户 Apache 来运行 httpd 进程,而运行 Mysql 数据库服务时,需要使用系统用户 mysql 来运行 mysql 进程。系统用户的ID范围是 1-499。

    用户组

    在Linux系统中除了有用户之外,还有“用户组”的概念,不同的用户组同样也是用数字来区分的,这种用于区分不同用户组的ID被称为Group ID ,也就是GID。

    image

    查看ID

    id
    

    查看组

    groups
    

    配置文件

    记录用户和用户的配置文件

    image

    新增用户

    useradd UserName
    

    对于系统来说,完成这个命令需要在后台执行很多行为。

    • 将用户信息记录在 /etc/passwd 中,一般会在 /etc/password 和 /etc/shadow 两个配置文件末尾追加一条记录,同时会分配给该用户一个UID。
    image
    • 接着,要为该用户自动创建家目录。家目录以创建的用户名为目录名,创建的路径在/home 目录中。
    image
    • 然后,复制 /etc/skel 下所有的文件至 /home/john 。说明一下,如果你使用ls -l /etc/skel 命令查看,可以发现这个目录下,什么也没有,但事实上,该目录下有很多隐藏文件,用户 ls -la /etc/skel 可以查看。
    image
    • 最后,新建一个与该用户名一样的用户组,也就是说创建一个用户的同时,也创建了一个与用户名相同的用户组,而用户默认属于这个用户组。

    可以说,/etc/skel 实际上是创建用户时的"模板"。

    可以在创建用户的时候指定UID和GID

    useradd -u UID UserName
    useradd -g GroupName UserName
    

    还可以使用-d参数指定该用户的家目录,而不是使用系统默认的家目录。

    useradd -d /home/DirName UserName
    

    设置密码

    passwd UserName
    
    image

    更改用户信息

    更改家目录

    usermod -d NewDir -m UserName
    

    锁定/解锁用户

    usermod -L UserName
    usermod -U UserName
    

    其实 usermod 命令就是对 /etc/passwd 和 /etc/shadow 文件做一些修改而已。明白了这个道理之后,就算不实用这个命令依然可以手工对用户进行修改操作。

    删除用户

    userdel UserName
    

    使用这个命令可以删除用户在 /etc/passwd 和 /etc/shadow 中的记录。但是从数据安全方面考虑,默认情况下,删除用户并不会删除用户的家目录和邮件信息。可以使用-r参数删除用户家目录和用户的邮件。

    一旦执行了这条命令,该用户的相关文件就会被全部删除。

    新增和删除用户组

    新增用户组

    groupadd GroupName
    

    在Linux中,使用 /etc/group 文件来记录用户组。

    image

    删除用户组

    groupdel GroupName
    

    这里需要注意的是,如果已有用户属于这个试图删除的组,该操作会失败。

    检查用户信息

    查看用户

    users       // 查看当前系统有哪些用户
    
    image

    从截图中发现有多个 ROOT 在当前机器中登录。实际上, Linux会把来自不同终端的活动定义为一个会话,从 who 命令的输出,可以看出 root 用户是通过不同的终端登录到系统中的。users 命令相对比较简单,所以列出的信息也比较少,可以使用命令 who 来看到更多的信息。

    image

    命令显示的结果有3列,第一列是登录用户的用户名,第二列是用户登录的终端,第三列是用户登录的时间。如果是通过远程网络登录,则同时会显示远程主机的主机名或IP地址。还可以使用命令 w 看到更详细的信息。

    image
    解释
    1 登录用户的用户名
    2 用户登录的终端
    3 如果用户从网络登录,则显示远程主机的主机名或IP地址
    4 用户登录的时间
    5 用户闲置的时间
    6 与终端用户的当前所有运行进程消耗的CPU时间总量
    7 当前WHAT列所对应的进程所消耗的CPU时间总量
    8 用户当前运行的进程

    调查用户

    finger
    
    image

    如果发现没有该命令,需要安装:

    yum install finger
    

    切换用户

    在使用Linux的过程中,很多时候由于实际需要可能要在不同的用户之间切换。比如原本是使用普通用户登录的,但是在操作的过程中由于权限原因必须使用 root 用户来做一些操作,这时就需要临时切换成 ROOT 用户。操作完成之后,再推出切换成普通用户。涉及到两种方法:su 和 sudo 。

    切换成其他用户

    su - UserName
    

    如果不加参数,默认切换到 root 用户。完成操作之后,使用 exit 命令可以退出root切换到用来的用户。

    su 命令后面还可以加上一个"-" 参数,就是键盘上的中横线。加上这个参数之后,切换成 root 的用户环境。所谓"用户环境"就是 /etc/passwd 中定义的家目录、使用的 Shell,以及关于这个用户的个性化设置等。

    su 命令虽然方便,但还是有明显的缺陷,就是切换成其他用户要知道其密码。如果需要切换成 root ,那就要知道 root 的密码。我们知道,root 是系统中权限最高的用户,如果让太多人知道 root 密码,必然是很不安全的。为解决这个问题,我们可以使用 sudo 命令。

    用其他用户的身份执行命令

    sudo command // 使用 root 身份执行命令
    
    image

    运行该命令的时候,系统首先检查 /etc/sudoers,判断该用户是否有执行 sudo 的权限,在确认有执行权限之后,系统要求用户输入自己的密码,如果密码输入正确,则会使用 root 用户的身份运行 passwd UserName 命令。

    使用 visudo 命令来修改 /etc/sudoers 配置文件,它可以自动检查语法。

    image

    加入 "username ALL =(ALL)ALL" 这一行代表的意思是,john 这个用户可以从任何地方登陆后执行任何人的任何命令。还可以定义某一组的 sudo 权限,比如 "%username ALL=(ALL)ALL" 可以让所有属于 john 用户组的用户从任何地方登陆后执行任何人的任何命令。

    假设用户由于工作需要,经常要重启或者关闭服务器,那么就可以进行如下设置:

    username ALL=(ALL) NOPASSWD:/sbin/shutdown,/usr/bin/reboot
    

    严格来说,sudo 并不是真的切换了用户,而是使用其他用户的身份和权限执行了命令。

    执行任务管理

    日常生活中常会有例行性的事情,比如说每周工作日的闹钟、每年一次的生日提醒等。还有一些事情是偶发性的,比如突然需要处理一封紧急的邮件等。在Linux中也有处理这两种任务的方法。**如果任务是周期性执行的,其命令为 cron;如果只是在某一个特定的时间执行一次,其命令为 at **。

    单一时刻执行一次任务

    定时关机

    image

    第一行是定义从现在开始计算,30分钟后安排一个任务;

    第二行是到了时间后执行关机操作;

    第三行是<EOT>,这不是键盘输入的,而是使用了组合键 Ctrl+D ,表示输入结束。

    第四行是系统提示有一个任务将于该时间执行。

    atq         // 查看当前使用 at 命令调度的任务列表
    
    image

    也可以使用如下命令删除已经进入任务队列的任务

    atrm id 
    
    image

    使用 at 还可以安排在具体的时间执行任务

    image

    默认情况下,所有用户都可以使用 at 命令来调度自己的任务,如果由于特殊的原因需要禁止某些用户使用这个功能,可以将该用户的用户名添加至 /etc/at.deny 中。

    image

    周期性执行任务 cron

    首先要确定crond进程在运行,如果没有运行,需要先启动该进程。

    image

    该命令的执行环境为 CentOS 7

    用户可以使用 crontab 来设置自己的计划任务,并使用-e参数来编辑任务。在这之前需要先了解一下设置的语法,但使用 crontab -e 进入编辑模式时,需要编辑执行的时间和执行的命令。

    在下面的示例中,前面5个*可以用来定义时间:

    序号 含义
    1 分钟 1-59
    2 小时 0-23
    3 日期 1-31
    4 月份 1-12
    5 星期几 0-6

    举例

    crontab -e
    
    // 以下两种写法其实是一致的,都是每分钟重启 httpd 进程。
    * * * * * systemctl restart httpd.services
    */1 * * * * systemctl restart httpd.services
    
    // 每小时重启 httpd 进程
    * 23-3/1 * * * systemctl restart httpd.services
    
    // 每天晚上23点30分重启 httpd 进程
    30 23 1 * * systemctl restart httpd.services
    

    删除所有的任务

    crontab -r
    

    禁止某用户使用该功能

    vim /etc/cron.deny
    

    root 可以使用 -u 查看指定用户的任务

    crontab -u UserName -l
    

    /etc/crontab 的管理

    用户可以通过 crontab -e 命令来编辑定义自己的任务,事实上,系统也有自己的例行任务,而其配置文件是 /etc/crontab 。

    image

    相关文章

      网友评论

          本文标题:系统基础-用户管理

          本文链接:https://www.haomeiwen.com/subject/zvxnfxtx.html