查看“初识Linux:用户管理”的源代码
←
初识Linux:用户管理
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Linux]] == 用户管理 == * 尽量少用root,避免操作失误。可以用普通用户登录,在特殊操作时用“su -”(“su - root”)切换为系统管理员。 实现用户账号的管理,要完成的工作主要有如下几个方面: # 用户账号的添加、删除与修改。 # 用户口令的管理。 # 用户组的管理。 {| class="wikitable" ! 命令 !! 说明 |- ! colspan="2"| 账号管理 |- | useradd [选项] 用户名 | 添加用户账号:就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。 * Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。 选项: # -c:(comment)指定一段注释性描述。 # -d:(目录)指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。 # -g:(用户组)指定用户所属的用户组。 # -G:(用户组)指定用户所属的附加组。 # -s:(Shell文件)指定用户的登录Shell。 # -u:(用户号)指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。 |- | userdel [选项] 用户名 | 删除用户账号:就是要将/etc/passwd等系统文件中的该用户记录删除 选项: # -r:把用户的主目录一起删除 |- | usermod [选项] 用户名 | 修改用户账号:就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。 选项:(同useradd) # -c: # -d: # -g: # -G: # -s: # -u: |- ! colspan="2"| 口令管理 |- | passwd [选项] 用户名 | 用户账号刚创建时没有口令,被系统锁定无法使用,必须为其指定口令后才可以使用,即使是指定空口令。 选项: # -l:锁定口令,即禁用账号。 # -u:口令解锁。 # -d:使账号无口令。 # -f:强迫用户下次登录时修改口令。 * “passwd”:修改当前用户的口令 * 普通用户只能修改自己口令,且修改时需要原始口令 |- ! colspan="2"| 用户组管理 |- | groupadd [选项] 用户组 | 增加用户组 选项: # -g:指定新用户组的组标识号(GID),不指定时在当前已有的最大组标识号的基础上加1为GID。 # -o:一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。 |- | groupdel 用户组 | 删除用户组 |- | groupmod [选项] 用户组 | 修改用户组属性 选项: # -g:为用户组指定新的组标识号。 # -o:与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。 # -n:将用户组的名字改为新名字 |} * 如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限: *: <syntaxhighlight lang="bash"> newgrp root </syntaxhighlight> *: 将当前用户切换到root用户组 == 伪用户(pseudo users)== 系统中有一类用户称为伪用户(pseudo users),这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。<br/> 常见的伪用户如下所示: {| class="wikitable" ! 伪用户 !! 含义 |- | bin || 拥有可执行的用户命令文件 |- | sys || 拥有系统文件 |- | adm || 拥有帐户文件 |- | uucp || UUCP使用 |- | lp || lp或lpd子系统使用 |- | nobody || NFS使用 |} == 与用户账号有关的系统文件 == 完成用户管理的工作有许多种方法,但是每一种方法实际上都是对有关的系统文件进行修改。<br/> 与用户和用户组相关的信息都存放在一些系统文件中,包括:'''/etc/passwd''', '''/etc/shadow''', '''/etc/group'''等。 === /etc/passwd 文件 === Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。<br/> 这个文件对所有用户都是可读的。它的内容类似下面的例子: <syntaxhighlight lang="properties"> # cat /etc/passwd root:x:0:0:Superuser:/: daemon:x:1:1:System daemons:/etc: bin:x:2:2:Owner of system commands:/bin: sys:x:3:3:Owner of system files:/usr/sys: adm:x:4:4:System accounting:/usr/adm: uucp:x:5:5:UUCP administrator:/usr/lib/uucp: auth:x:7:21:Authentication administrator:/tcb/files/auth: cron:x:9:16:Cron daemon:/usr/spool/cron: listen:x:37:4:Network daemon:/usr/net/nls: lp:x:71:18:Printer administrator:/usr/spool/lp: sam:x:200:50:Sam san:/home/sam:/bin/sh </syntaxhighlight> 每一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下: <syntaxhighlight lang="properties"> 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell </syntaxhighlight> {| class="wikitable" ! 字段 !! 说明 |- | 用户名 | 是代表用户账号的字符串 # 通常长度不超过8个字符,由大小写字母和/或数字组成 # 登录名中不能有冒号(:),因为冒号在这里是分隔符 # 为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。 |- | 口令 | 存放着加密后的用户口令字,或特殊的占位字符(“x”、“*”等)。 由于/etc/passwd文件对所有用户都可读带来的隐患。许多Linux系统都使用了shadow技术:<br/> 把真正的加密后的用户口令字存放到'''/etc/shadow'''文件中,<br/> 而在/etc/passwd文件的口令字段中只存放一个特殊的字符。 |- | 用户标识号 | 是一个整数,系统内部用它来标识用户。 一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,<br/> 但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等 # 通常用户标识号的取值范围是0~65535 # 0是超级用户root的标识号 # 1~99由系统保留,作为管理账号 # 普通用户的标识号从100开始 * 在Linux系统中,这个界限是500 |- | 组标识号 | 记录的是用户所属的用户组 * 对应着'''/etc/group'''文件中的一条记录 |- | 注释性描述 | 记录着用户的一些个人情况 例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。 |- | 主目录 | 用户的起始工作目录,它是用户在登录到系统之后所处的目录。 |- | 登录Shell | <pre> 用户登录后,要启动一个进程,负责将用户的操作传给内核, 这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。 </pre> Shell是用户与Linux系统之间的接口。<br/> 常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。<br/> * 如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为“/bin/sh”。 |} === /etc/shadow 文件 === /etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生,超级用户才拥有该文件读权限,这就保证了用户密码的安全性。<br/> 内容如下: <syntaxhighlight lang="properties"> # cat /etc/shadow root:Dnakfw28zf38w:8764:0:168:7::: daemon:*::0:0:::: bin:*::0:0:::: sys:*::0:0:::: adm:*::0:0:::: uucp:*::0:0:::: nuucp:*::0:0:::: auth:*::0:0:::: cron:*::0:0:::: listen:*::0:0:::: lp:*::0:0:::: sam:EkdiSECLWPdSa:9740:0:0:::: </syntaxhighlight> 文件格式与/etc/passwd类似,由若干个字段组成,字段之间用":"隔开: <syntaxhighlight lang="properties"> 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志 </syntaxhighlight> {| class="wikitable" ! 字段 !! 说明 |- | 登录名 | (同上) |- | 口令 | 加密后的用户口令字,长度为13个字符。 * 如果为空,则对应用户没有口令,登录时不需要口令; * 如果含有不属于集合 { ./0-9A-Za-z }中的字符,则对应的用户不能登录。 |- | 最后一次修改时间 | 表示的是从某个时刻起,到用户最后一次修改口令时的天数 |- | 最小时间间隔 | 指的是两次修改口令之间所需的最小天数 |- | 最大时间间隔 | 指的是口令保持有效的最大天数 |- | 警告时间 | 从系统开始警告用户到用户密码正式失效之间的天数 |- | 不活动时间 | 用户没有登录活动但账号仍能保持有效的最大天数 |- | 失效时间 | 给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。 期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。 |} === /etc/group 文件 === 用户组是Linux 系统中对用户进行管理及控制访问权限的一种手段。<br/> 用户与组之间是多对多的关系: * 在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。 * 用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。 内容如下: <syntaxhighlight lang="properties"> root::0:root bin::2:root,bin sys::3:root,uucp adm::4:root,adm daemon::5:root,daemon lp::7:root,lp users::20:root,sam </syntaxhighlight> 格式也类似于/etc/passwd文件,由冒号(:)隔开若干个字段: <syntaxhighlight lang="properties"> 组名:口令:组标识号:组内用户列表 </syntaxhighlight> {| class="wikitable" ! 字段 !! 说明 |- | 组名 | 用户组的名称。 与/etc/passwd中的登录名一样,组名不应重复 |- | 口令 | 用户组加密后的口令字。 一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是* |- | 组标识号 | 系统内部用来标识组。 |- | 组内用户列表 | 属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。 |} == 添加批量用户 == Linux系统提供了批量创建用户的工具,使用步骤如下: # 创建用户信息文本user.txt: #: 每一列按照/etc/passwd密码文件的格式书写 #: 每个用户的用户名、UID、宿主目录都不可以相同 #: 密码栏可以留做空白或输入x号 #: <syntaxhighlight lang="properties"> user001::600:100:user:/home/user001:/bin/bash user002::601:100:user:/home/user002:/bin/bash user003::602:100:user:/home/user003:/bin/bash user004::603:100:user:/home/user004:/bin/bash user005::604:100:user:/home/user005:/bin/bash user006::605:100:user:/home/user006:/bin/bash </syntaxhighlight> # 以root身份执行命令'''/usr/sbin/newusers''',并从user.txt中导入数据,创建用户: #: <syntaxhighlight lang="bash"> # newusers < user.txt </syntaxhighlight> #: 然后执行命令 vipw 或 vi /etc/passwd 检查是否已经出现这些用户的数据,且对应宿主目录是否已经创建 # 执行命令'''/usr/sbin/pwunconv''':将 /etc/shadow 产生的 shadow 密码解码,然后回写到 /etc/passwd 中,并将/etc/shadow的shadow密码栏删掉 #: 即为了方便下一步的密码转换工作,先取消 shadow password 功能。 #: <syntaxhighlight lang="bash"> # pwunconv </syntaxhighlight> # 编辑每个用户的密码对照文件: #: 格式为: #: <syntaxhighlight lang="properties"> 用户名:密码 </syntaxhighlight> #: 如“passwd.txt ”: #: <syntaxhighlight lang="properties"> user001:123456 user002:123456 user003:123456 user004:123456 user005:123456 user006:123456 </syntaxhighlight> # 以 root 身份执行命令'''/usr/sbin/chpasswd''': #: chpasswd 会将经过 /usr/bin/passwd 命令编码过的密码写入 /etc/passwd 的密码栏 #: <syntaxhighlight lang="bash"> # chpasswd < passwd.txt </syntaxhighlight> # (确定密码经编码写入/etc/passwd的密码栏后)执行命令'''/usr/sbin/pwconv'''将密码编码为 shadow password,并将结果写入/etc/shadow #: <syntaxhighlight lang="bash"> # pwconv </syntaxhighlight> == 权限 == chmod 用于改变目录或文件的权限。如,修改文件abc的权限: # chmod 775 abc:赋予用户读写执行、用户组读执行、其他组读执行权限 # chmod u=rwx,g=rx,o=rx abd:(同上) # chmod u-x,g+w abc:去除用户的执行权限、增加用户组的写权限 # chmod a+r abc:为用户、用户组、其他组,都增加读权限 chown 用于改变目录或文件的所有者: # chown www abc: # chown www ./abc: # chown -R root ./abc:改变目录及其子目录的所属用户为root chgrp 用于改变用户的所属组: # chgrp root abc:
返回至“
初识Linux:用户管理
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息