Linux 用户、用户组 ( 添加、删除、修改 )

2023-11-14

Linux 使用者管理:http://cn.linux.vbird.org/linux_basic/linux_basic.php#part4
鸟哥官网(简体中文):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 等;这类用户都系统自身拥有的,而非后来添加的,当然我们也可以添加虚拟用户;
  • 普通真实用户:这类用户能登录系统,但只能操作自己家目录的内容;权限有限;这类用户都是系统管理员自行添加的;

多用户操作系统的安全

  • 多用户系统对系统管理更为方便、更为安全。比如 beinan 用户下的某个文件不想让其它用户看到,只是设置一下文件的权限,只有beinan一个用户可读可写可编辑就行了,这样一来只有beinan一个用户可以对其私有文件进行操作,Linux 在多用户下表现最佳,Linux 能很好的保护每个用户的安全,从服务器角度来说,多用户的下的系统安全性也是最为重要的,常用的 Windows 操作系统在系纺权限管理方面根本没法和 Linux 或 Unix 类系统相比。

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高级编程第八章提到实际用户和有效用户,那么这两个用户到底是什么,它们之间有什么区别呢?

实际用户 和 有效用户 区别

  • 实际用户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 对于一个文件有什么限制和功能呢?

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 对文件和目录分部有哪些功能呢?

SGID 对 目录

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

SGID 对 文件

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

SBIT 权限

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

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

sudo (superuser do) 命令是一个命令行程序,它允许用户以 root 用户身份执行命令,而不需要知道 root 的密码,并能把输入输出写入日志 ( /var/log/auth.log 文件记录了执行的所有命令和参数 )。sudo 也是一种权限管理机制,它允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,能做什么不能做什么都是通过安全策略来指定的。默认的安全策略记录在 /etc/sudoers 文件中,而安全策略可能需要用户通过密码来验证他们自己。也就是在用户执行 sudo 命令时要求用户输入自己账号的密码。如果验证失败,sudo 命令将会退出。

虽然有点类似于 su 命令,但 sudo 的不同之处在于它默认需要用户的密码进行身份验证,而不是 su 需要的目标用户的密码。sudo 也不会产生 root shell;相反,它以提升的权限运行程序或命令,不像 su,它产生一个 root shell。

使用 sudo,系统管理员可以执行以下操作:

  • 授予用户或用户组以提升或 root 权限运行某些命令的能力。
  • 查看每个使用 sudo 的用户的用户 ID 的日志。
  • 控制用户可以在主机系统上使用什么命令。

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

系统默认创建了一个名为 sudo 的组。只要把用户加入这个组,用户就具有了 sudo 的权限。至于如何把用户加入 sudo 组,您可以直接编辑 /etc/group 文件,当然您得使用一个有 sudo 权限的用户来干这件事:先创建用户并设置密码后,然后在sudo组中加入该用户,多个用户用逗号隔开。

添加内容如下:

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

1)、切换到 root 用户下
        普通用户切换到root用户下:sudo -i
        root用户切换到普通用户下:su testuser
2)、添加sudo文件的写权限,命令是:
        chmod u+w /etc/sudoers
3)、编辑 sudoers 文件
        vi /etc/sudoers
        找到这行 root ALL=(ALL) ALL,在他下面添加xxx ALL=(ALL) ALL (这里的xxx是你的用户名)

执行 visudo 命令可以编辑 /etc/sudoers
也可以直接用 vi 来编辑 /etc/sudoers 的效果是一样的;
sudoedit   注:和 sudo 功能差不多;

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    列出用户的权限

Sudo 对比 Root

最小权限原则是一种信息和计算机安全概念,它认为授予程序和用户执行任务所需的最少或最低限度的权限。

root 账户下所有命令都有最高权限,也就是相当于所有命令都默认加了 sudo。

以 root 用户登录后,输入到终端的每一条命令都以系统最高权限运行,违反了最小权限原则。

Sudo 提供细粒度的访问控制。它仅向需要它的特定程序授予提升的权限。您知道哪个程序以提升的权限运行,而不是使用 root shell(以 root 权限运行每个命令)。

Sudo 也可以配置为以另一个用户身份运行命令,指定允许哪些用户和组使用 sudo 运行命令,或者通过编辑 sudoers 文件设置以 root 权限运行程序的超时。

因此,不建议使用 root shell 运行命令,因为您破坏系统的机会要高得多。如果您需要更高权限或 root 权限来运行命令,请使用 sudo 确保只有该命令以 root 权限运行。

