赞
踩
Linux 使用者管理:http://cn.linux.vbird.org/linux_basic/linux_basic.php#part4
鸟哥官网(简体中文):https://linux.vbird.org/linux_basic/centos7/
Linux 中将用户添加到组的指令:https://cnzhx.net/blog/linux-add-user-to-group/
Linux 是一个多用户、多任务的操作系统。
单用户多任务、多用户多任务 概念;
用户的角色区分:用户在系统中是分角色的,在 Linux 系统中,由于角色不同,权限和所完成的任务也不同;用户的角色是通过 UID 和识别的,特别是UID;在系统管理中,系统管理员一定要坚守UID 唯一的特性;
多用户操作系统的安全
Linux 是多用户操作系统,所以可以在 Linux 系统中建若干用户(user)。比如:我们的同事想用我的计算机,但我不想让他用我的用户名登录,因为我的用户名下有不想让别人看到的资料和信息(也就是隐私内容)这时我就可以给他建一个新的用户名,让他用我所开的用户名去折腾,这从计算机安全角度来说是符合操作规则的;
当然用户(user)的概念理解还不仅仅于此,在 Linux 系统中还有一些用户是用来完成特定任务的,比如 nobody 和 ftp 等,我们访问 LinuxSir.Org 的网页程序,就是 nobody 用户;我们匿名访问 ftp 时,会用到用户 ftp 或 nobody ;
如果您想了解 Linux 系统的一些帐号,请查看文件:/etc/passwd
用户组(group)就是具有相同特征的用户(user)的集合体;比如:有时要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时就需要用户组,把用户都定义到同一用户组,通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限。
Unix系统通过进程的有效用户ID和有效用户组ID来决定进程对系统资源的访问权限。
Unix高级编程第八章提到实际用户和有效用户,那么这两个用户到底是什么,它们之间有什么区别呢?
实际用户 和 有效用户 区别
一般情况下,有效用户 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 才能访问的资源了
先看看下面两个的权限是什么
非常奇怪,/tmp 目录和 passwd 文件的权限怎么怪怪的,怎么有 s 和 t 权限。
当 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,以达到修改自己密码的权限
当 s 出现在 " 目录或文件所属群的x权限 " 上时,此时就称为 SET GID,简称 SGID。
那 SGID 对文件和目录分部有哪些功能呢?
SGID 对 目录
1. 使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录
2. 使用者在此目录下的群组将会变成该目录的群组
3. 若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同
SGID 对 文件
1. SGID 对二进制可执行文件有效
2. 程序执行者对于该文件来说,需具备 x 的权限
3. 执行者在执行的过程中,将会获得该文件群组的支援(用于改文件群组的权限)
当 s 出现在目录其他用户的x权限上时,此时就称为 Sticky Bit 简称SBIT。
那 SBIT 有哪些限制和作用呢?
1. 仅对目录有效,对文件无效
2. 当使用者在该目录下建立文件或目录时(有权限的情况下),仅自己与 root 才有权力删除新建的目录或文件
我们知道 /tmp 目录是这样的权限。
现在我们来验证下,先用 root 账号在 tmp 文件中创建一个文件 test,然后用 openstack (其他账号) 进入该目录,删除 test 文件,看看发生什么情况
我们看到这样是不能删除文件的。因为 /temp 目录有 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 标志
su :切换用户(su 和 su - 这两个切换用户命令是有区别的。)
sudo (superuser do) 命令是一个命令行程序,它允许用户以 root 用户身份执行命令,而不需要知道 root 的密码,并能把输入输出写入日志 ( /var/log/auth.log 文件记录了执行的所有命令和参数 )。sudo 也是一种权限管理机制,它允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,能做什么不能做什么都是通过安全策略来指定的。默认的安全策略记录在 /etc/sudoers 文件中,而安全策略可能需要用户通过密码来验证他们自己。也就是在用户执行 sudo 命令时要求用户输入自己账号的密码。如果验证失败,sudo 命令将会退出。
虽然有点类似于 su 命令,但 sudo 的不同之处在于它默认需要用户的密码进行身份验证,而不是 su 需要的目标用户的密码。sudo 也不会产生 root shell;相反,它以提升的权限运行程序或命令,不像 su,它产生一个 root shell。
使用 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
系统默认创建了一个名为 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 列出用户的权限
最小权限原则是一种信息和计算机安全概念,它认为授予程序和用户执行任务所需的最少或最低限度的权限。
root 账户下所有命令都有最高权限,也就是相当于所有命令都默认加了 sudo。
以 root 用户登录后,输入到终端的每一条命令都以系统最高权限运行,违反了最小权限原则。
Sudo 提供细粒度的访问控制。它仅向需要它的特定程序授予提升的权限。您知道哪个程序以提升的权限运行,而不是使用 root shell(以 root 权限运行每个命令)。
Sudo 也可以配置为以另一个用户身份运行命令,指定允许哪些用户和组使用 sudo 运行命令,或者通过编辑 sudoers 文件设置以 root 权限运行程序的超时。
因此,不建议使用 root shell 运行命令,因为您破坏系统的机会要高得多。如果您需要更高权限或 root 权限来运行命令,请使用 sudo 确保只有该命令以 root 权限运行。
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 -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 useradduser --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 useradduser --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 使用文件作为配置文件
在创建用户时,需要为新建用户指定一用户组,如果不指定其用户所属的工作组,自动生成一个同名同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 phpquseradd 用户名 // 创建一个新用户
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 命令来修改和设置账户的各项属性,包括登录名,主目录,用户组,登录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 usernamegpasswd -a test test2 //将用户test加入到test2组
gpasswd -d test test2 //将用户test从test2组中移出#查看某用户所属组
groups username
更多选项参看: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 帐户名
帐户密码被删除后,将不能登录系统,除非重新设置密码。
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文件;
涉及命令:
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 目录一般是存放用户启动文件的目录,这个目录是由 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 文件是当创建用户时的一些规划,比如创建用户时,是否需要家目录,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 注:是否创用户家目录,要求创建;
通过 useradd 添加用户时的规则文件;
# useradd defaults file
GROUP=100
HOME=/home 注:把用户的家目录建在/home中;
INACTIVE=-1 注:是否启用帐号过期停权,-1表示不启用;
EXPIRE= 注:帐号终止日期,不设置表示不启用;
SHELL=/bin/bash 注:所用SHELL的类型;
SKEL=/etc/skel 注: 默认添加用户的目录默认文件存放位置;
也就是说,当用adduser添加用户时,用户家目录下的文件,都是从这个目录中复制过去的;
在 linux 中为了保障系统用户的安全信息,所以将用户帐号,用户密码,用户组信息和用户组密码分开存放在不同的配置文件中的。
把这四个文件弄清楚,添加、删除用户和用户组可以通过修改这4个文件来完成。
linux 用户有三类:根用户(root用户,命令提示符介面显示#)、普通用户 (命令提示符显介面示#)、虚拟用户。
以上 /etc/passwd 文件的属性分解如下,共七个属性(每个属性用分号分割)
/etc/passwd 每行7个字段:账号:密码:UID:GID:账号信息说明:家目录:Shell
示例:smbuser:x:500:500::/home/smbuser:/bin/bash
对应字段:用户名:加密口令:UID:用户所属组的GID:个人信息描述:用户主目录:登陆shell
(以:作为分隔符,一共有九栏)
[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:::
字段说明:
帐号名称:密码:最近更改密码日期:密码不可被更改日期:密码需重设定日期:密码到期警告天数:密码过期后能使用的天数:帐号失效的日期:保留
/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
……
用户组的选项内容只有四个,其选项意义如下:
[root@localhost ~]# groups
root bin daemon sys adm disk wheel
[root@localhost ~]#
以上操作,表示用户名root同时属于root,bin,daemon,sys,adm,disk,wheel等用户组中
或者
[root@localhost ~]# groups root
组密码文件示例:
[root@localhost etc]# cat gshadow
root:::root
bin:::root,bin,daemon
daemon:::root,bin,daemon
……
cisco:!::
huawei:!::
named:!::
用户组密码文件中的内容和用户组名文件中的内容几乎一样,因为一般很少用到需要对用户组设置密码等的操作
鸟哥 Linux 的文件权限与目录配置:http://linux.vbird.org/linux_basic/0210filepermission.php
Linux中的特殊权限粘滞位(sticky bit)详解:http://www.cnblogs.com/MrListening/p/5813281.html
在Linux系统中,对每个文件和目录都有定义相应的属主和属组,以用来管理用户对文件和目录的访问和操作。。
[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.目录或文件的名称
【题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查看并确定
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。