adduser.8 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483
  1. .\" Copyright (c) 1995-1996 Wolfram Schneider <wosch@FreeBSD.org>. Berlin.
  2. .\" All rights reserved.
  3. .\" Copyright (c) 2002-2004 Michael Telahun Makonnen <mtm@FreeBSD.org>
  4. .\" All rights reserved.
  5. .\"
  6. .\" Redistribution and use in source and binary forms, with or without
  7. .\" modification, are permitted provided that the following conditions
  8. .\" are met:
  9. .\" 1. Redistributions of source code must retain the above copyright
  10. .\" notice, this list of conditions and the following disclaimer.
  11. .\" 2. Redistributions in binary form must reproduce the above copyright
  12. .\" notice, this list of conditions and the following disclaimer in the
  13. .\" documentation and/or other materials provided with the distribution.
  14. .\"
  15. .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  16. .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  17. .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  18. .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  19. .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  20. .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  21. .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  22. .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  23. .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  24. .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  25. .\" SUCH DAMAGE.
  26. .\"
  27. .Dd April 11, 2024
  28. .Dt ADDUSER 8
  29. .Os
  30. .Sh NAME
  31. .Nm adduser
  32. .Nd command for adding new users
  33. .Sh SYNOPSIS
  34. .Nm
  35. .Op Fl CDENSZhq
  36. .Op Fl G Ar groups
  37. .Op Fl L Ar login_class
  38. .Op Fl M Ar mode
  39. .Op Fl d Ar partition
  40. .Op Fl f Ar file
  41. .Op Fl g Ar login_group
  42. .Op Fl k Ar dotdir
  43. .Op Fl m Ar message_file
  44. .Op Fl s Ar shell
  45. .Op Fl u Ar uid_start
  46. .Op Fl w Ar type
  47. .Sh DESCRIPTION
  48. The
  49. .Nm
  50. utility is a shell script, implemented around the
  51. .Xr pw 8
  52. command, for adding new users.
  53. It creates passwd/group entries, a home directory,
  54. copies dotfiles and sends the new user a welcome message.
  55. On systems where the parent of home directory is a ZFS dataset,
  56. .Nm
  57. will create the home directory as a ZFS dataset by default,
  58. unless the system administrator specified otherwise.
  59. It supports two modes of operation.
  60. It may be used interactively
  61. at the command line to add one user at a time, or it may be directed
  62. to get the list of new users from a file and operate in batch mode
  63. without requiring any user interaction.
  64. .Sh RESTRICTIONS
  65. .Bl -tag -width indent
  66. .It username
  67. Login name.
  68. The user name is restricted to whatever
  69. .Xr pw 8
  70. will accept.
  71. Generally this means it
  72. may contain only lowercase characters or digits but cannot begin with the
  73. .Ql -
  74. character.
  75. Maximum length
  76. is 16 characters.
  77. The reasons for this limit are historical.
  78. Given that people have traditionally wanted to break this
  79. limit for aesthetic reasons, it has never been of great importance to break
  80. such a basic fundamental parameter in
  81. .Ux .
  82. You can change
  83. .Dv UT_NAMESIZE
  84. in
  85. .In utmp.h
  86. and recompile the
  87. world; people have done this and it works, but you will have problems
  88. with any precompiled programs, or source that assumes the 8-character
  89. name limit, such as NIS.
  90. The NIS protocol mandates an 8-character username.
  91. If you need a longer login name for e-mail addresses,
  92. you can define an alias in
  93. .Pa /etc/mail/aliases .
  94. .It "full name"
  95. This is typically known as the gecos field and usually contains
  96. the user's full name.
  97. Additionally, it may contain a comma separated
  98. list of values such as office number and work and home phones.
  99. If the
  100. name contains an ampersand it will be replaced by the capitalized
  101. login name when displayed by other programs.
  102. The
  103. .Ql \&:
  104. character is not allowed.
  105. .It shell
  106. Unless the
  107. .Fl S
  108. argument is supplied only valid shells from the shell database
  109. .Pq Pa /etc/shells
  110. are allowed.
  111. In addition,
  112. either the base name or the full path of the shell may be supplied.
  113. .It UID
  114. Automatically generated or your choice.
  115. It must be less than 32000.
  116. .It "GID/login group"
  117. Automatically generated or your choice.
  118. It must be less than 32000.
  119. .It password
  120. You may choose an empty password, disable the password, use a
  121. randomly generated password or specify your own plaintext password,
  122. which will be encrypted before being stored in the user database.
  123. .El
  124. .Sh UNIQUE GROUPS
  125. Perhaps you are missing what
  126. .Em can
  127. be done with this scheme that falls apart
  128. with most other schemes.
  129. With each user in their own group,
  130. they can safely run with a umask of 002 instead of the usual 022
  131. and create files in their home directory
  132. without worrying about others being able to change them.
  133. .Pp
  134. For a shared area you create a separate UID/GID, you place each person
  135. that should be able to access this area into that new group.
  136. .Pp
  137. This model of UID/GID administration allows far greater flexibility than lumping
  138. users into groups and having to muck with the umask when working in a shared
  139. area.
  140. .Pp
  141. I have been using this model for almost 10 years and found that it works
  142. for most situations, and has never gotten in the way.
  143. (Rod Grimes)
  144. .Sh CONFIGURATION
  145. The
  146. .Nm
  147. utility reads its configuration information from
  148. .Pa /etc/adduser.conf .
  149. If this file does not exist, it will use predefined defaults.
  150. While this file may be edited by hand,
  151. the safer option is to use the
  152. .Fl C
  153. command line argument.
  154. With this argument,
  155. .Nm
  156. will start interactive input, save the answers to its prompts in
  157. .Pa /etc/adduser.conf ,
  158. and promptly exit without modifying the user
  159. database.
  160. Options specified on the command line will take precedence over
  161. any values saved in this file.
  162. .Sh OPTIONS
  163. .Bl -tag -width indent
  164. .It Fl C
  165. Create new configuration file and exit.
  166. This option is mutually exclusive with the
  167. .Fl f
  168. option.
  169. .It Fl d Ar partition
  170. Home partition.
  171. Default partition, under which all user directories
  172. will be located.
  173. The
  174. .Pa /nonexistent
  175. partition is considered special.
  176. The
  177. .Nm
  178. script will not create and populate a home directory by that name.
  179. Otherwise,
  180. by default it attempts to create a home directory.
  181. .It Fl D
  182. Do not attempt to create the home directory.
  183. .It Fl E
  184. Disable the account.
  185. This option will lock the account by prepending the string
  186. .Dq Li *LOCKED*
  187. to the password field.
  188. The account may be unlocked
  189. by the super-user with the
  190. .Xr pw 8
  191. command:
  192. .Pp
  193. .D1 Nm pw Cm unlock Op Ar name | uid
  194. .It Fl f Ar file
  195. Get the list of accounts to create from
  196. .Ar file .
  197. If
  198. .Ar file
  199. is
  200. .Dq Fl ,
  201. then get the list from standard input.
  202. If this option is specified,
  203. .Nm
  204. will operate in batch mode and will not seek any user input.
  205. If an error is encountered while processing an account, it will write a
  206. message to standard error and move to the next account.
  207. The format
  208. of the input file is described below.
  209. .It Fl g Ar login_group
  210. Normally,
  211. if no login group is specified,
  212. it is assumed to be the same as the username.
  213. This option makes
  214. .Ar login_group
  215. the default.
  216. .It Fl G Ar groups
  217. Space-separated list of additional groups.
  218. This option allows the user to specify additional groups to add users to.
  219. The user is a member of these groups in addition to their login group.
  220. .It Fl h
  221. Print a summary of options and exit.
  222. .It Fl k Ar directory
  223. Copy files from
  224. .Ar directory
  225. into the home
  226. directory of new users;
  227. .Pa dot.foo
  228. will be renamed to
  229. .Pa .foo .
  230. .It Fl L Ar login_class
  231. Set default login class.
  232. .It Fl m Ar file
  233. Send new users a welcome message from
  234. .Ar file .
  235. Specifying a value of
  236. .Cm no
  237. for
  238. .Ar file
  239. causes no message to be sent to new users.
  240. Please note that the message
  241. file can reference the internal variables of the
  242. .Nm
  243. script.
  244. .It Fl M Ar mode
  245. Create the home directory with permissions set to
  246. .Ar mode .
  247. .It Fl N
  248. Do not read the default configuration file.
  249. .It Fl q
  250. Minimal user feedback.
  251. In particular, the random password will not be echoed to
  252. standard output.
  253. .It Fl s Ar shell
  254. Default shell for new users.
  255. The
  256. .Ar shell
  257. argument may be the base name of the shell or the full path.
  258. Unless the
  259. .Fl S
  260. argument is supplied the shell must exist in
  261. .Pa /etc/shells
  262. or be the special shell
  263. .Em nologin
  264. to be considered a valid shell.
  265. .It Fl S
  266. The existence or validity of the specified shell will not be checked.
  267. .It Fl u Ar uid
  268. Use UIDs from
  269. .Ar uid
  270. on up.
  271. .It Fl w Ar type
  272. Password type.
  273. The
  274. .Nm
  275. utility allows the user to specify what type of password to create.
  276. The
  277. .Ar type
  278. argument may have one of the following values:
  279. .Bl -tag -width ".Cm random"
  280. .It Cm no
  281. Disable the password.
  282. Instead of an encrypted string, the password field will contain a single
  283. .Ql *
  284. character.
  285. The user may not log in until the super-user
  286. manually enables the password.
  287. .It Cm none
  288. Use an empty string as the password.
  289. .It Cm yes
  290. Use a user-supplied string as the password.
  291. In interactive mode,
  292. the user will be prompted for the password.
  293. In batch mode, the
  294. last (10th) field in the line is assumed to be the password.
  295. .It Cm random
  296. Generate a random string and use it as a password.
  297. The password will be echoed to standard output.
  298. In addition, it will be available for inclusion in the message file in the
  299. .Va randompass
  300. variable.
  301. .El
  302. .It Fl Z
  303. Do not attempt to create ZFS home dataset.
  304. .El
  305. .Sh FORMAT
  306. When the
  307. .Fl f
  308. option is used, the account information must be stored in a specific
  309. format.
  310. All empty lines or lines beginning with a
  311. .Ql #
  312. will be ignored.
  313. All other lines must contain ten colon
  314. .Pq Ql \&:
  315. separated fields as described below.
  316. Command line options do not take precedence
  317. over values in the fields.
  318. Only the password field may contain a
  319. .Ql \&:
  320. character as part of the string.
  321. .Pp
  322. .Sm off
  323. .D1 Ar name : uid : gid : class : change : expire : gecos : home_dir : shell : password
  324. .Sm on
  325. .Bl -tag -width ".Ar password"
  326. .It Ar name
  327. Login name.
  328. This field may not be empty.
  329. .It Ar uid
  330. Numeric login user ID.
  331. If this field is left empty, it will be automatically generated.
  332. .It Ar gid
  333. Numeric primary group ID.
  334. If this field is left empty, a group with the
  335. same name as the user name will be created and its GID will be used
  336. instead.
  337. .It Ar class
  338. Login class.
  339. This field may be left empty.
  340. .It Ar change
  341. Password ageing.
  342. This field denotes the password change date for the account.
  343. The format of this field is the same as the format of the
  344. .Fl p
  345. argument to
  346. .Xr pw 8 .
  347. It may be
  348. .Ar dd Ns - Ns Ar mmm Ns - Ns Ar yy Ns Op Ar yy ,
  349. where
  350. .Ar dd
  351. is for the day,
  352. .Ar mmm
  353. is for the month in numeric or alphabetical format:
  354. .Dq Li 10
  355. or
  356. .Dq Li Oct ,
  357. and
  358. .Ar yy Ns Op Ar yy
  359. is the four or two digit year.
  360. To denote a time relative to the current date the format is:
  361. .No + Ns Ar n Ns Op Ar mhdwoy ,
  362. where
  363. .Ar n
  364. denotes a number, followed by the minutes, hours, days, weeks,
  365. months or years after which the password must be changed.
  366. This field may be left empty to turn it off.
  367. .It Ar expire
  368. Account expiration.
  369. This field denotes the expiry date of the account.
  370. The account may not be used after the specified date.
  371. The format of this field is the same as that for password ageing.
  372. This field may be left empty to turn it off.
  373. .It Ar gecos
  374. Full name and other extra information about the user.
  375. .It Ar home_dir
  376. Home directory.
  377. If this field is left empty, it will be automatically
  378. created by appending the username to the home partition.
  379. The
  380. .Pa /nonexistent
  381. home directory is considered special and
  382. is understood to mean that no home directory is to be
  383. created for the user.
  384. .It Ar shell
  385. Login shell.
  386. This field should contain either the base name or
  387. the full path to a valid login shell.
  388. .It Ar password
  389. User password.
  390. This field should contain a plaintext string, which will
  391. be encrypted before being placed in the user database.
  392. If the password type is
  393. .Cm yes
  394. and this field is empty, it is assumed the account will have an empty password.
  395. If the password type is
  396. .Cm random
  397. and this field is
  398. .Em not
  399. empty, its contents will be used
  400. as a password.
  401. This field will be ignored if the
  402. .Fl w
  403. option is used with a
  404. .Cm no
  405. or
  406. .Cm none
  407. argument.
  408. Be careful not to terminate this field with a closing
  409. .Ql \&:
  410. because it will be treated as part of the password.
  411. .El
  412. .Sh FILES
  413. .Bl -tag -width ".Pa /etc/adduser.message" -compact
  414. .It Pa /etc/master.passwd
  415. user database
  416. .It Pa /etc/group
  417. group database
  418. .It Pa /etc/shells
  419. shell database
  420. .It Pa /etc/login.conf
  421. login classes database
  422. .It Pa /etc/adduser.conf
  423. configuration file for
  424. .Nm
  425. .It Pa /etc/adduser.message
  426. message file for
  427. .Nm
  428. .It Pa /usr/share/skel
  429. skeletal login directory
  430. .It Pa /var/log/adduser
  431. logfile for
  432. .Nm
  433. .El
  434. .Sh SEE ALSO
  435. .Xr chpass 1 ,
  436. .Xr passwd 1 ,
  437. .Xr adduser.conf 5 ,
  438. .Xr aliases 5 ,
  439. .Xr group 5 ,
  440. .Xr login.conf 5 ,
  441. .Xr passwd 5 ,
  442. .Xr shells 5 ,
  443. .Xr pw 8 ,
  444. .Xr pwd_mkdb 8 ,
  445. .Xr rmuser 8 ,
  446. .Xr vipw 8 ,
  447. .Xr yp 8
  448. .Sh HISTORY
  449. The
  450. .Nm
  451. command appeared in
  452. .Fx 2.1 .
  453. .Sh AUTHORS
  454. .An -nosplit
  455. This manual page and the original script, in Perl, was written by
  456. .An Wolfram Schneider Aq Mt wosch@FreeBSD.org .
  457. The replacement script, written as a Bourne
  458. shell script with some enhancements, and the man page modification that
  459. came with it were done by
  460. .An Mike Makonnen Aq Mt mtm@identd.net .
  461. .Sh BUGS
  462. In order for
  463. .Nm
  464. to correctly expand variables such as
  465. .Va $username
  466. and
  467. .Va $randompass
  468. in the message sent to new users, it must let the shell evaluate
  469. each line of the message file.
  470. This means that shell commands can also be embedded in the message file.
  471. The
  472. .Nm
  473. utility attempts to mitigate the possibility of an attacker using this
  474. feature by refusing to evaluate the file if it is not owned and writable
  475. only by the root user.
  476. In addition, shell special characters and operators will have to be
  477. escaped when used in the message file.
  478. .Pp
  479. Also, password ageing and account expiry times are currently settable
  480. only in batch mode or when specified in
  481. .Pa /etc/adduser.conf .
  482. The user should be able to set them in interactive mode as well.