管理用户(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

选项:
  -b, --base-dir BASE_DIR       设置基本路径作为用户的登录目录  
  -c, --comment COMMENT         对用户的注释  
  -d, --home-dir HOME_DIR       设置用户的登录目录  
  -D, --defaults                改变设置  
  -e, --expiredate EXPIRE_DATE  新账户的过期日期。设置用户的有效期  
  -f, --inactive INACTIVE       用户过期后,让密码无效  
  -g, --gid GROUP               使用户 “只属于某个组 ” (只能属于一个组)
  -G, --groups GROUPS           新账户的附加组列表。使用户加入某个组(可以属于多个组)  
  -h, --help                    帮助
  -k, --skel SKEL_DIR           使用此目录作为骨架目录
  -K, --key KEY=VALUE           不使用 /etc/login.defs 中的默认值
  -l, --no-log-init             不把用户加入到lastlog文件中  
  -m, --create-home             自动创建登录目录  
  -M, --no-create-home          不自动创建登录目录  
  -N, --no-user-group           不创建同名的组
  -o, --non-unique              允许使用重复的 UID 创建用户
  -p, --password PASSWORD       为新用户使用加密密码  
  -r, --system                  创建一个系统账户
  -R, --root CHROOT_DIR         chroot 到的目录
  -s, --shell SHELL             登录时候的shell  
  -u, --uid UID                 为新用户指定一个UID  
  -U, --user-group              创建与用户同名的组
  -Z, --selinux-user SEUSER     为 SELinux 用户映射使用指定 SEUSER

示例:

// 创建用户 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

usermod -h     
Usage: usermod [options] LOGIN

Options:
  -b, --badnames                allow bad names
  -c, --comment COMMENT         new value of the GECOS field
  -d, --home HOME_DIR           new home directory for the user account
  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE
  -f, --inactive INACTIVE       set password inactive after expiration
                                to INACTIVE
  -g, --gid GROUP               force use GROUP as new primary group
  -G, --groups GROUPS           new list of supplementary GROUPS
  -a, --append                  append the user to the supplemental GROUPS
                                mentioned by the -G option without removing
                                the user from other groups
  -r, --remove                  remove the user from only the supplemental GROUPS
                                mentioned by the -G option without removing
                                the user from other groups
  -h, --help                    display this help message and exit
  -l, --login NEW_LOGIN         new value of the login name
  -L, --lock                    lock the user account
  -m, --move-home               move contents of the home directory to the
                                new location (use only with -d)
  -o, --non-unique              allow using duplicate (non-unique) UID
  -p, --password PASSWORD       use encrypted password for the new password
  -R, --root CHROOT_DIR         directory to chroot into
  -P, --prefix PREFIX_DIR       prefix directory where are located the /etc/* files
  -s, --shell SHELL             new login shell for the user account
  -u, --uid UID                 new UID for the user account
  -U, --unlock                  unlock the user account
  -v, --add-subuids FIRST-LAST  add range of subordinate uids
  -V, --del-subuids FIRST-LAST  remove range of subordinate uids
  -w, --add-subgids FIRST-LAST  add range of subordinate gids
  -W, --del-subgids FIRST-LAST  remove range of subordinate gids
  -Z, --selinux-user SEUSER     new SELinux user mapping for the user account

(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 和 -g 的 区别:

// 将 test 用户的登录目录改成/home/test,并加入 test2 组,注意这里是大G。
命令:usermod -d /home/test -G test2 test

注意:将一个用户添加到用户组中,千万不能直接用: usermod -G groupA userName 
这样做会使你离开其他用户组,仅仅做为这个groupA用户组的成员。 
命令:usermod -g 组名 用户名  // 是修改用户所在组,其它组都给删除了。

使用 usermod -G 添加多个组要用","号隔开。
命令:usermod -G groupA,groupB,groupC user

如果真要使用 -G 选项追加组,应该加上 -a 选项
(-a 代表 append, 也就是 将自己添加到 用户组groupA 中,而不必离开 其他用户组。 )
命令: usermod -a -G groupA user
示例: usermod -a G dba grid

# Linux 把用户加入某个组(不退出当前所属组 同时属于多个组)
usermod -a -G groupname username

gpasswd -a test test2  //将用户test加入到test2组
gpasswd -d test test2  //将用户test从test2组中移出

#查看某用户所属组
groups username

删除用户 userdel

更多选项参看:man userdel  或者  userdel -h

用法:userdel 用户名

示例:userdel test           // 将 test 用户删除
示例:userdel -r liuyalei    // 连同家目录删掉

生产环境中,我们可以通过注视配置文件 /etc/passwd,选择先注销而不删除用户,类似回收站的作用,即使出了问题也能恢复。

将文件夹赋给相应用户以及所在组

给 oinstall 组中的 oracle 相应的拥有者权限
[root@gl oracle]# chown -R oracle:oinstall /data/encryption/  

然后指定相应的用户或组的相应权限
[root@gl oracle]# chmod -R 775 /data/encryption/

查看用户

a),查看当前登录用户
        [root@krlcgcms01 ~]# w
        [root@krlcgcms01 ~]# who
b),查看自己的用户名
        [root@krlcgcms01 ~]# whoami
c),查看单个用户信息
        [root@krlcgcms01 ~]# finger apacheuser
        [root@krlcgcms01 ~]# id apacheuser
d),查看用户登录记录
        [root@krlcgcms01 ~]# last    查看登录成功的用户记录
        [root@krlcgcms01 ~]# lastb   查看登录不成功的用户记录
e),查看所有用户
        [root@krlcgcms01 ~]# cut -d : -f 1 /etc/passwd
        [root@krlcgcms01 ~]# cat /etc/passwd |awk -F \: '{print $1}'

查看某个用户所属的组

命令:groups 用户名
示例:[root@xxx~]# groups root
root : root bin daemon sys adm disk wheel
用户 root 属于root bin daemon sys adm disk wheel这7个group 

查看系统中所有组

命令:more /etc/group 

管理 用户密码

用户管理的一项重要内容是用户口令(密码)的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。

指定和修改用户口令的Shell命令是:passwd [用户名]超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。
命令的格式为:passwd 选项 用户名

可使用的选项:

passwd -h
用法: passwd [options] [LOGIN]

选项:
  -a, --all                  报告所有帐户的密码状态。与-S搭配使用,显示所有用户状态
  -d, --delete               删除指定帐户的密码
  -e, --expire               强制使指定帐户的密码过期。
                             这可以强制一个用户下次登录时更改密码。
  -h, --help                 显示此帮助信息并退出
  -k, --keep-tokens          仅在过期时更改密码
  -i, --inactive INACTIVE    密码过期一定天数之后禁用账户。
  -l, --lock                 锁定用户,即禁用账号。此选项通过在密码开头添加一个 ! 实现。
  -n, --mindays MIN_DAYS     多长时间改一次密码
  -q, --quiet                安静模式
  -r, --repository REPOSITORY  更改 REPOSITORY 存储库中的密码
  -R, --root CHROOT_DIR        目录到 chroot 到
  -S, --status                 报告指定帐户的密码状态
  -u, --unlock                 解锁指定用户的密码。此操作将密码改回锁定前的值
  -w, --warndays WARN_DAYS     密码过期之前提前警告的天数
  -x, --maxdays MAX_DAYS       密码到期时仍然有效的最大天数

文件
       /etc/passwd          用户账户信息。
       /etc/shadow          用户账户的密码信息。
       /etc/pam.d/passwd    passwd 的 PAM 配置。

示例

例如,假设当前用户是sam,则下面的命令修改该用户自己的口令:
$ passwd
Old password:******
New password:*******
Re-enter new password:*******

如果是超级用户,可以用下列形式指定任何用户的口令:
# passwd sam
New password:*******
Re-enter new password:*******

普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,
如果两次输入的口令一致,则将这个口令指定给用户;
而超级用户为用户指定口令时,就不需要知道原口令。

为用户指定空口令时,执行下列形式的命令:
# passwd -d sam
此命令将用户sam的口令删除,这样用户sam下一次登录时,系统就不再询问口令。
passwd命令还可以用-l(lock)选项锁定某一用户,使其不能登录,例如:
# passwd -l sam

锁定 / 解锁账户密码

在linux中,除了用户账户可被锁定外,账户密码也可被锁定,任何一方被锁定后,都将无法登录系统。

只有 root 用户才有权执行该命令,锁定账户密码使用带 -l 参数的 passwd 命令,其用法为:
passwd -l 帐户名
passwd -u 帐户名 #解锁账户密码

查询密码状态

查询当前账户的密码是否被锁定。用法为:passwd -S 账户名
例如
[root@localhost etc]# passwd -S lijunjie
lijunjie LK 2011-03-25 0 99999 7 -1 (密码已被锁定。)
[root@localhost etc]# passwd -u lijunjie      // 解锁用户 lijunjie 的密码 。

[root@localhost etc]# passwd -S lijunjie
lijunjie PS 2011-03-25 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)

删除账户密码

其用法为:passwd -d 帐户名

帐户密码被删除后,将不能登录系统,除非重新设置密码。

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

groupadd :添加用户组;
groupdel :删除用户组;
groupmod :修改用户组信息 
newgrp :切换到一个新组 
gpasswd  :管理组和组密码的命令。man gpasswd
groups :显示用户所属的用户组
grpck
grpconv :通过/etc/group和/etc/gshadow 的文件内容来同步或创建/etc/gshadow ,如果/etc/gshadow 不存在则创建;
grpunconv :通过 /etc/group 和 /etc/gshadow 文件内容来同步或创建 /etc/group ,然后删除gshadow文件;  

涉及命令:

  • gpasswd (管理组)
  • groupadd(添加组)
  • groupmod (修改组)
  • groupdel(删除组)  

LINUX 下把一个用户加入多个组 命令:gpasswd -a 用户 组
示例:gpasswd -a user group    // 将 user 用户加入到 group 组中

如果查看 /etc/shadow 或 /etc/passwd 等文件看不出来用户已经加入想要的组时,此时可以用 id 命令 来查看

用户 ruan 隶属于 ruan 组,id为 500,现在想要同时加入组 ruanrongjian 中
[root@diandianrong ~]# gpasswd -a rong ruanrongjian
Adding user rong to group ruanrongjian
先切换到ruan用户,然后用ID查看
[root@diandianrong ~]# su ruan
[ruan@diandianrong root]$ id
uid=500(ruan) gid=500(ruan) groups=500(ruan),501(ruanrongjian) context=user_u:system_r:unconfined_t
当然直接用id ruan 也是可以的

[ruan@diandianrong root]$ id ruan
uid=500(ruan) gid=500(ruan) groups=500(ruan),501(ruanrongjian)
此时group加有两个,组ruan是在用户被创建时自发产生的,ruanrongjian则是后面手动添加进去的。

另一种实现方法:

[root@diandianrong ~]# usermod -a -G rong ruanrongjian   // 必须加上 -a 选项才是追加组,否则是清除原来的组,只加入组
[root@diandianrong ~]# id rong
uid=502(rong) gid=502(rong) groups=502(rong),501(ruanrongjian)

添加、删除用户和组

groupadd 命令

root@kali:~# groupadd -h
用法:groupadd [选项] 组

选项:
  -f, --force           如果组已经存在则成功退出
                        并且如果 GID 已经存在则取消 -g
  -g, --gid GID                 为新组使用 GID
  -h, --help                    显示此帮助信息并推出
  -K, --key KEY=VALUE           不使用 /etc/login.defs 中的默认值
  -o, --non-unique              允许创建有重复 GID 的组
  -p, --password PASSWORD       为新组使用此加密过的密码
  -r, --system                  创建一个系统账户
  -R, --root CHROOT_DIR         chroot 到的目录

可以使用的选项有:
    -g GID 指定新用户组的组标识号(GID)。
    -o 一般与 -g 选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。 

# groupadd group1 
此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。 
#groupadd -g 101 group2 
此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。 

删除用户组

删除用户组使用 groupdel 命令来实现,命令用法:groupdel 用户组    
示例:groupdel liuyalei  //删除liuyalei组
在删除用户组时,被删除的用户组不能是某个账户的私有用户组,否则将无法删除,若要删除,则应先删除引用该私有用户组的账户,然后再删除用户组。

[root@localhost ~]# groupdel teacher
groupdel: cannot remove the primary group of user 'zhangjie'
[root@localhost ~]# userdel -r zhangjie
[root@localhost ~]# groupdel teacher
[root@localhost ~]# grep teacher /etc/group #没有输出,说明teacher用户组已经不存在,删除成功

一般直接通过usermod命令来更改用户的相关属性(包括用户组属性)

groupadd test            //增加一个test组
groupmod -n test2 test   //将test组的名子改成test2
groupdel test2           //删除组 test2

修改组 

命令:groupmod 选项 用户组 
更多参数看帮助:man groupmod    或者    groupmod -h
常用的选项有:
    -g GID 为用户组指定新的组标识号。
    -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
    -n新用户组 将用户组的名字改为新名字

例如:

groupmod -g 102 group2     // 将组group2的组标识号修改为102。 
groupmod -g 10000 -n group3 group2    // 将组group2的标识号改为10000,组名修改为group3。 

修改用户组属性

  用户组创建后,根据需要可对用户组的相关属性进行修改。对用户组属性的修改,主要是修改用户组的名称和用户组的GID值。

(1)改变用户组的名称(重命名组名

若要对用户组进行重命名,可使用带-n参数的groupmod命令来实现,
用法:groupmod -n 新用户组名 原用户组名
对于用户组改名,不会改变其GID的值。
比如,若要将student用户组更名为teacher用户组,则操作命令为:
[root@localhost ~]# tail -3 /etc/group
student:x:501:
lijie:x:502:
vodup:x:503:
[root@localhost ~]# groupmod -n teacher student
[root@localhost ~]# tail -3 /etc/group
lijie:x:502:
vodup:x:503:
teacher:x:501:

(2)重设用户组的GID

用户组的GID值可以重新进行设置修改,但不能与已有用户组的GID值重复。对GID进行修改,不会改变用户名的名称。
要修改用户组的GID,可使用带-g参数的groupmod命令,其用法为:groupmod -g new_GID 用户组名称

例如,若要将teacher组的GID更改为504,则操作命令为:
[root@localhost ~]# tail -3 /etc/group
lijie:x:502:
vodup:x:503:
teacher:x:501:
[root@localhost ~]# groupmod -g 504 teacher
[root@localhost ~]# tail -3 /etc/group
lijie:x:502:
vodup:x:503:
teacher:x:504:

添加用户到指定的组/从指定的组中移除用户

gpasswd命令是 Linux 下工作组文件/etc/group 和 /etc/gshadow 管理工具。主要功能:管理组。

root@kali:~# gpasswd -h
用法:gpasswd [选项] 组

选项:
  -a, --add USER                向组 GROUP 中添加用户 USER
  -d, --delete USER             从组 GROUP 中添加或删除用户
  -h, --help                    显示此帮助信息并推出
  -Q, --root CHROOT_DIR         要 chroot 进的目录
  -r, --remove-password         移除组 GROUP 的密码
  -R, --restrict                向其成员限制访问组 GROUP
  -M, --members USER,...        设置组 GROUP 的成员列表
  -A, --administrators ADMIN,...        设置组的管理员列表
除非使用 -A 或 -M 选项,不能结合使用这些选项。

可以将用户添加到指定的组,使其成为该组的成员。命令:gpasswd -a 用户账户 用户组名

若要从用户组中移除某用户,命令:gpasswd -d 用户账户 用户组名

例如,现在将上面创建的lijunjie用户添加到vodup用户组中

[root@localhost ~]# groups lijunjie
lijunjie : lijie
[root@localhost ~]# gpasswd -a lijunjie vodup  #添加用户到指定的用户组
Adding user lijunjie to group vodup
[root@localhost ~]# groups lijunjie
lijunjie : lijie vodup
[root@localhost ~]# gpasswd -d lijunjie vodup  #从指定的用户组中移除用户
Removing user lijunjie from group vodup
[root@localhost ~]# groups lijunjie   #查看用户所属的组
lijunjie : lijie

设置 用户组管理员

添加用户到组和从组中移除某用户,除了 root 用户可以执行该操作外,用户组管理员也可以执行该操作。

将某用户指派为某个用户组的管理员命令:gpasswd -A 用户账户 要管理的用户组
命令功能:将指定的用户设置为指定用户组的用户管理员。用户管理员只能对授权的用户组进行用户管理(添加用户到组或从组中删除用户),无权对其他用户组进行管理。

示例

[root@localhost ~]# gpasswd -A lijunjie vodup
[root@localhost ~]# useradd fen
[lijunjie@localhost ~]# gpasswd -a fen vodup
Adding user fen to group vodup
[lijunjie@localhost ~]# groups fen
fen : fen vodup
[lijunjie@localhost ~]# gpasswd -d fen vodup
Removing user fen from group vodup
[lijunjie@localhost root]$ gpasswd -d fen fen  #试图将fen用户从fen用户组中移除
gpasswd: Permission denied.                    #操作被拒绝,说明无权对其他用户组进行管理

切换用户所属的组

如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。用户可以在登录后,使用命令 newgrp 切换到其他用户组,这个命令的参数就是目的用户组。

例如: $ newgrp root 

这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。

查看组

a),查看当前登录用户所在的组 groups,查看apacheuser所在组groups apacheuser
b),查看所有组 cat /etc/group
c),有的linux系统没有/etc/group文件的,这个时候看下面的这个方法
cat /etc/passwd |awk -F [:] '{print $4}' |sort|uniq | getent group |awk -F [:] '{print $1}'
这里用到一个命令是getent,可以通过组ID来查找组信息,如果这个命令没有的话,那就很难查找,系统中所有的组了.

查看用户所属的组使用命令: $ groups user
或者查看文件: $ cat /etc/group
查看一个用户的UID和GID: $ id user 或者 cat /etc/passwd
finger命令 ——可以查看用户的主目录、启动shell、用户名、地址、电话等信息
例:finger root

/etc/skel 目录

/etc/skel 目录一般是存放用户启动文件的目录,这个目录是由 root 权限控制,当我们添加用户时,这个目录下的文件自动复制到新添加的用户的家目录下;/etc/skel 目录下的文件都是隐藏文件,也就是类似 .file 格式的;我们可通过修改、添加、删除 /etc/skel 目录下的文件,来为用户提供一个统一、标准的、默认的用户环境;

[root@localhost beinan]# ls -la /etc/skel/
总用量 92
drwxr-xr-x    3 root root  4096  8月 11 23:32 .
drwxr-xr-x  115 root root 12288 10月 14 13:44 ..
-rw-r--r--    1 root root    24  5月 11 00:15 .bash_logout
-rw-r--r--    1 root root   191  5月 11 00:15 .bash_profile
-rw-r--r--    1 root root   124  5月 11 00:15 .bashrc
-rw-r--r--    1 root root  5619 2005-03-08  .canna
-rw-r--r--    1 root root   438  5月 18 15:23 .emacs
-rw-r--r--    1 root root   120  5月 23 05:18 .gtkrc
drwxr-xr-x    3 root root  4096  8月 11 23:16 .kde
-rw-r--r--    1 root root   658 2005-01-17  .zshrc 

/etc/skel 目录下的文件,一般是用 useradd 和 adduser 命令添加用户(user)时,系统自动复制到新添加用户(user)的家目录下;如果我们通过修改 /etc/passwd 来添加用户时,我们可以自己创建用户的家目录,然后把 /etc/skel 下的文件复制到用户的家目录下,然后要用 chown 来改变新用户家目录的属主;

/etc/login.defs 配置文件

/etc/login.defs 文件是当创建用户时的一些规划,比如创建用户时,是否需要家目录,UID 和 GID的范围;用户的期限等等,这个文件是可以通过root来定义的;

比如 Fedora 的 /etc/logins.defs 文件内容;

# *REQUIRED*
#   Directory where mailboxes reside, _or_ name of file, relative to the
#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
#   QMAIL_DIR is for Qmail
#
#QMAIL_DIR      Maildir
MAIL_DIR        /var/spool/mail  注:创建用户时,要在目录/var/spool/mail中创建一个用户mail文件;
#MAIL_FILE      .mail

# Password aging controls:
#
#       PASS_MAX_DAYS   Maximum number of days a password may be used.
#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
#       PASS_MIN_LEN    Minimum acceptable password length.
#       PASS_WARN_AGE   Number of days warning given before a password expires.
#
PASS_MAX_DAYS   99999   注:用户的密码不过期最多的天数;
PASS_MIN_DAYS   0       注:密码修改之间最小的天数;
PASS_MIN_LEN    5       注:密码最小长度;
PASS_WARN_AGE   7       注:

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                   500  注:最小UID为500 ,也就是说添加用户时,UID 是从500开始的;
UID_MAX                 60000   注:最大UID为60000;

#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                   500   注:GID 是从500开始;
GID_MAX                 60000

#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD    /usr/sbin/userdel_local

#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is ORed with the -m flag on
# useradd command line.
#
CREATE_HOME     yes   注:是否创用户家目录,要求创建;

/etc/default/useradd 文件

通过 useradd 添加用户时的规则文件;

# useradd defaults file
GROUP=100
HOME=/home  注:把用户的家目录建在/home中;
INACTIVE=-1  注:是否启用帐号过期停权,-1表示不启用;
EXPIRE=   注:帐号终止日期,不设置表示不启用;
SHELL=/bin/bash  注:所用SHELL的类型;
SKEL=/etc/skel   注: 默认添加用户的目录默认文件存放位置;
                也就是说,当用adduser添加用户时,用户家目录下的文件,都是从这个目录中复制过去的;

4、用户管理、密码、组密码

在 linux 中为了保障系统用户的安全信息,所以将用户帐号,用户密码,用户组信息和用户组密码分开存放在不同的配置文件中的。

  1. 用户名配置文件:/etc/passwd
  2. 用户密码配置文件:/etc/shadow
  3. 用户组配置文件:/etc/group
  4. 用户组密码配置文件:/etc/gshadow

把这四个文件弄清楚,添加、删除用户和用户组可以通过修改这4个文件来完成。

用户分类

linux 用户有三类:根用户(root用户,命令提示符介面显示#)、普通用户 (命令提示符显介面示#)、虚拟用户。

  1. root用户:根用户也就是超级用户,拥有最高权限任务,任何文件权限对根用户无效,用户UID为0
  2. 普通用户:可以登陆系统,只能操作自己拥有文件权限的文件。是由系统管理员创建的。用户UID从501开始(500~60000 之间)
  3. 虚拟用户:又称伪用户,不具备系统登陆的权限,一般由系统创建或某些程序安装后创建,

用户名文件 /etc/passwd 文件结构

以上 /etc/passwd 文件的属性分解如下,共七个属性(每个属性用分号分割)

/etc/passwd 每行7个字段:账号:密码:UID:GID:账号信息说明:家目录:Shell

示例:smbuser:x:500:500::/home/smbuser:/bin/bash

对应字段:用户名:加密口令:UID:用户所属组的GID:个人信息描述:用户主目录:登陆shell

  • 1.用户名  :由字母、数字组成。必须以字母开头,区分大小写,长度不超过8个字符
  • 2.加密口令:在早期的 UNIX 版本中,用户和密码放在一起的,用户名在第一个选项位,密码在第二个选项位,后来出于账户安全的考虑,对此进行了改进,将密码另外存放,并用一个特殊字符X占用第二个密码选项位。因为 passwd 文件对所有用户都是可读的,所以为了安全起见,系统将加密口令存放于 /etc/shadow 文件中且只有超级用户才有读取权限。
  • 3.用户 UID: 标识用户的数字(root:UID为0  ,普通用户UID为500-60000之间 )
    管理员:0。其中0表示系统管理员ROOT账户。 
    一般用户1-65535(一般用户又分系统用户和普通用户)
    系统用户:1-499 (系统默认创建)。用于系统内置账户,如 nobody,bin等    
    普通用户:500-65535 (管理员创建)。500-65535普通系统本地账户,系统安装完成后,由ROOT用户创建分配给有需要接入Linux主机的使用者使用。如果因为需要,可以将普通系统本地账户的UID改为0,就样该用户就有了ROOT用户一样的权限了,但不建议这样设置。 
  • 4.用户所属组 GID:默认刚创建,主GID和用户UID相同,是主用户组,可以更改(一般组分为主用户组和附加组)用户组的 GID,用户组名保存在 /etc/group 文件中,有时为了便于权限的分配,可以将多个用户加入到同一个用户组中,对用户组分配相应权限,这样该用户组中的所有用户都同时获得了相同的权限,可以简化对每一个用户来分配权限。将用户加入其它用户组,可以在 /etc/group 文件中的用户组名后批量添加相应的用户名称便可,不需要在此进行修改。
  • 5.用户的全名信息,或描述等内容
  • 6.用户主目录:   创建普通系统帐户时会默认创建一个和用户名相同的帐户,用户登陆后默认所处的目录一般为~([root@centso-test ~])
  • 7.用户登陆后使用的 shell。虚拟用户一般该属性为空或者是 /sbin/nologin     /bin/fase 表示禁止用户登陆

用户密码文件 /etc/shadow 文件结构

(以:作为分隔符,一共有九栏)

[root@serverln tmp]# cat /etc/shadow
root:$6$hgwagXkBWGArriiQ$sajFOnZmrW2x0S6dipxvXXAJNfB1/BC0OvzjqeGZqQBVbng3aD9/CeD2j3YOnd6g2NJfPnk7zI1.9xqQ5aO6d0:16381:0:99999:7:::
bin:*:15980:0:99999:7:::
jacob:!!:16382:0:99999:7:::

字段说明:

帐号名称:密码:最近更改密码日期:密码不可被更改日期:密码需重设定日期:密码到期警告天数:密码过期后能使用的天数:帐号失效的日期:保留

  • 1 用户名
  • 2 经过加密码后的密码信息。这个才是该账号的真正的密码,不过这个密码已经加密过了,但是有些黑客还是能够解密的。所以为了安全,该文件属性设置为600,只允许root读写。
  • 3 最近改动密码的日期,该日期参数是以1970年1月1日作为第1天而累加计算出的
  • 4 密码不可改动的天数,由选项3中的日期为第1天,如果该选项参数为0,表示随时可以更改
  • 5 密码需要改动的天数,即强制用户每多少天修改密码。
  • 6 密码快要到期的前多少天提示警告信息
  • 7 密码到期后可以宽限的天数。密码过期后,在宽限天数内可以更改密码并登陆重新激活账号
  • 8 账号失效日期,在一些收费使用系统的应用中,可以设置此选项内容.
  • 9 预留选项,未使用

用户组文件 /etc/group

/etc/group 共4个字段    群组名:群组密码:GID:群组支持的群组名称(即可以加入多个群组)

[root@localhost ~]# cat /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
……

用户组的选项内容只有四个,其选项意义如下:

  1. 用户组名
  2. 用户组密码,同样经改进后,用户组密码不再保存在用户组名文件中,另存放在/etc/gshadow文件中,此选项使用字符x占位
  3. 用户组GID
  4. 用户组中包含的用户名,默认只含有同用户组名的用户,如需往用户组中添加多个用户名,可以在此选项中添加,并用逗号隔开

[root@localhost ~]# groups
root bin daemon sys adm disk wheel
[root@localhost ~]# 
以上操作,表示用户名root同时属于root,bin,daemon,sys,adm,disk,wheel等用户组中
或者 
[root@localhost ~]# groups root

用户组密码文件 /etc/gshadow

组密码文件示例:

[root@localhost etc]# cat gshadow
root:::root
bin:::root,bin,daemon
daemon:::root,bin,daemon
……
cisco:!::
huawei:!::
named:!::

用户组密码文件中的内容和用户组名文件中的内容几乎一样,因为一般很少用到需要对用户组设置密码等的操作

  1. 组名称
  2. 密码栏,同样的,开头为 ! 表示无合法密码,所以无群组管理员
  3. 群组管理员的帐号 (相关资讯在 gpasswd 中介绍)
  4. 该群组的所属帐号 (与 /etc/group 内容相同!)


5、文件、目录 的 权限


​鸟哥 Linux 的文件权限与目录配置:http://linux.vbird.org/linux_basic/0210filepermission.php
Linux中的特殊权限粘滞位(sticky bit)详解:http://www.cnblogs.com/MrListening/p/5813281.html

在Linux系统中,对每个文件和目录都有定义相应的属主和属组,以用来管理用户对文件和目录的访问和操作。。

  • chown [用户名][文件或目录] 更改文件或目录的所有者(用户),即属主
  • chgrp [用户组名][文件或目录] 更改文件或目录所属的用户组,即属组。也可以使用 "chown 用户名:用户组名(用户名.用户组名) 文件或目录" 直接对文件或目录的用户和用户组进行修改
  • chmod [ugoa][+-=][rwx] 文件或目录名,更改用户和用户组对目录或文件的访问权限,其简化操作为 chmod 755 /home/user01/ = chmod u=rwx /home/user01|chmdo g=rw /home/user01|chmod o=rw /home/user01

[root@localhost home]# ls -l
total 32
drwxr-xr-x. 30 cisco cisco 4096 Sep 10 03:52 cisco
drwx------. 4 huawei huawei 4096 Sep 8 18:54 huawei
drwx------. 2 root root 16384 Sep 3 05:17 lost+found
drwxr-xr-x. 4 nobody nobody 4096 Sep 9 20:39 samba
drwxr-xr-x. 2 root root 4096 Sep 9 01:24 share
[root@localhost home]# 

1. 第一个选项代表这个档案是‘目录、档案或连结档等等’:
    当为[ d ]则是目录,
    当为[ - ]则是档案,
    若是[ l ]则表示为链接文件(link file),目录的快捷方式
    若是[ b ]则表示为装置档里面的可供储存的周边设备(可随机存取装置);
    若是[ c ]则表示为装置档里面的序列埠设备,例如键盘、滑鼠(一次性读取装置)。 
2.表示快捷方式指向本文件或目录的数,最少是一个
3.目录或文件的所有者用户
4.目录或文件的所有组
5.目录或文件的大小,目录大小都为4096,文件大小为实际大小
6.目录或文件的最近修改日期
7.目录或文件的名称

6、综合案例

【题1.1】建立两个用户组group1和group2,以及三个用户dennis、daniel、abigale,并且将前2个用户分配在group1用户组下,后一个分配在group2用户组下

【题1.2】以dennis用户登录,创建一个Hello.java文件
【题1.3】以daniel用户登录,观察是否可以访问/home/dennis目录以及读或写其创建的Hello.java文件
【题1.4】以dennis用户登录,修改目录/home/dennis及Hello.java文件的读写权限(更正:修改目录权限的时候,应该使用770,而不是760,否则权限不足)

【题1.5】重复【题1.3】
【题1.6】改变abigale的用户组由group2变为group1

然后,可以使用cat /etc/passwd查看并确定

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 用户、用户组 ( 添加、删除、修改 ) 的相关文章

  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 在 Mono 上运行 .Net MVC5 应用程序

    我正在 Windows 上的 Visual Studio 2013 中开发 Net 4 5 1 MVC5 应用程序 现在我想知道 是否可以在Linux Ubuntu 12 04 上运行这个应用程序 可以使用OWIN吗 Owin 可以自托管运
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • 使用 gdb 调试 Linux 内核模块

    我想知道 API 在内核模块 中返回什么 从几种形式可以知道 这并不是那么简单 我们需要加载符号表来调试内核模块 所以我所做的就是 1 尝试找到内核模块的 text bss和 data段地址 2 在 gdb 中使用 add symbol f
  • 使用os.execlp时,为什么`python`需要`python`作为argv[0]

    代码是这样的 os execlp python python child py other args this works os execlp python child py other args this doesn t work 我读过
  • 我什么时候应该编写 Linux 内核模块?

    有些人出于某种原因想要将 Linux 中的代码从用户空间移动到内核空间 很多时候 原因似乎是代码应该具有特别高的优先级 或者只是 内核空间更快 这对我来说似乎很奇怪 我什么时候应该考虑编写内核模块 有一套标准吗 我怎样才能激励将代码保存在
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • 为使用 SSH.NET SshClient.CreateShellStream 执行的命令 (sudo/su) 提供子命令

    我正在尝试使用 Renci SSH NET 从 C Web 应用程序连接到远程 Linux 服务器并执行 shell 脚本 我想一个接一个地运行脚本 但不知道如何运行脚本并读取输出并将其存储在标签中 我已经尝试了下面的代码 但无法一行接一行
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 在 macOS 上使用 find 时出现“非法选项”错误

    我试图列出末尾仅带有字母 R 的文件 我用了find在 macOS 终端中如下所示 find type f name R 但我收到消息说illegal option t 第一个参数find是它应该开始寻找的路径 路径 表示当前目录 find
  • ansible unarchive 模块如何查找 tar 二进制文件?

    我正在尝试执行一个 ansible 剧本 该剧本的任务是利用unarchive模块 因为我是在 OSX 上执行此操作 所以我需要使用它gnu tar 而不是bsd tar通常与 OSX 一起提供 因为BSD tar 不受官方支持 https
  • 测试 bash shell 脚本[重复]

    这个问题在这里已经有答案了 有人可以解释一下如何测试 bash shell 脚本吗 例如 我有一个 sh 文件 其中包含此代码 bin sh for file in txt do mv file basename file txt doc
  • [A-Z] 表示 [A-Za-z] 是怎么回事?

    我已经注意到 至少在我使用的一些基于 Unix 的系统上 ls A Z 已经给了我预期的结果ls A Za z 让我无法轻松获得以大写字母开头的该死的文件列表 我刚刚遇到了同样的事情grep 我无法让它停止与小写字母匹配 A Z 直到我最终
  • 如何wget目录中最新的文件

    我想编写一个 bash 脚本来下载并安装最新的每日构建程序 RStudio 是否有可能使wget仅下载目录中最新的文件http www rstudio org download daily desktop http www rstudio
  • 使用awk将列中的值替换为txt文件中的另一个值

    我是 Linux 和 awk 脚本编写的新手 我有 tab delim txt 文件 如下所示 AAA 134 145 Sat 150 167 AAA 156 167 Sat 150 167 AAA 175 187 Sat 150 167
  • 跨 CPU 内核的 rdtsc 精度

    我从一个线程发送网络数据包 并在运行于不同 CPU 核心上的第二个线程上接收回复 我的流程测量每个数据包发送和接收之间的时间 类似于 ping 我使用 rdtsc 来获得高分辨率 低开销的计时 这是我的实现所需要的 所有测量结果看起来都很可
  • 如何找到进程启动时使用的原始用户名?

    有一个 perl 脚本需要以 root 身份运行 但我们必须确保运行该脚本的用户最初没有以用户 foo 身份登录 因为它将在脚本运行期间被删除 那么 我如何查明自登录以来可能已多次起诉的用户是否在该链中的任何时间都没有模拟过 foo 我发现
  • Bash 循环遍历具有行和列的变量

    经过几个小时的搜索测试不同的解决方案后 我尚未找到可行的解决方案 Bash 和 Shell 脚本不是我的强项 我有一个变量 其中有行 换行 和列 制表符分隔 我想要做的是循环遍历行并获取 Column X 然后将该项目放入变量中 以便我可以
  • 在 C 中运行 setuid 程序的正确方法

    我有一个权限为4750的进程 我的Linux系统中存在两个用户 root 用户和 appz 用户 该进程继承以 appz 用户身份运行的进程管理器的权限 我有两个基本惯例 void do root void int status statu

随机推荐

  • 【Linux】管道

    管道命令 include
  • 云服务器1:云服务器能干什么

    云服务器1 云服务器能干什么 云服务器能干什么 服务器是啥 就是一个24小时不断电的电脑 有linux系统 windows2003 2013 你可以用他来挂qq 挂软件 挂一切你想挂的 除了游戏 因为他本身是用来为大家提供远程信息处理服务的
  • 微信小程序组件:多图上传

    由于在小程序开发过程中多次用到图片上传功能 在最近一次项目开发时 决定将其打包成组件来提高复用性 首先 在components文件夹下 新建Component 名称为 image uploader image uploader wxml
  • 创新管理 一

    每几天一篇 业界学习知识分享 请关注 如有同感请加vip阅读 创新的动力 创新无处不在 因为都在嘴 dk 创新动力是如果不做命运基本由时间决定 我们需要传递价值 服务 我们听过 微软离倒闭只有两年 只有偏执狂才能存活下来 而道之意 既是永远
  • Spring Cloud集成ELK完成日志收集实战(elasticsearch、logstash、kibana)

    简介 对于日志来说 最常见的需求就是收集 存储 查询 展示 开源社区正好有相对应的开源项目 logstash 收集 elasticsearch 存储 搜索 kibana 展示 我们将这三个组合起来的技术称之为ELK 所以说ELK指的是Ela
  • 深入浅出SQL(8)-使用Sequel pro 链接本地的mysql

    Authentication plugin caching sha2 password cannot be loaded 今天安装了Sequel pro 想连接本地的数据库 报了个错误 不能加载插件xxx 即对身份不能验证 打开偏好设置中S
  • Python破解wifi密码

    Python破解wifi密码 文章目录 Python破解wifi密码 1 下载破解字典口令集 2 引入密码本路径和WiFi名称 3 获取网卡信息并断开所有链接 4 连接验证 5 逐行读取文本内容并执行 6 破解开始 7 懒癌独家 1 下载破
  • vscode+php8+xdebug 无法安装composer

    1 下载composer 2 安装时出现提示 xdebug 的 远程服务无法连接 Xdebug Step Debug Time out connecting to debugging client waited 200 ms Tried l
  • java从远程url文件流读取文件并下载到本地

    java从远程url文件流读取文件 且下载到本地 写个循环可实现批量 import java io import java net HttpURLConnection import java net URL public class Fil
  • Linux 块设备驱动实验

    一 块设备驱动要远比字符设备驱动复杂得多 不同类型的存储设备又对应不同的驱动子系统 本章我们重点学习一下块设备相关驱动概念 不涉及到具体的存储设备 1 什么是块设备 块设备是针对存储设备的 比如 SD 卡 EMMC NAND Flash N
  • IDEA去除代码中的波浪线(黄色警告线)

    IDEA去除代码中的波浪线 黄色警告线 IDEA中为了减少一定量的重复代码 提醒开发人员注意 会在代码下面出现黄色警告线 但是有时候几行代码的重复没必要扔到一个统一的地方处理 这里还总是提醒 干扰视线 因此 这里根据个人习惯 还是关闭这个功
  • Item-Based Recommendations with Hadoop

    Mahout在MapReduce上实现了Item Based Collaborative Filtering 这里我尝试运行一下 安装Hadoop 从下载Mahout并解压 准备数据 下载1 Million MovieLens Datase
  • Codeforces Round #674 B. Symmetric Matrix(水题)

    题目地址 传送门 题目贴上 题意 给你n种 2x2的矩阵 并且每种矩阵可以无限次使用 问你是否能组成mxm的矩阵 新矩阵必须是严格按照主对角线对称矩阵 思路 首先给你的2x2矩阵 很明显我们不能拼成奇数长宽的矩阵 所以如果m为奇数 直接输出
  • Abstract Class(抽象类)& Abstract Method(抽象方法)

    java中的Abstract Class 抽象类 Abstract Method 抽象方法 Abstract Class 在面向对象的概念中 所有的对象都是通过类来描绘的 但是反过来 并不是所有的类都是用来描绘对象的 如果一个类中没有包含足
  • ZeroTier的planet文件格式分析

    C ProgramData ZeroTier One planet 文件格式 1个字节的类型 TYPE PLANET 1 TYPE MOON 127 8字节的ID 8字节的ts ZT C25519 PUBLIC KEY LEN 64字节的公
  • idea习惯配置记录

    idea 2021 git设置本地文件显示 链接 Settings Preferences Version Control Commit将Use non modal commit interface 取消选中的 use non modal
  • Android 11 锁屏界面 去掉下拉状态栏

    在目录 frameworks base packages SystemUI src com android systemui statusbar phone NotificationPanelViewController java 修改如下
  • 攻防世界-web- lottery

    lottery 41最佳Writeup由 清风77 提供WriteUP 收藏 反馈 难度 3 方向 Web 题解数 17 解出人数 5217 题目来源 XCTF 题目描述 暂无 题目附件 下载附件 题目场景 http 61 147 171
  • 2023哈工大软件工程考研

    0 考研成绩 初试成绩 395 政治 英语一 数学一 专业课 总分 71 76 130 118 395 复试成绩 251 综合测试118 面试133 排名 软专1 12 本部7 83 一校三区33 262 一切都拉下帷幕了 从去年二月到今年
  • Linux 用户、用户组 ( 添加、删除、修改 )

    Linux 使用者管理 http cn linux vbird org linux basic linux basic php part4 鸟哥官网 简体中文 http cn linux vbird org linux basic linu