20
submitted 2 weeks ago by dontblink@feddit.it to c/linux@lemmy.ml

Is there a way to require a user to wait a certain time instead of asking for a password every time he wants to execute a command as root or access the root / or another user account?

top 26 comments
sorted by: hot top controversial new old
[-] cypherpunks@lemmy.ml 23 points 2 weeks ago* (last edited 2 weeks ago)

sure. first, configure sudo to be passwordless, or perhaps just to stay unlocked for longer (it's easy to find instructions for how to do that).

then, put this in your ~/.bashrc:

alias sudo='echo -n "are you sure? "; for i in $(seq 5); do echo -n "$((6 - $i)) "; sleep 1; done && echo && /usr/bin/sudo '

Now "sudo" will give you a 5 second countdown (during which you can hit ctrl-c if you change your mind) before running whatever command you ask it to.

[-] Flyswat@lemmy.ml 12 points 2 weeks ago

In terms of security, an alias can be easily overridden by a user who can even choose yo use another shell which will not read .bashrc.

So this solution cannot force/require the user to comply to the delay requirement.

I was thinking maybe with a PAM module the delay can be achieved but I haven't found one that readily does that. Maybe OP needs to implement one :)

[-] Hawke@lemmy.world 1 points 2 weeks ago

pam_faildelay almost does it, but it only delays on auth failure. You would want something that delays on success. Might be almost as simple as “if not” on a check on pam_faildelay.

[-] alphadont@lemmy.ca 1 points 2 weeks ago

If an untrusted user is sitting at the console of a sudoer account, armed with its password, all is lost and any security has effectively been defeated already. While I do understand the concern it seems like something of a moot point.

[-] mina86@lemmy.wtf 12 points 2 weeks ago* (last edited 2 weeks ago)

Sure, though I advise against it. The following C program can do that:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char **argv) {
	if (argc < 2) {
		fprintf(stderr, "usage: %s <command> <args>...", argv[0]);
		return EXIT_FAILURE;
	}

	printf("Executing");
	for (int i = 1; i < argc; ++i) {
		printf(" %s", argv[i]);
	}
	puts("\nPress ^C to abort.");
	sleep(5);

	if (setuid(0)) {
		perror("setuid");
		return EXIT_FAILURE;
	}

	execvp(argv[1], argv + 1);
	perror(argv[1]);
	return EXIT_FAILURE;
}

As seen in:

$ gcc -O2 -o delay-su delay-su.c
$ sudo chown root:sudo delay-su
$ sudo chmod 4750 delay-su
$ ./delay-su id
$ id -u
1000
$ ./delay-su id -u
Executing id -u
^C to abort
0

This will allow anyone in group sudo to execute any command as root. You may change the group to something else to control who exactly can run the program (you cannot change the user of the program).

If there’s some specific command you want to run, it’s better to hard-code it or configure sudo to allow execution of that command without password.

[-] Mwa@lemm.ee 1 points 2 weeks ago

Rare seeing someone using C for automation rather then Python

[-] mina86@lemmy.wtf 1 points 2 weeks ago

You cannot write setuid scripts. It must be a binary.

[-] Mwa@lemm.ee 1 points 2 weeks ago

Ohh now I get it

[-] Hawke@lemmy.world 7 points 2 weeks ago* (last edited 2 weeks ago)

I can’t find anything that quite fits your requirements.

Putting a NOPASSWD option on your sudo config should cover the removal of the password requirement, but this may be ill-advised; it is probably wiser to increase the timestamp_timeout duration.

The intentional delay is tougher, and for that it looks like you’d need to write a PAM module. pam_faildelay is very close to what you need, you’d just need to make it produce a delay on success as well as failure.

[-] mbirth@lemmy.ml 7 points 2 weeks ago

What purpose should this fulfil? If you are unsure whether your command is correct, double-check it before hitting the ENTER key.

[-] mark@social.cool110.xyz 5 points 2 weeks ago

@dontblink You would have to write a PAM module to do that

[-] peterg75@discuss.online 4 points 2 weeks ago

This would literally render sudo utterly useless. Sudo is meant to require password to accomplish admin tasks. In your scenario anyone using your computer can do anything without knowing the password.

[-] Hawke@lemmy.world 7 points 2 weeks ago

This is not entirely accurate; there are plenty of times when sudo does not require a password even in the default config. And there’s the nopasswd option built-in already which would already do that portion of this request.

It sounds like the OP wants to use sudo as a Molly-guard. There’s nothing wrong with that, although it may not be the right tool for the job.

[-] mina86@lemmy.wtf 3 points 2 weeks ago* (last edited 2 weeks ago)

Having to type sudo already acts as a molly-guard. Whatever OP wants to do I won’t stop them, but they are doing something strange.

[-] Enkers@sh.itjust.works 2 points 2 weeks ago

While I pretty much agree, I can definitely think of a few sporadic times doing sysadmin where things have gone so significantly wrong that an enforced sanity-check on every sudo command would have been appreciated.

[-] peterg75@discuss.online 2 points 2 weeks ago

There are plenty of ways to configure Linux to circumvent sudo. I've even seen people who log in as root by default. I do not, however, advise anyone to do that even if it's just, as you put it, a Molly Guard. It has prevented me personally from doing catastrophic things to my system on a number of occasions.

[-] deadcatbounce@reddthat.com 3 points 2 weeks ago

Yes; the command prefix that you're looking for is

shutdown now ; (followed by your sudo command if you wish)

It will provide the appropriate delay before using the root command via sudo or having logged again as root (sigh)!

[-] m33@theprancingpony.in 1 points 2 weeks ago

@deadcatbounce @dontblink That's the Linux version of "press ALT+F4 to enable cheatmode" 🤣

[-] deadcatbounce@reddthat.com 1 points 2 weeks ago* (last edited 2 weeks ago)

Please don't desecrate my Linux with (what I assume is) Windows talk.

Bleugh! I need a shower!

[The worst Linux users are ex Windows users; 2004 vintage here]

[-] terminal@lemmy.ml 2 points 2 weeks ago

Do you mean the delay between when you need to re-enter the superuser password?

I found this via an LLM:

To change the delay before needing to re-enter your sudo password, follow these steps:

  1. Open the terminal and run:

    sudo visudo
    
  2. Locate the line:

    Defaults env_reset
    
  3. Add the following line below it:

    Defaults timestamp_timeout=<time-in-minutes>
    

    Replace <time-in-minutes> with the desired timeout in minutes (e.g., 30 for 30 minutes). Setting it to 0 requires a password every time, while a negative value disables the timeout entirely.

[-] Mazesecle@lemm.ee 18 points 2 weeks ago

I'm curious, why do people make these comments? If the op wanted an answer from an LLM, they would have asked an LLM...

[-] nawordar@lemmy.ml 3 points 2 weeks ago

A modern equivalent of let me google that for you, but a more obnoxious one

[-] turbowafflz@lemmy.world 10 points 2 weeks ago

"~~I found this via an LLM~~"

"Here's a made up answer"

[-] lka1988@lemmy.dbzer0.com 1 points 2 weeks ago

And did you verify this before posting?

this post was submitted on 21 Mar 2025
20 points (100.0% liked)

Linux

52907 readers
826 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS