linux-用户-组-权限

user-group-linux

reference

常用

本文总结了Linux添加或者删除用户和用户组时常用的一些命令和参数.

建用户

example-01

$ useradd –d /usr/sam -m sam
# 此命令创建了一个用户sam, 
# 其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录).
# 要想自动生成目录, 必须有 -m 选项. 

example-02

$ useradd -s /bin/sh -g group –G adm,root -d /usr/gemHome -m gem
此命令新建了一个用户gem, 该用户的登录Shell是/bin/sh, 它属于group用户组, 同时又属于adm和root用户组, 其中group用户组是其主组. 
adduser phpq               # 新建phpq用户
passwd phpq                # 给phpq用户设置密码

建工作组

groupadd test             # 新建test工作组

新建用户同时增加工作组

useradd -g test phpq           
# 新建phpq用户并增加到test工作组
# -g 所属组 -d 家目录 -s 所用的SHELL

给已有的用户增加工作组

usermod -G groupname username (这个会把用户从其他组中去掉)

usermod -a groupname username

或者:gpasswd -a user group

如果添加了用户, 添加了组, 然后使这个组里的人都可以sudo 到公共账号下

可以/etc/sudoers.d 下面建立一个文件内容如下 , 就可以是etl组的所有用户都可以无密码的切到etl用户下.

%etl ALL=(ALL) NOPASSWD: /bin/su etl
%etl ALL=(ALL) NOPASSWD: /bin/su - etl

sudo 具体参考 http:# www.cnblogs.com/xd502djj/p/6641475.html

临时关闭

在/etc/shadow文件中属于该用户的行的第二个字段(密码)前面加上就可以了. 想恢复该用户, 去掉即可.

或者使用如下命令关闭用户账号:
passwd peter –l

重新释放:
passwd peter –u

永久性删除用户账号

userdel peter

groupdel peter

usermod –G peter peter (强制删除该用户的主目录和主目录下的所有文件和子目录)

从组中删除用户

编辑/etc/group 找到GROUP1那一行, 删除 A
或者用命令
gpasswd -d A GROUP

显示用户信息

id user
cat /etc/passwd

Examples

不同的命令来查看群组选项的用法

$ sudo useradd tester1

没有使用任何群组相关的参数, 默认在创建用户 tester1 的同时会创建一个同名的群组. 用户 tester1 的初始群组就是这个新建的群组.

$ sudo useradd tester2 -N

这次我们使用了 -N 选项, 即不要生成与用户同名的群组.

查看下 /etc/passwd 文件, 发现 tester2 用户的初始群组ID是100. 这个100是哪来的?有ID为100的群组吗?其实100作为 -N 的默认值是写在配置文件中的. 不管有没有ID为100的群组, 都是这个值. 当然我们也可以通过修改配置文件来改变这个默认值!

$ sudo useradd tester3 -g sudo

sudo 是一个非常有权势的群组, 我决定把 tester3 加入到这个群组.

现在去查看一下 /etc/passwd 和 /etc/group 文件, 看看有没有新的群组被创建? tester3 的初始群组又是谁?这次没有创建与 tester3 同名的群组. 用户 tester3 的初始群组变成了 sudo.

$ sudo useradd tester4 -G sudo

和上一条命令相比我们只是把小写的g替换成了大写的G.

但结果可相差太多了, 请您一定要好好的检查 /etc/passwd 和 /etc/group 文件. 因为这次不仅创建了群组 tester4, 它还是用户 tester4 的初始群组. 和tester1 的唯一不同是 tester4 被加入了 sudo 群组.

在实际的使用中, tester3 和 tester4 的场景都是比较常见的, 需要根据实际情况进行区分.

家目录

Useradd 命令对用户家目录的处理让人困惑, 下面我们将通过实验来了解家目录相关的不同选项的使用方法:

$ sudo useradd tester1

让我们重新看看创建用户 tester1 这条命令. 它不会为用户 tester1 创建名为 tester1 的目录作为家目录, 但是我们打开 /etc/passwd 文件, 发现 tester1 的记录中居然包含了家目录 /home/tester1.

$ tester1:x:1005:1005::/home/tester1:

这让人不可思议, 但这条命令确实是这么实现的.

$ sudo useradd -m tester5

若要在创建用户的同时创建用户的家目录, 必须指定 -m 选项

$ sudo useradd -d /home/abc tester6

我们希望自己指定家目录, 此时不生成目录 abc

$ sudo useradd -d /home/abcd -m tester7

此时生成目录 abcd, 并且目录下默认存在文件

常见用例

Case 1: 创建一个带有家目录并且可以登录 bash 的用户

$ sudo useradd -m -s /bin/bash tester1

Case 2: 指定创建用户家目录的路径

$ sudo useradd -m -d /home/xxx tester2
# /home/xxx目录会被创建. 

Case 3: 创建一个没有家目录且不能登录的用户

$ sudo useradd -s /sbin/nologin tester3

Case 4: 创建时把用户加入不同的用户组

$ sudo useradd -m -G xxx,sudo tester4

注意过个组名使用逗号分隔, 不能有空格.

初始群组

什么是初始群组?简单来说在 /etc/passwd 文件中, 每行的第四个字段指定的就是用户的初始群组. 用户登录后立即就拥有了初始群组中的权限

