Partially, column's default value can do that (for created date and user who did that); for modifications, use a trigger. 
Here's an example:
SQL> create table test (id number, name varchar2(20));
Table created.
SQL> alter table test add
  2    (created_date    date           default sysdate,
  3     created_by      varchar2(30)   default user,
  4     modified_date   date,
  5     modified_by     varchar2(30)
  6    );
Table altered.
SQL> insert into test (id, name) values (1, 'Little');
1 row created.
SQL> select * From test;
        ID NAME                 CREATED_DATE        CREATED_BY MODIFIED_DATE       MODIFIED_B
---------- -------------------- ------------------- ---------- ------------------- ----------
         1 Little               13.02.2020 22:23:17 SCOTT
Updating a row a little bit later - nothing has changed (for created and modified columns):
SQL> update test set name = 'Foot' where id = 1;
1 row updated.
SQL> select * From test;
        ID NAME                 CREATED_DATE        CREATED_BY MODIFIED_DATE       MODIFIED_B
---------- -------------------- ------------------- ---------- ------------------- ----------
         1 Foot                 13.02.2020 22:23:17 SCOTT
Let's create a trigger. It's a simple one:
SQL> create or replace trigger trg_testmod_bu
  2    before update on test
  3    for each row
  4  begin
  5    :new.modified_date := sysdate;
  6    :new.modified_by   := user;
  7  end;
  8  /
Trigger created.
SQL> update test set name = 'Bigfoot' where id = 1;
1 row updated.
SQL> select * From test;
        ID NAME                 CREATED_DATE        CREATED_BY MODIFIED_DATE       MODIFIED_B
---------- -------------------- ------------------- ---------- ------------------- ----------
         1 Bigfoot              13.02.2020 22:23:17 SCOTT      13.02.2020 22:26:38 SCOTT
Right; the trigger updated both modified columns.