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

From:http://www.cnblogs.com/xd502djj/archive/2011/11/23/2260094.html
鸟哥官 Linux 帐 管理与 ACL 权限设定:http://linux.vbird.org/linux_basic/0410accountmanager.php
鸟哥官 (简体中文):http://cn.linux.vbird.org/linux_basic/linux_basic.php
Linux 中将用户添加到组的指令:https://cnzhx.net/blog/linux-add-user-to-group/

1、Linux 单用户多任务,多用户多任务概念

Linux 是一个多用户、多任务的操作系统;单用户多任务、多用户多任务 概念;

  • Linux 的 单用户、多任务:比如:以 beinan 登录系统,进入系统后,我要打开gedit 来写文档,但在写文档的过程中,我感觉少点音乐,所以又打开xmms 来点音乐;当然听点音乐还不行,MSN 还得打开,想知道几个弟兄现在正在做什么,这样一样,我在用beinan 用户登录时,执行了gedit 、xmms以及msn等,当然还有输入法fcitx ;这样说来就有点简单了,一个beinan用户,为了完成工作,执行了几个任务;
  • Linux 的 多用户、多任务:上面除了 beinan 这个用户,可能还有其它的用户远程登录过来,也能做其它的工作。这就是多用户,很多用户同时用同一个系统,但并不所有的用户都一定都要做同一件事,所以这就有多用户多任务之说;比如:在服务器上面有 FTP 用户、系统管理员、web 用户、常规普通用户等,在同一时刻,可能有的弟兄正在访问论坛;有的可能在上传软件包管理子站,比如luma 或Yuking 兄在管理他们的主页系统和FTP ;在与此同时,可能还会有系统管理员在维护系统;浏览主页的用的是nobody 用户,大家都用同一个,而上传软件包用的是FTP用户;管理员的对系统的维护或查看,可能用的是普通帐 或超级权限root帐 ;不同用户所具有的权限也不同,要完成不同的任务得需要不同的用户,也可以说不同的用户,可能完成的工作也不一样

用户的角色区分:用户在系统中是分角色的,在 Linux 系统中,由于角色不同,权限和所完成的任务也不同;用户的角色是通过 UID 和识别的,特别是UID;在系统管理中,系统管理员一定要坚守UID 唯一的特性;

  • root 用户:系统唯一,是真实的,可以登录系统,可以操作系统任何文件和命令,拥有最高权限;
  • 虚拟用户:这类用户也被称之为伪用户或假用户,与真实用户区分开来,这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户,比如 bin、daemon、adm、ftp、mail 等;这类用户都系统自身拥有的,而非后来添加的,当然我们也可以添加虚拟用户;
  • 普通真实用户:这类用户能登录系统,但只能操作自己家目录的内容;权限有限;这类用户都是系统管理员自行添加的;

多用户操作系统的安全

2、用户 (user)和 用户组(group)概念

用户 ( user )

Linux 是多用户操作系统,所以可以在 Linux 系统中建若干用户(user)。比如:我们的同事想用我的计算机,但我不想让他用我的用户名登录,因为我的用户名下有不想让别人看到的资料和信息(也就是隐私内容)这时我就可以给他建一个新的用户名,让他用我所开的用户名去折腾,这从计算机安全角度来说是符合操作规则的;

当然用户(user)的概念理解还不仅仅于此,在 Linux 系统中还有一些用户是用来完成特定任务的,比如 nobody 和 ftp 等,我们访问 LinuxSir.Org 的 页程序,就是 nobody 用户;我们匿名访问 ftp 时,会用到用户 ftp 或 nobody ;

如果您想了解 Linux 系统的一些帐 ,请查看文件:/etc/passwd

用户组 ( group )

用户组(group)就是具有相同特征的用户(user)的集合体;比如:有时要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时就需要用户组,把用户都定义到同一用户组,通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限。

用户用户组 的对应关系

  • 一对一:某个用户可以是某个组的唯一成员;
  • 多对一:多个用户可以是某个唯一的组的成员,不归属其它用户组;比如beinan和linuxsir两个用户只归属于beinan用户组;
  • 一对多:某个用户可以是多个用户组的成员;比如beinan可以是root组成员,也可以是linuxsir用户组成员,还可以是adm用户组成员;
  • 多对多:多个用户对应多个用户组,并且几个用户可以是归属相同的组;其实多对多的关系是前面三条的扩展;理解了上面的三条,这条也能理解;

实际用户有效用户 区别

Unix系统通过进程的有效用户ID和有效用户组ID来决定进程对系统资源的访问权限。

Unix高级编程第八章提到实际用户和有效用户,那么这两个用户到底是什么,它们之间有什么区别呢/p>