选项与参数

  • -c:加上备注文字, 备注文字保存在passwd的备注栏中.
  • -d:指定用户登入时的主目录, 替换系统默认值/home/<用户名>
  • -D:变更预设值.
  • -e:指定账号的失效日期, 日期格式为MM/DD/YY, 例如06/30/12. 缺省表示永久有效.
  • -f:指定在密码过期后多少天即关闭该账号. 如果为0账号立即被停用;如果为-1则账号一直可用. 默认值为-1.
  • -g:指定用户所属的群组. 值可以使组名也可以是GID. 用户组必须已经存在的, 期默认值为100, 即users.
  • -G:指定用户所属的附加群组.
  • -m:自动建立用户的登入目录. 加-m 如果主目录不存在则自动创建
  • -M:不要自动建立用户的登入目录.
  • -n:取消建立以用户名称为名的群组.
  • -r:建立系统账号.
  • -s:指定用户登入后所使用的shell. 默认值为/bin/bash.
  • -u:指定用户ID号. 该值在系统中必须是唯一的. 0~499默认是保留给系统用户账号使用的, 所以该值必须大于499.
  • -g vs. -G ::= -g<群组> 初始群组; -G<群组> 非初始群组.

user配置文件

/etc/passwd # 用户(user)的配置文件
/etc/shadow # 用户(user)影子口令文件

group配置文件

/etc/group # 用户组(group)配置文件
/etc/gshadow # 用户组(group)的影子文件

user管理工具

  • useradd # 添加用户
  • adduser # 添加用户
  • passwd # 为用户设置密码
  • usermod # 修改用户命令, 可以通过usermod 来修改登录名、用户的家目录等等
  • 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 # 更改用户信息工具
  • su # 用户切换工具
  • sudo # sudo 是通过另一个用户来执行命令(execute a command as another user), su 是用来切换用户, 然后通过切换到的用户来完成相应的任务, 但sudo 能后面直接执行命令, 比如sudo 不需要root 密码就可以执行root 赋与的执行只有root才能执行相应的命令;但得通过visudo 来编辑/etc/sudoers来实现
  • visudo # visodo 是编辑 /etc/sudoers 的命令;也可以不用这个命令, 直接用vi 来编辑 /etc/sudoers 的效果是一样的
  • sudoedit # 和sudo 功能差不多

group管理工具

  • groupadd # 添加用户组
  • groupdel # 删除用户组
  • groupmod # 修改用户组信息
  • groups # 显示用户所属的用户组
  • grpck
  • grpconv # 通过/etc/group和/etc/gshadow 的文件内容来同步或创建/etc/gshadow , 如果/etc/gshadow 不存在则创建
  • grpunconv # 通过/etc/group 和/etc/gshadow 文件内容来同步或创建/etc/group , 然后删除gshadow文件

/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添加用户时, 用户家目录下的文件, 都是从这个目录中复制过去的; 

用户, 任务, 安全

、理解Linux的单用户多任务, 多用户多任务概念

Linux 是一个多用户、多任务的操作系统;我们应该了解单用户多任务和多用户多任务的概念

Linux 的单用户多任务

单用户多任务;比如我们以beinan 登录系统, 进入系统后, 我要打开gedit 来写文档, 但在写文档的过程中, 我感觉少点音乐, 所以又打开xmms 来点音乐;当然听点音乐还不行, MSN 还得打开, 想知道几个弟兄现在正在做什么, 这样一样, 我在用beinan 用户登录时, 执行了gedit 、xmms以及msn等, 当然还有输入法fcitx ;这样说来就有点简单了, 一个beinan用户, 为了完成工作, 执行了几个任务;当然beinan这个用户, 其它的人还能以远程登录过来, 也能做其它的工作.

Linux 的多用户、多任务

有时可能是很多用户同时用同一个系统, 但并不所有的用户都一定都要做同一件事, 所以这就有多用户多任务之说

举个例子, 比如LinuxSir.Org 服务器, 上面有FTP 用户、系统管理员、web 用户、常规普通用户等, 在同一时刻, 可能有的弟兄正在访问论坛;有的可能在上传软件包管理子站, 比如luma 或Yuking 兄在管理他们的主页系统和FTP ;在与此同时, 可能还会有系统管理员在维护系统;浏览主页的用的是nobody 用户, 大家都用同一个, 而上传软件包用的是FTP用户;管理员的对系统的维护或查看, 可能用的是普通帐号或超级权限root帐号;不同用户所具有的权限也不同, 要完成不同的任务得需要不同的用户, 也可以说不同的用户, 可能完成的工作也不一样

值得注意的是:多用户多任务并不是大家同时挤到一接在一台机器的的键盘和显示器前来操作机器, 多用户可能通过远程登录来进行, 比如对服务器的远程控制, 只要有用户权限任何人都是可以上去操作或访问的

用户的角色区分

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

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

多用户操作系统的安全

多用户系统从事实来说对系统管理更为方便. 从安全角度来说, 多用户管理的系统更为安全, 比如beinan用户下的某个文件不想让其它用户看到, 只是设置一下文件的权限, 只有beinan一个用户可读可写可编辑就行了, 这样一来只有beinan一个用户可以对其私有文件进行操作, Linux 在多用户下表现最佳, Linux能很好的保护每个用户的安全, 但我们也得学会Linux 才是, 再安全的系统, 如果没有安全意识的管理员或管理技术, 这样的系统也不是安全的.

从服务器角度来说, 多用户的下的系统安全性也是最为重要的, 我们常用的Windows 操作系统, 它在系纺权限管理的能力只能说是一般般, 根本没有没有办法和Linux或Unix 类系统相比

用户(user)和用户组(group)

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

用户(user)的概念

通过前面对Linux 多用户的理解, 我们明白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用户组成员
  • 多对多:多个用户对应多个用户组, 并且几个用户可以是归属相同的组;其实多对多的关系是前面三条的扩展;理解了上面的三条, 这条也能理解
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章