---
name: "setuid"
section: "1"
platform: "linux"
package: "super"
version: "3.30.3-2+b2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/setuid"
---

# setuid(1)

run a command with a different uid.

## NAME

setuid - run a command with a different uid.

## SYNOPSIS

**setuid** **username**\|**uid**   *command* \[ *args* \]

## DESCRIPTION

*Setuid* changes user id, then executes the specified *command*. Unlike some versions of [*su*(1)](/su/1.md), this program doesn't ever ask for a password when executed with effective uid=root.  This program doesn't change the environment; it only changes the uid and then uses *execvp()* to find the *command* in the path, and execute it.  (If the *command* is a script, *execvp()* passes the command name to **/bin/sh** for processing.)

For example,

setuid  *some\_user*  $SHELL

can be used to start a shell running as another user.

*Setuid* is useful inside scripts that are being run by a setuid-root user — such as a script invoked with *super*, so that the script can execute some commands using the uid of the original user, instead of root.  This allows unsafe commands (such as editors and pagers) to be used in a non-root mode inside a super script. For example, an operator with permission to modify a certain *protected\_file* could use a super command that simply does:

```
cp protected_file temp_file
setuid $ORIG_USER ${EDITOR:-/bin/vi} temp_file
cp temp_file protected_file
```

(Note: don't use this example directly.  If the *temp\_file* can somehow be replaced by another user, as might be the case if it's kept in a temporary directory, there will be a race condition in the time between editing the temporary file and copying it back to the protected file.)

## AUTHOR

Will Deich