实际用户 和 有效用户 区别

  • 实际用户ID( 实际组ID ):标识当前用户(所属组)是谁,当用户登陆时取自口令文件。即标识我是谁。也就是登录用户的 uid 和 gid。比如我的Linux以king用户登录,在Linux运行的所有的命令的实际用户ID都是king的uid,实际用户组ID都是king的gid(可以用id命令查看)
  • 有效用户ID( 有效组ID ):用来决定我们(当前进程)对资源的访问权限或者对文件的访问权(即实际该进程是以那个用户运行的)

一般情况下,有效用户 ID 等于实际用户ID,有效用户组ID等于实际用户组ID。当设置-用户-ID(SUID)位设置,则有效用户ID等于文件的所有者的uid,而不是实际用户ID;同样,如果设置了设置-用户组-ID(SGID)位,则有效用户组ID等于文件所有者的gid,而不是实际用户组ID。

一个测试验证程序

这个程序非常简单没有什么好说的。编译这个程序生成 test 程序

通过 id 命令看到当前登录用户为 root,uid=0,gid=0。通过 ls 命令可以看出 test 程序没有设置SUID 和 SGID,所有者是 root,所有组也是 root。
执行 test 发现有效用户ID等于实际用户ID(0),有效用户组ID等于实际用户组ID(0)。
你可能注意到 test 的所有者root,组也是 root,和实际用户,实际用户组是一样的。
下一步我们修改一下test所有者和组,再看结果。

发现结果和上面一样,test 进程的有效用户ID等于实际用户ID(0),有效用户组ID等于实际用户组ID(0)。下面给 test 程序设置 SUID

发现设置 test 程序的 SUID 位之后,test 进程的有效用户ID等于文件所有者的 UID( gkh的uid为500),有效用户组ID还是等于实际用户组ID(0)。这样程序就可以访问只有 gkh 才能访问的资源了

linux 特殊权限 SUID、SGID、SBIT

先看看下面两个的权限是什么

非常奇怪,/tmp 目录和 passwd 文件的权限怎么怪怪的,怎么有 s 和 t 权限。

SUID 权限

s 出现在 “文件拥有者的 x 权限” 上时,如上面看到的 /usr/bin/passwd 这个文件的权限是 -rwsr-xr-x,此时就被称为 SET UID 简称 SUID。

SUID 对于一个文件有什么限制和功能呢/p>

1.  SUID权限仅对二进制可执行文件有效
2.  执行者对于该文件具有x的权限
3.  本权限仅在执行该文件的过程中有效
4.  执行者将具有该文件拥有者的权限

例如:普通用户用 passwd 修改自己的命令,实际上最终更改的是 /etc/passwd 文件。此文件时用户管理配置文件,只有 root 权限才能更改

既然是 root 用户才拥有此权限,为什么我们可以通过 passwd 命令来修改密码呢,那这就要归功于 passwd 设置了 suid 权限位了

此时普通用户通过执行 passwd 命令,临时拥有 root 权限,间接的修改 /etc/passwd,以达到修改自己密码的权限

SGID 权限

当 s 出现在 ” 目录或文件所属群的x权限 ” 上时,此时就称为 SET GID,简称 SGID。
那 SGID 对文件和目录分部有哪些功能呢/p>

SGID 对 目录

1.  使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录
2.  使用者在此目录下的群组将会变成该目录的群组
3.  若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同

SGID 对 文件

1.  SGID 对二进制可执行文件有效
2.  程序执行者对于该文件来说,需具备 x 的权限
3.  执行者在执行的过程中,将会获得该文件群组的支援(用于改文件群组的权限)

SBIT 权限

当 s 出现在目录其他用户的x权限上时,此时就称为 Sticky Bit 简称SBIT。
那 SBIT 有哪些限制和作用呢/p>

1.  仅对目录有效,对文件无效
2.  当使用者在该目录下建立文件或目录时(有权限的情况下),仅自己与 root 才有权力删除新建的目录或文件

我们知道 /tmp 目录是这样的权限。

现在我们来验证下,先用 root 账 在 tmp 文件中创建一个文件 test,然后用 openstack (其他账 ) 进入该目录,删除 test 文件,看看发生什么情况

我们看到这样是不能删除文件的。因为 /temp 目录有 SBIT 权限

设置 SUID、SGID、SBIT

操作这些标志与操作文件权限的命令是一样的,都是 chmod。 有两种方法来操作

方法 1:符 类型改变权限(文字法:SUID: u+s ,SGID: g+s,SBIT: o+t )

chmod u+s testbin    // 为testbin文件加上 setuid 标志.
chmod g+s testdir    // 为testdir目录加上 setgid 标志
chmod o+t testdir    // 为testdir目录加上 sticky 标志

方法 2:数字类型改变档案权限

数字法:将原来的三位数扩展为四位数即可,SUID为4,SGID为2,SBIT为1,把它们放在权限数字的最开头。
例如:设置 SUID 可以写成4777,设置 SGID 可以写成,2777
        setuid 位, 如果该位为1, 则表示设置 setuid 4755
        setgid 位, 如果该位为1, 则表示设置 setgid 2755
        sticky 位, 如果该位为1, 则表示设置 sticky 1755

设置完这些标志后,可以用 ls -l 来查看。
rwsrw-r–      表示有 setuid 标志
rwxrwsrw-      表示有 setgid 标志
rwxrw-rwt     表示有 sticky 标志

3、管理用户(user)和用户组(group)相关命令

su、su -、sudo、visudo、sudoedit

su :切换用户(su 和 su – 这两个切换用户命令是有区别的。)

  • su :是用来切换用户,只输入su 后面不加账户名称时,系统默认切换到 root 账户。仅仅只是切换 root 身份,但 Shell 环境仍然是普通用户的 Shell。执行 pwd 命令发现工作目录仍然是普通用户的工作目录
  • su – :申请切换到 root 用户,需要 root 用户密码。用户 和 Shell 环境一起切换成 root 身份。执行 pwd 命令可以发现工作目录变成 root 的工作目录。要从当前用户切换到其它用户,推荐使用 su – 命令,这样连 shell 环境也切换了。有些 Linu x发行版默认没有设置 root 用户的密码,需要先使用 sudo passwd root 设置 root 用户密码。示例:su – root  或者  su –
  • echo $PATH 命令看一下 su 和 su – 环境变量也不一样。

sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。严谨些说,sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,能做什么不能做什么都是通过安全策略来指定的。sudo 支持插件架构的安全策略,并能把输入输出写入日志。第三方可以开发并发布自己的安全策略和输入输出日志插件,并让它们无缝的和 sudo 一起工作。默认的安全策略记录在 /etc/sudoers 文件中。而安全策略可能需要用户通过密码来验证他们自己。也就是在用户执行 sudo 命令时要求用户输入自己账 的密码。如果验证失败,sudo 命令将会退出。

sudo 程序相关文件

/etc/sudoers
/etc/init.d/sudo
/etc/pam.d/sudo
/var/lib/sudo
/usr/share/doc/sudo
/usr/share/lintian/overrides/sudo
/usr/share/bash-completion/completions/sudo
/usr/bin/sudo
/usr/lib/sudo

添加内容如下:

把用户 testuser 添加到了 sudo 组中,所以当用户 testuser 登录后就可以通过 sudo 命令以 root 权限执行命令了!但是,用 testuser 执行 root 权限的命令时会 错,还需要修改文件,解决办法:

sudoers 添加下面四行中任意一条
youuser            ALL=(ALL)                ALL
%youuser           ALL=(ALL)                ALL
youuser            ALL=(ALL)                NOPASSWD: ALL
%youuser           ALL=(ALL)                NOPASSWD: ALL
第一行:允许用户youuser执行sudo命令(需要输入密码).
第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码).
第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码.
第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码.

4)、撤销sudoers文件写权限,命令:
        chmod u-w /etc/sudoers  这样普通用户就可以使用sudo了。

4、sudo命令的日志
        在 ubuntu 中,sudo 的日志默认被记录在 /var/log/auth.log 文件中。
        当执行 sudo 命令时,相关日志都是会被记录下来的。

sudo 命令帮助:

sudo -l    列出用户的权限

管理用户(user)的工具或命令

adduser :添加用户。会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码。( 推荐使用 adduser)useradd :添加用户。需要使用参数指定一些基本设置,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定 shell 版本。需要单独设置用户密码、指定家目录、指定shell 等

usermod :修改已经存在用户的信息 
userdel :删除用户
passwd :为用户设置密码
chage :更改用户密码过期信息 
chfn :改变用户备注信息 
chsh :更改登录 shell
usermod :修改用户命令,可以通过usermod 来修改登录名、用户的家目录等等。即更改passwd和shadow文件中用户的相关属性 
pwcov :同步用户从/etc/passwd 到/etc/shadow 
pwck :pwck是校验用户配置文件/etc/passwd 和/etc/shadow 文件内容是否合法或完整;
pwunconv :pwcov的逆向操作,是从/etc/shadow和 /etc/passwd 创建/etc/passwd ,然后会删除 /etc/shadow 文件;
finger :查看用户信息工具
id :查看用户的UID、GID及所归属的用户组
chfn :更改用户信息工具

adduser 命令帮助

adduser -h
adduser [–home DIR] [–shell SHELL] [–no-create-home] [–uid ID]
[–firstuid ID] [–lastuid ID] [–gecos GECOS] [–ingroup GROUP | –gid ID]
[–disabled-password] [–disabled-login] [–add_extra_groups] USER
   Add a normal user

adduser –system [–home DIR] [–shell SHELL] [–no-create-home] [–uid ID]
[–gecos GECOS] [–group | –ingroup GROUP | –gid ID] [–disabled-password]
[–disabled-login] [–add_extra_groups] USER
   Add a system user

adduser –group GROUP
addgroup [–gid=GID] GROUP             添加一个用户组  
addgroup –system [–gid=GID] GROUP    添加一个系统组
adduser USER GROUP    添加一个存在的用户到存在的组

通用选项:
  –force-badname       允许添加不匹配 NAME_REGEX 变量的用户名
  -q, –quiet           执行时不显示信息
  -d, –debug           显示更多信息
  -h, –help            帮助
  -v, –version         显示版本
  -c FILE, –conf=FILE  使用文件作为配置文件

useradd 命令帮助。

在创建用户时,需要为新建用户指定一用户组,如果不指定其用户所属的工作组,自动生成一个同名同ID(UID=GID)的用户组,即与用户名同名的工作组。

useradd -h

示例:

// 创建用户 user1 的时候指定其所属工作组 users
useradd -g users user1

// 添加用户 test,并设置密码,不然不能登录的。
useradd test   
passwd test    // 设置用户test 的密码   

//添加 phpq 用户并让用户 “只属于test工作组”。  
注: -g 所属组 -d 家目录 -s 所用的 SHELL
useradd -g test phpq   

useradd 用户名            // 创建一个新用户 
useradd -G 用户组 用户名  // 新建一个用户,同时添加到附加组中 
useradd -u 600 liuyalei   // 创建一个用户liuyalei,指定uid为600
useradd -M /sbin/nologin liuyalei  // 创建 liuyalei 用户,不创建家目录,不允许登录
useradd -e  // 帐 中指日期,日期的指定格式为MM/DD/YY
useradd -g  // grop名称或以数字来作为用户登入起始用户组。

添加用户和组

使用 useradd test123 命令给linux系统添加一个新的用户。
使用 passwd test123 命令给用户“test123”添加密码。输入两次一样的密码即可完成创建。
使用 groupadd groupTest 命令创建用户组。
使用 usermod -G groupTest test123 将已有的用户添加到已有的组中。
使用 cat /etc/group |grep group 命令查看是否将刚才的用户添加到组中。
使用 useradd -g test king 命令将新建的“king”用户添加到已有的“test”组

示例:useradd -c adminadmin -d /home/admin -e 2014-12-12 -g root -G,bin,mail
创建 admi 帐户 
用户信息为 adminadmin
家目录为/home/admin
失效日期为2014年12月12日
指定默认组为root,
附加组为bin,mail

修改用户属性 usermod (user modify) 命令

对于已创建好的用户,可使用 usermod 命令来修改和设置账户的各项属性,包括登录名,主目录,用户组,登录shell等,

命令用法:usermod [option] username

更多参数看帮助文档:man usermod     或者    usermod -h

(1)改变用户帐户名

命令:usermod -l 新用户名 原用户名

例如,若要将用户 lijie 更名为lijunjie,则操作命令为:
[root@localhost ~]# usermod -l lijunjie lijie
[root@localhost ~]# tail -1 /etc/passwd
lijunjie:x:502:502::/home/lijie:/bin/bash
从输出结果可见,用户名已更改为lijunjie。主目录仍为原来的/home/lijie,
若也要更改为/home/lijunjie,则可通过执行以下命令来实现
[root@localhost ~]# usermod -d /home/lijunjie lijunjie
[root@localhost ~]# tail -1 /etc/passwd
lijunjie:x:502:502::/home/lijunjie:/bin/bash
[root@localhost ~]# mv /home/lijie /home/lijunjie

(2)锁定账户

若要临时禁止用户登录,可将该用户账户锁定。锁定账户可利用-L参数来实现,
命令:usermod -L 要锁定的账户
linux锁定用户,是通过在密码文件shadow的密码字段前加“!”来标识该用户被锁定。

(3)解锁账户

要解锁账户,可以使用带-U参数的usermod命令来实现

修改用户 加入 单个组 和 多个组

usermod 参数 -G

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年6月9日
下一篇 2022年6月9日

相关推荐